RESTful 规范是设计 Python API 的关键实践,需用名词复数命名资源、严格匹配 HTTP 方法语义、用状态码真实反映结果、统一响应格式、前置版本控制与结构化错误处理。
设计 Python API 接口时,遵循 RESTful 规范不是可选项,而是提升可维护性、协作效率和系统扩展性的关键实践。核心在于用 HTTP 方法表达操作意图,用 URL 表达资源,用状态码表达结果,而非把所有逻辑塞进 POST。
URL 应指向“谁”或“什么”,而不是“做什么”。避免 /getUser、/deleteOrder 这类动词化路径。正确做法是统一用复数名词表示资源集合:
不推荐使用下划线或驼峰,全部小写 + 连字符更通用,如 /api/v1/user-profiles 不如 /api/v1/user-profiles(保持一致即可),但 /api/v1/userProfiles 或 /api/v1/user_profiles 易引发客户端解析歧义,建议统一用 - 分隔。
每个方法有明确约定,不可混用。后端实现需与之对齐,否则前端无法可靠预测行为:
201 Created + Location 头)
204 No Content(无响应体)例如:修改用户昵称不应用 POST /users/123/update-nickname,而应 PATCH /users/123,请求体为 {"nickname": "newname"}。
不要所有接口都返回 200 OK 再靠 body 里的 code 字段判断成败。HTTP 状态码是协议层契约:
201 Created(含 Location: /users/789)200 OK 或 204 No Content(无返回体时)404 Not Found(不是 200 + {"error": "not found"})400 Bad Request,响应体含具体错误字段(如 {"email": ["invalid format"]})401 Unauthorized;无权限 → 403 Forbidden
响应体结构建议保持一致,例如顶层包含 data、errors、meta(分页信息),避免有的返回扁平字段,有的嵌套多层。
API 一旦上线,变更就牵一发而动全身。从第一天起就要考虑兼容性:
/api/v1/users,比放 Header 或参数更直观、易调试X-API-Deprecated: true 响应头并说明替代路径code(机器可读,如 "VALIDATION_ERROR")、message(简明中文提示)、details(可选,如字段名、原因)X-Request-ID),便于问题追踪用 Flask 或 FastAPI 时,可通过中间件或异常处理器自动封装错误响应,避免每个视图重复写 try-except。