当您的目标是构建快速、可扩展的REST风格API微服务时, Falcon 是个不错的选择。
这是一个可靠的、高性能的Python Web框架,用于构建大规模应用后端和微服务。Falcon鼓励REST架构风格的 URI到资源的映射,以花费尽可能少的精力同时又保持高效。
Falcon重点关注四个方面:速度、可靠性、灵活性和可调试性。它通过"响应者(responder)" (诸如
on_get()
、on_put()
等)来实现HTTP。这些响应者接收直接的请求,以及响应对象。
官网地址:https://falconframework.org
Falcon 同时支持CPython和PyPy,后者具有更快的速度。考虑到兼容性,这里默认采用CPython3.7作为解释器。
pip install falcon
ujson在CPython下,可以提高序列化及字符的解析速度,这里我们也安装它
pip install ujson
尽管falcon已经足够快,但是如果想在生产环境中获得额外的速度提升,可以使用Cython扩展来编译Falcon。下面的命令将安装Cython,然后调用Falcon’s setup.py
,而后者会检测Cython并使用系统默认的C编译器编辑Falcon.
pip install cython
pip install -v --no-binary :all: falcon
注意,在OS X系统上,编译Cython需要安装Xcode命令行工具。
这里我们选择使用Gunicorn:
pip install gunicorn
# things.py
import falcon
class ThingsResource(object):
def on_get(self, req, resp):
resp.status = falcon.HTTP_200
resp.body = 'hello world\n'
# falcon.API()的实例就是可调用的WSGI应用
app = falcon.API()
things = ThingsResource()
app.add_route('/things', things)
使用gunicorn运行上述示例:
gunicorn things:app
# 默认运行在本机的8000端口
[2019-01-08 22:32:25 +0800] [19905] [INFO] Starting gunicorn 19.9.0
[2019-01-08 22:32:25 +0800] [19905] [INFO] Listening at: http://127.0.0.1:8000 (19905)
在另一个终端中请求:
curl localhost:8000/things
# 响应如下
hello world
curl
命令使用麻烦,下面我们安装HTTPie并使用它:
pip install --upgrade httpie
http localhost:8000/things
# 响应如下
HTTP/1.1 200 OK
Connection: close
Date: Tue, 08 Jan 2019 22:36:28 GMT
Server: gunicorn/19.9.0
content-length: 12
content-type: application/json; charset=UTF-8
hello world