24 Flask RESTful API 请求与响应
在上一篇文章中,我们讨论了什么是 RESTful API 以及如何定义 API。本篇将更深入地探讨如何处理 HTTP 请求与响应,这是构建 RESTful API 的核心部分。我们将通过一个简单的示例来演示如何在 Flask 中处理请求和返回响应。
处理请求
在 Flask 中,处理 HTTP 请求非常简单。我们可以通过定义视图函数来接收不同的 HTTP 方法(如 GET、POST、PUT 和 DELETE)。使用 @app.route()
装饰器,我们可以将 URL 路径与相应的视图函数关联起来。
示例代码
让我们创建一个简单的 Flask 应用,处理关于书籍的 RESTful API。以下代码展示了如何创建一个简单的书籍存储服务,支持 GET 和 POST 请求。
1 | from flask import Flask, jsonify, request |
代码讲解
获取书籍 (GET /books):
- 当客户端发起 GET 请求时,
get_books
视图函数会被调用,它返回包含所有书籍的 JSON 响应,状态码为200
。 - 使用
jsonify
来生成响应,它会自动将 Python 字典转换为 JSON 格式。
- 当客户端发起 GET 请求时,
添加新书 (POST /books):
- 当客户端发送 POST 请求时,
add_book
视图函数会被触发。我们使用request.get_json()
来获取请求体中的 JSON 数据。 - 代码检查请求体中是否包含
title
和author
字段。如果缺少这些字段,则返回400 Bad Request
响应。 - 如果验证通过,则将新书加入
books
列表,并返回新书的 JSON 数据,状态为201 Created
。
- 当客户端发送 POST 请求时,
处理响应
在处理响应时,Flask 允许我们灵活地设置返回的状态码和返回的内容。通常,一个良好的 RESTful API 应该保证返回适当的 HTTP 状态码,以便客户端知道请求是否成功。
状态码与响应示例
- 成功响应:
- 对于成功的 GET 或 POST 请求,我们通常返回
200 OK
或201 Created
。
- 对于成功的 GET 或 POST 请求,我们通常返回
- 错误响应:
- 如果客户端请求的资源不存在,返回
404 Not Found
。 - 对于不合法的请求参数,返回
400 Bad Request
。
- 如果客户端请求的资源不存在,返回
我们可以通过修改先前的代码来包含这些场景。
完整示例代码
1 |
|
解释新增内容
获取单本书籍 (GET /books/
) :- 根据传入的
book_id
返回特定的书籍,如果书籍不存在,则返回404 Not Found
响应。
- 根据传入的
删除书籍 (DELETE /books/
) :- 该路由允许删除指定 ID 的书籍。如果 ID 有效,则从列表中移除相应的书籍并返回该书籍的 JSON 数据;如果无效,则返回
404 Not Found
。
- 该路由允许删除指定 ID 的书籍。如果 ID 有效,则从列表中移除相应的书籍并返回该书籍的 JSON 数据;如果无效,则返回
小结
在本篇教程中,我们深入探讨了 Flask 中 RESTful API 的请求与响应。我们学会了如何处理客户端发来的请求,如何返回合适的响应以及如何结合 HTTP 状态码来提高 API 的可用性。
在下一篇文章中,我们将讨论如何为 RESTful API 实施版本控制,从而确保 API 的向后兼容性及易于未来扩展。如果你对 API 的设计和实现有更多的好奇,欢迎继续跟随我们的系列教程!
24 Flask RESTful API 请求与响应