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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from flask import Flask, jsonify, request

app = Flask(__name__)

# 模拟数据库
books = []

@app.route('/books', methods=['GET'])
def get_books():
return jsonify(books), 200

@app.route('/books', methods=['POST'])
def add_book():
new_book = request.get_json()
if not new_book or 'title' not in new_book or 'author' not in new_book:
return jsonify({'error': 'Bad Request', 'message': 'Missing title or author'}), 400
books.append(new_book)
return jsonify(new_book), 201

if __name__ == '__main__':
app.run(debug=True)

代码讲解

  1. 获取书籍 (GET /books):

    • 当客户端发起 GET 请求时,get_books 视图函数会被调用,它返回包含所有书籍的 JSON 响应,状态码为 200
    • 使用 jsonify 来生成响应,它会自动将 Python 字典转换为 JSON 格式。
  2. 添加新书 (POST /books):

    • 当客户端发送 POST 请求时,add_book 视图函数会被触发。我们使用 request.get_json() 来获取请求体中的 JSON 数据。
    • 代码检查请求体中是否包含 titleauthor 字段。如果缺少这些字段,则返回 400 Bad Request 响应。
    • 如果验证通过,则将新书加入 books 列表,并返回新书的 JSON 数据,状态为 201 Created

处理响应

在处理响应时,Flask 允许我们灵活地设置返回的状态码和返回的内容。通常,一个良好的 RESTful API 应该保证返回适当的 HTTP 状态码,以便客户端知道请求是否成功。

状态码与响应示例

  • 成功响应:
    • 对于成功的 GET 或 POST 请求,我们通常返回 200 OK201 Created
  • 错误响应:
    • 如果客户端请求的资源不存在,返回 404 Not Found
    • 对于不合法的请求参数,返回 400 Bad Request

我们可以通过修改先前的代码来包含这些场景。

完整示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@app.route('/books/<int:book_id>', methods=['GET'])
def get_book(book_id):
if 0 <= book_id < len(books):
return jsonify(books[book_id]), 200
else:
return jsonify({'error': 'Not Found', 'message': 'Book does not exist'}), 404

@app.route('/books/<int:book_id>', methods=['DELETE'])
def delete_book(book_id):
if 0 <= book_id < len(books):
deleted_book = books.pop(book_id)
return jsonify(deleted_book), 200
else:
return jsonify({'error': 'Not Found', 'message': 'Book does not exist'}), 404

解释新增内容

  1. 获取单本书籍 (GET /books/):

    • 根据传入的 book_id 返回特定的书籍,如果书籍不存在,则返回 404 Not Found 响应。
  2. 删除书籍 (DELETE /books/):

    • 该路由允许删除指定 ID 的书籍。如果 ID 有效,则从列表中移除相应的书籍并返回该书籍的 JSON 数据;如果无效,则返回 404 Not Found

小结

在本篇教程中,我们深入探讨了 Flask 中 RESTful API 的请求与响应。我们学会了如何处理客户端发来的请求,如何返回合适的响应以及如何结合 HTTP 状态码来提高 API 的可用性。

在下一篇文章中,我们将讨论如何为 RESTful API 实施版本控制,从而确保 API 的向后兼容性及易于未来扩展。如果你对 API 的设计和实现有更多的好奇,欢迎继续跟随我们的系列教程!

24 Flask RESTful API 请求与响应

https://zglg.work/flask-zero/24/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论