使用 Python 和 aiohttp 创建 RESTful API

更新于 2026-01-11

Elliot Forbes 2017-10-28

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

入门 aiohttp

在深入探讨如何使用 aiohttp 创建简单 RESTful API 之前,了解这个框架到底是什么以及它能为我们做什么非常重要。

首先,aiohttp 对 HTTP 协议提供了出色的支持,同时也支持 WebSocket,这使其非常适合与流行的 WebSocket 库(例如 Socket.io)配合使用。

aiohttp 框架的关键特性在于其异步工作方式——它可以轻松地并发处理每秒数百个请求。与 Flask 等传统框架相比,它的性能极为出色。

安装 aiohttp

要安装 aiohttp,只需运行以下 pip 命令:

pip install aiohttp

编写一个简单的 API

为了开始编写一个简单的 API,我们首先定义一个处理函数:async def handle(request):,该函数在被调用时会返回一个 JSON 格式的响应。

接着,我们通过调用 app = web.Application() 创建一个应用对象,然后设置应用的路由,并添加一个 GET 请求端点,当访问路径 / 时会调用 handle 函数。

最后,我们调用 web.run_app(app) 来启动我们新定义的 aiohttp API。

文件名:app.py

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:8080 ========
(Press CTRL+C to quit)

当你在浏览器中访问 http://localhost:8080 时,应该会看到返回的内容为:

{"status": "success"}

POST 请求和查询参数

现在我们已经成功定义了一个非常基础的单端点 API,接下来可以在此基础上扩展,暴露使用不同 HTTP 方法(动词)的不同路由。

让我们创建一个简单的 POST 请求端点,该端点通过查询参数接收 name。我们希望最终的 URL 看起来像这样:
http://localhost:8080/user?name=elliot

现在我们来定义处理函数 new_user(request)

async def new_user(request):
    try:
        # 正常路径:name 参数已设置
        user = request.query['name']
        # 处理新用户
        print("Creating new user with name: ", user)

        response_obj = { 'status' : 'success' }
        # 返回状态码为 200(即 'OK')的成功 JSON 响应
        return web.Response(text=json.dumps(response_obj), status=200)
    except Exception as e:
        # 异常路径:name 参数未设置
        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:8080 ========
(Press CTRL+C to quit)
Creating new user with name:  test

同时,你也会收到相同的成功 JSON 响应以及 200 状态码。