JSON1

JSON API 最佳实践

设计高质量、易维护、用户友好的JSON API的完整指南

API设计原则

核心原则

  • 一致性:统一的命名和结构规范
  • 可预测性:开发者能够预期API行为
  • 简洁性:避免不必要的复杂性
  • 可扩展性:支持未来功能扩展
  • 向后兼容:保护现有集成

RESTful设计风格

遵循REST架构风格,使API更加直观和标准化:

  • • 资源导向的URL设计
  • • 正确使用HTTP方法
  • • 无状态通信
  • • 分层系统架构

命名规范

URL路径规范

推荐做法

GET /api/v1/users
GET /api/v1/users/123
POST /api/v1/users
PUT /api/v1/users/123
DELETE /api/v1/users/123

GET /api/v1/users/123/orders
GET /api/v1/orders?user_id=123

避免的做法

GET /api/v1/getUsers
POST /api/v1/createUser
GET /api/v1/user_list
GET /api/v1/Users/123/Orders
DELETE /api/v1/removeUser/123

GET /getUserData?id=123

命名规则说明

  • • 使用复数名词表示资源集合:/users/orders
  • • 使用小写字母和连字符:/user-profiles
  • • 避免动词,让HTTP方法表达操作
  • • 嵌套资源应该反映逻辑关系
  • • 使用查询参数进行过滤和排序

JSON字段命名

推荐:snake_case

{
  "user_id": 123,
  "first_name": "张三",
  "last_name": "李",
  "email_address": "user@example.com",
  "created_at": "2024-01-01T00:00:00Z",
  "is_active": true,
  "profile_image_url": "https://..."
}

也可以:camelCase

{
  "userId": 123,
  "firstName": "张三",
  "lastName": "李",
  "emailAddress": "user@example.com",
  "createdAt": "2024-01-01T00:00:00Z",
  "isActive": true,
  "profileImageUrl": "https://..."
}

HTTP方法使用

GET

获取资源

特性:安全、幂等、可缓存

GET /api/v1/users - 获取用户列表GET /api/v1/users/123 - 获取特定用户GET /api/v1/users?page=2&limit=20 - 分页获取
POST

创建资源

特性:非安全、非幂等、不可缓存

POST /api/v1/users - 创建新用户POST /api/v1/users/123/orders - 为用户创建订单POST /api/v1/auth/login - 用户登录
PUT

完整更新资源

特性:非安全、幂等、不可缓存

PUT /api/v1/users/123 - 完整更新用户信息PUT /api/v1/users/123/password - 更新密码
PATCH

部分更新资源

特性:非安全、非幂等、不可缓存

PATCH /api/v1/users/123 - 部分更新用户信息PATCH /api/v1/users/123/status - 更新用户状态
DELETE

删除资源

特性:非安全、幂等、不可缓存

DELETE /api/v1/users/123 - 删除用户DELETE /api/v1/users/123/sessions - 删除用户会话

状态码规范

2xx 成功

200
OK
GET、PUT、PATCH请求成功
201
Created
POST请求成功创建资源
204
No Content
DELETE请求成功,无返回内容

4xx 客户端错误

400
Bad Request
请求参数错误或格式不正确
401
Unauthorized
未认证或认证失败
403
Forbidden
已认证但无权限访问
404
Not Found
资源不存在
422
Unprocessable Entity
请求格式正确但数据验证失败

5xx 服务器错误

500
Internal Server Error
服务器内部错误
502
Bad Gateway
网关错误
503
Service Unavailable
服务暂时不可用

错误处理

统一错误响应格式

{
  "error": {
    "code": "VALIDATION_FAILED",
    "message": "请求数据验证失败",
    "details": [
      {
        "field": "email",
        "message": "邮箱格式不正确"
      },
      {
        "field": "password",
        "message": "密码长度至少8位"
      }
    ],
    "timestamp": "2024-01-01T12:00:00Z",
    "request_id": "req_123456"
  }
}

错误响应字段说明

  • code: 机器可读的错误代码
  • message: 人类可读的错误描述
  • details: 详细错误信息(可选)
  • timestamp: 错误发生时间
  • request_id: 请求ID,便于日志追踪

常见错误类型

  • INVALID_REQUEST - 请求格式错误
  • VALIDATION_FAILED - 数据验证失败
  • AUTHENTICATION_REQUIRED - 需要认证
  • PERMISSION_DENIED - 权限不足
  • RESOURCE_NOT_FOUND - 资源不存在
  • RATE_LIMIT_EXCEEDED - 超出限流

错误处理最佳实践

  • • 提供清晰的错误描述
  • • 包含解决问题的建议
  • • 使用一致的错误格式
  • • 避免暴露敏感信息
  • • 提供请求ID便于追踪
  • • 适当的HTTP状态码

快速参考

常用API设计模式

GET /api/v1/users?page=1&limit=20GET /api/v1/users?sort=created_at&order=descGET /api/v1/users?filter[status]=activeGET /api/v1/users?include=profile,orders

相关工具

其他语言版本