使用Python和aiohttp创建RESTfulAPI
在本教程中,我们将使用aio-libs / aiohttp构建一个非常简单的基于RESTful的API,它是一个异步的http客户端/服务器框架。
在我们开始讨论如何使用aiohttp创建一个简单的RESTful API之前,确切了解框架是什么以及它可以为我们做些什么是很重要的。首先,它具有对HTTP协议和websockets的出色支持,使其成为使用流行的websocket库(如Socket.io)的理想选择。如果您有兴趣了解如何实现基于客户端/服务器socketio的简单解决方案,请查看教程:Python Socket.io和aiohttp教程 。
aiohttp框架的关键部分是它以异步方式工作,它可以同时处理每秒数百个请求而不会有太多麻烦。与诸如flask之类的框架相比,它具有令人难以置信的高性能。
要安装aiohttp,您可以运行以下pip命令:
pip install aiohttp
为了让我们开始编写一个简单的API,我们将编写一个处理函数; async def handle(request): 无论何时调用它都将返回基于json的响应。然后我们将通过调用 app = web.Application() 来创建一个app对象,然后我们将设置我们的应用程序的路由器并添加一个GET请求端点,只要命中 “/” 就调用句柄。最后,我们调用 web.run_app(app) 以启动我们新定义的aiohttp API。
from aiohttp import web
import json
async def handle(request):
response_obj = {'status': 'success'}
return web.Response(text=json.dumps(response_obj))
app = web.Application()
app.router.add_get('/', handle)
web.run_app(app)
然后我们可以通过调用python app.py运行我们的新REST API,它应该在http://0.0.0.0 或者 http:// localhost上启动我们的应用程序。默认端口8080
$ python3.6 app.py
======== Running on http://0.0.0.0 ========
(Press CTRL+C to quit)
当然访问 http://localhost:8080 时 您应该会在浏览器中看到我们的{“status”:“success”}。
既然我们已经成功定义了一个非常基本的单端点API,我们现在可以开始构建一些不同的路由。让我们创建一个简单的POST请求,它通过查询参数获取名称。我们希望此端点的最终URL如下所示: http://localhost:8080/user?name=elliot ,
现在让我们定义处理函数 new_user(request)
async def new_user(request):
try:
# 获取查询用户
user = request.query['name']
# 处理新用户
print(f"创建名称为: {user} 的新用户")
response_obj = {'status': 'success'}
# 返回状态码为200的成功json响应,即'OK'
return web.Response(text=json.dumps(response_obj), status=200)
except Exception as e:
# 未设置名称
response_obj = {'status': 'failed', 'reason': str(e)}
# 返回失败,状态代码为500,即“服务器错误”
return web.Response(text=json.dumps(response_obj), status=500)
一旦我们成功定义了这个新的处理函数,我们就必须在我们的路由中注册它,如下所示:
app.router.add_post('/user', new_user)
尝试立即运行您的应用程序并向: http://localhost:8080/user?name=test 发送post请求。您应该可以在控制台看到一下输出:
$ python3.6 app.py
======== Running on http://0.0.0.0 ========
(Press CTRL+C to quit)
创建名称为: test 的新用户
您应该还获得相同的成功json和200状态。