DINGDANGMAOUP
DINGDANGMAOUP
Published on 2025-08-29 / 94 Visits
0
0

REST API 设计规范

1. 资源命名规范

1.1 命名原则

  • 使用名词复数形式表示资源集合,例如 /users/products

  • 资源名称采用小写字母,单词间使用连字符分隔,例如 /user-profiles

  • 避免使用动词,资源操作通过 HTTP 方法表达

  • 保持命名简洁且具有描述性

1.2 层级关系

  • 使用嵌套资源表示层级关系,例如 /users/{userId}/orders

  • 嵌套层级不宜超过两层,避免过度复杂的 URL 结构

  • 对于多对多关系,使用专门的资源端点,例如 /users/{userId}/followers

2. HTTP 方法使用规范

2.1 方法语义

  • GET:安全且幂等的读取操作,用于获取资源或资源集合

  • POST:非幂等的创建操作,用于新建资源

  • PUT:幂等的完整更新操作,用于替换整个资源

  • PATCH:非幂等的部分更新操作,用于修改资源的部分属性

  • DELETE:幂等的删除操作,用于移除资源

2.2 方法选择指南

  • 创建资源时优先使用 POST

  • 更新资源时,完整更新使用 PUT,部分更新使用 PATCH

  • 删除操作必须使用 DELETE 方法

  • 避免使用 GET 方法执行具有副作用的操作

3. 状态码使用规范

3.1 成功状态码

  • 200 OK:通用成功状态,适用于大多数成功响应

  • 201 Created:资源创建成功,应在响应中包含 Location 头指向新资源

  • 202 Accepted:请求已接受但尚未处理完成

  • 204 No Content:请求成功但无返回内容

3.2 客户端错误状态码

  • 400 Bad Request:请求格式错误或参数无效

  • 401 Unauthorized:需要身份验证或认证失败

  • 403 Forbidden:认证成功但无访问权限

  • 404 Not Found:请求资源不存在

  • 405 Method Not Allowed:请求方法不被支持

  • 409 Conflict:请求与当前资源状态冲突

  • 429 Too Many Requests:请求频率超出限制

3.3 服务器错误状态码

  • 500 Internal Server Error:服务器内部错误

  • 502 Bad Gateway:网关或代理服务器错误

  • 503 Service Unavailable:服务暂时不可用

  • 504 Gateway Timeout:网关超时

4. 版本管理策略

4.1 版本控制方式

  • URI 路径版本控制:/api/v1/resource

  • 请求头版本控制:Accept: application/vnd.api.v1+json

  • 查询参数版本控制:/api/resource?version=1

4.2 版本演进原则

  • 保持向后兼容性,避免破坏性变更

  • 废弃的 API 应提供足够的迁移时间

  • 新版本应明确标注弃用时间表

5. 查询参数规范

5.1 分页参数

  • limit:指定返回记录数量

  • offset:指定起始偏移量

  • page:当前页码(可选)

  • per_page:每页记录数(可选)

5.2 排序参数

  • sort:排序字段,支持多个字段逗号分隔

  • order:排序方向(asc/desc)

  • 示例:sort=name,created_at&order=asc,desc

5.3 过滤参数

  • 使用字段名作为过滤条件

  • 支持范围查询:price_min, price_max

  • 支持包含查询:tags=tag1,tag2

  • 支持搜索查询:q=keyword

6. 请求和响应格式

6.1 请求格式

  • 使用 JSON 作为主要数据交换格式

  • 设置正确的 Content-Type 头:application/json

  • 请求体应遵循统一的格式规范

6.2 响应格式

  • 成功响应包含数据主体和元数据

  • 错误响应包含错误代码和描述信息

  • 使用一致的日期时间格式(ISO 8601)

7. 错误处理机制

7.1 错误响应结构

{
  "error": {
    "code": "error_code",
    "message": "错误描述",
    "details": [
      {
        "field": "字段名",
        "issue": "具体问题"
      }
    ],
    "request_id": "请求标识符"
  }
}

7.2 错误分类

  • 验证错误:输入数据不符合要求

  • 业务错误:违反业务规则

  • 系统错误:服务器内部问题

  • 权限错误:访问权限不足

8. 安全规范

8.1 身份认证

  • 使用 OAuth 2.0 或 JWT 进行身份验证

  • 支持多种认证方式(Bearer Token、API Key)

  • 认证失败返回 401 状态码

8.2 授权控制

  • 基于角色的访问控制(RBAC)

  • 资源级别的权限验证

  • 操作前进行权限检查

8.3 数据安全

  • 使用 HTTPS 加密传输

  • 敏感数据加密存储

  • 防止 SQL 注入和 XSS 攻击

9. 性能优化

9.1 缓存策略

  • 使用 ETag 进行条件请求

  • 设置适当的 Cache-Control 头

  • 支持客户端缓存验证

9.2 压缩传输

  • 支持 Gzip 压缩

  • 减少不必要的数据传输

  • 使用字段选择减少响应大小

10. 文档和测试

10.1 API 文档

  • 使用 OpenAPI 规范编写文档

  • 提供详细的参数说明和示例

  • 包含错误代码和状态码说明

10.2 测试策略

  • 单元测试覆盖所有端点

  • 集成测试验证业务流程

  • 性能测试确保系统稳定性

11. 监控和日志

11.1 监控指标

  • 请求成功率

  • 响应时间分布

  • 错误率统计

11.2 日志记录

  • 记录请求和响应信息

  • 包含请求标识符用于追踪

  • 保存足够的上下文信息

12. 最佳实践

12.1 设计原则

  • 保持接口简洁一致

  • 遵循 REST 约束条件

  • 提供清晰的错误信息

12.2 演进策略

  • 逐步迭代而非大规模重写

  • 保持向后兼容性

  • 定期审查和优化 API 设计


Comment