原文出自: Creating a RESTful API with Python and aiohttp

在本教程中,我们将使用aio-libs / aiohttp构建一个非常简单的基于RESTful的API,它是一个异步的http客户端/服务器框架。

aiohttp入门

在我们开始讨论如何使用aiohttp创建一个简单的RESTful API之前,确切了解框架是什么以及它可以为我们做些什么是很重要的。首先,它具有对HTTP协议和websockets的出色支持,使其成为使用流行的websocket库(如Socket.io)的理想选择。如果您有兴趣了解如何实现基于客户端/服务器socketio的简单解决方案,请查看教程:Python Socket.io和aiohttp教程

aiohttp框架的关键部分是它以异步方式工作,它可以同时处理每秒数百个请求而不会有太多麻烦。与诸如flask之类的框架相比,它具有令人难以置信的高性能。

安装aiohttp

要安装aiohttp,您可以运行以下pip命令:

pip install aiohttp

编写一个简单的API

为了让我们开始编写一个简单的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)

测试我们的API

然后我们可以通过调用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”}。

POST请求和查询参数

既然我们已经成功定义了一个非常基本的单端点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状态。