写后端接口,RESTful 是主流标准。Flask 虽然轻量,但配合几个小技巧,做出符合 RESTful 风格的 API 并不难。
这篇分享我实战中常用的设计方法,帮你理清思路和代码结构。
一、RESTful 基本原则回顾
- 资源(Resource)为核心,URL 指代资源,比如
/users
、/orders/123
- HTTP 方法代表动作:
- GET 读资源
- POST 新建资源
- PUT 更新资源(整体替换)
- PATCH 更新资源(部分更新)
- DELETE 删除资源
- 使用状态码体现请求结果(200、201、400、404、500 等)
二、Flask 如何快速做 RESTful API?
1. 使用 Flask 原生路由 + request
+ jsonify
from flask import Flask, request, jsonify
app = Flask(__name__)
users = []
@app.route("/users", methods=["GET", "POST"])
def users_handler():
if request.method == "GET":
return jsonify(users)
elif request.method == "POST":
user = request.json
users.append(user)
return jsonify(user), 201
@app.route("/users/<int:user_id>", methods=["GET", "PUT", "DELETE"])
def user_handler(user_id):
if user_id >= len(users):
return jsonify({"error": "User not found"}), 404
if request.method == "GET":
return jsonify(users[user_id])
elif request.method == "PUT":
users[user_id] = request.json
return jsonify(users[user_id])
elif request.method == "DELETE":
deleted = users.pop(user_id)
return jsonify(deleted)
2. 状态码和异常处理
别忘了给响应加上合适状态码,比如新增资源返回 201 Created
。
可以用 Flask 的 abort
抛错:
from flask import abort
if user_id >= len(users):
abort(404, description="User not found")
3. 使用 Flask-RESTful 或 Flask-RESTX 提升效率
安装:
pip install flask-restful
示例:
from flask_restful import Api, Resource, reqparse
app = Flask(__name__)
api = Api(app)
users = []
parser = reqparse.RequestParser()
parser.add_argument('name')
parser.add_argument('email')
class UserList(Resource):
def get(self):
return users
def post(self):
args = parser.parse_args()
users.append(args)
return args, 201
api.add_resource(UserList, '/users')
三、设计技巧分享
- 资源名称用复数,URL 简洁清晰
- 输入验证最好用库,比如
marshmallow
、pydantic
- 返回格式保持一致,通常是
{ "code": 0, "msg": "ok", "data": {...} }
- 错误统一处理,避免抛出默认 HTML 错误页面
- API 文档写好(Swagger / OpenAPI),方便前后端对接
四、总结
Flask 设计 RESTful API 不复杂,关键是保持思路清晰:
- URL 设计资源导向
- HTTP 动作表达操作
- 合理使用状态码和异常
- 代码尽量结构化,易维护