designing-apis

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Designing APIs

API设计

Workflows

工作流程

  • Resources: Identify resources and relationships
  • Endpoints: Define URL structure and methods
  • Request/Response: Define payloads and schemas
  • Errors: Define error responses
  • Document: Create OpenAPI spec
  • 资源:识别资源及其关系
  • 端点:定义URL结构与请求方法
  • 请求/响应:定义负载与模式
  • 错误:定义错误响应
  • 文档:创建OpenAPI规范

REST Principles

REST设计原则

Resource Naming

资源命名

  • Use nouns, not verbs:
    /users
    not
    /getUsers
  • Use plural:
    /users
    not
    /user
  • Use kebab-case:
    /user-profiles
    not
    /userProfiles
  • Nest for relationships:
    /users/{id}/orders
  • 使用名词而非动词:
    /users
    而非
    /getUsers
  • 使用复数形式:
    /users
    而非
    /user
  • 使用短横线分隔(kebab-case):
    /user-profiles
    而非
    /userProfiles
  • 通过嵌套表示关系:
    /users/{id}/orders

HTTP Methods

HTTP请求方法

MethodPurposeIdempotent
GETReadYes
POSTCreateNo
PUTReplaceYes
PATCHUpdateYes
DELETERemoveYes
方法用途幂等性
GET读取
POST创建
PUT替换
PATCH更新
DELETE删除

Status Codes

状态码

CodeMeaning
200Success
201Created
204No Content
400Bad Request
401Unauthorized
403Forbidden
404Not Found
409Conflict
422Unprocessable Entity
500Internal Server Error
状态码含义
200请求成功
201创建成功
204无内容
400错误请求
401未授权
403禁止访问
404资源不存在
409冲突
422无法处理的实体
500服务器内部错误

Error Response Format

错误响应格式

json
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed",
    "details": [
      {
        "field": "email",
        "message": "Invalid email format"
      }
    ]
  }
}
json
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed",
    "details": [
      {
        "field": "email",
        "message": "Invalid email format"
      }
    ]
  }
}

Versioning

版本控制

URL Versioning (Recommended)

URL版本控制(推荐)

GET /api/v1/users
GET /api/v2/users
GET /api/v1/users
GET /api/v2/users

Header Versioning

请求头版本控制

GET /api/users
Accept: application/vnd.api+json;version=1
GET /api/users
Accept: application/vnd.api+json;version=1

Pagination

分页

json
{
  "data": [...],
  "pagination": {
    "page": 1,
    "per_page": 20,
    "total": 100,
    "total_pages": 5
  }
}
json
{
  "data": [...],
  "pagination": {
    "page": 1,
    "per_page": 20,
    "total": 100,
    "total_pages": 5
  }
}

OpenAPI Example

OpenAPI示例

yaml
openapi: 3.0.0
info:
  title: Users API
  version: 1.0.0
paths:
  /users:
    get:
      summary: List users
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/User'
yaml
openapi: 3.0.0
info:
  title: Users API
  version: 1.0.0
paths:
  /users:
    get:
      summary: List users
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/User'