Nix24 的 API 规范

设计清晰、一致且安全的接口,确保长期可维护性与可扩展性。

一、协议:HTTPS 是必需条件

  • 所有接口必须通过 HTTPS 提供服务。
  • 禁止明文 HTTP 通信。

未加密传输会导致数据泄露和安全风险,必须使用加密协议。


二、域名结构:统一与规范

  • 所有 API 应统一托管在主域名下,路径以 /api/ 开头。
https://foo.bar/api/
  • 禁止使用混乱路径或子域名嵌套,例如:
https://api.foo.bar/v1/data/backend/...

/api/ 是统一入口,应保持简洁明确。


三、版本控制:响应头声明

  • 不在路径中使用版本号(如 /v1/)。
  • 版本信息通过响应头返回:
X-API-Version: 2025.07.1  # <年>.<批次>.<修订号>

版本管理在后台完成,避免影响客户端路径结构。


四、路径命名:RESTful 规范

  • 路径仅包含资源名,使用复数形式,例如:
/users
/orders/123/items
  • 嵌套路由用于表示资源从属关系:
GET /zoos/123/animals  # 查询动物园的所有动物

五、HTTP 方法:语义明确

方法含义幂等性示例
GET获取资源GET /users
POST创建新资源POST /orders
PUT替换整个资源PUT /users/123
PATCH部分更新资源PATCH /users/123
DELETE删除资源DELETE /cats/456

根据操作选择正确方法,确保语义与行为一致。


六、查询参数:保持简洁

  • 遵循 KISS 原则(Keep It Simple, Stupid)。
GET /users?filter[name]=Alice&sort=-created_at&page[size]=20&page[number]=1

推荐结构:

  • filter:过滤字段,如 filter[status]=active
  • sort:排序字段,前加 - 表示降序
  • page[size]page[number]:分页控制

避免参数名重复前缀,如 user_namename


七、状态码规范:准确表达结果

状态码含义场景
200成功普通 GET 请求
201创建成功POST 新建资源
204无内容成功DELETE 操作
400请求参数错误缺失或格式不正确
401未授权Token 缺失或错误
403禁止访问Token 无权限
404未找到资源查询不存在的 ID
429请求过多触发限流策略
500服务器错误未捕获异常

按实际情况返回合适的状态码,避免所有响应都使用 200。


八、错误响应格式:结构化输出

{
    "error": {
        "code": "MISSING_HEADER",
        "message": "缺少必需的请求头",
        "details": {
            "header_field": "X-Auth-Token"
        }
    }
}

字段说明:

  • code:错误编号(机器可读)
  • message:错误提示(用户可读)
  • details:可选,提供问题定位信息

错误信息应明确到具体字段与问题,便于快速排查。


九、返回结构规范

操作返回结构示例
GET /collection列表 + 分页 meta{ data: [...], meta: {...} }
GET /collection/ID单个对象{ data: {...} }
POST创建对象 + 状态码HTTP 201 + Location 头
PUT / PATCH更新后的完整对象{ data: {...} }
DELETE无响应体HTTP 204

🔐 安全与认证

1. OAuth 2.0 授权

  • 推荐使用 OAuth 2.0 Bearer Token。
  • 请求需带 Authorization 头:
Authorization: Bearer <token>

2. 请求格式

  • 所有接口应采用 JSON 格式:
Content-Type: application/json
Accept: application/json

3. 安全建议

  • 校验所有外部输入,防止注入攻击。
  • 限速(Rate Limiting),返回 429 状态码。
  • 精确设置 CORS,避免使用 *

📘 附录

A. 错误码对照表

错误码含义建议处理
INVALID_INPUT参数校验失败检查字段格式与必填项
UNAUTHORIZEDToken 错误或缺失提示用户重新登录或授权
FORBIDDEN权限不足提示无访问权限
NOT_FOUND未找到资源提示资源不存在或已被删除
RATE_LIMIT_EXCEEDED请求频率过高告知用户稍后重试

B. 返回格式示例

{
    "data": {},
    "meta": {
        "page": 1,
        "page_size": 20,
        "total": 123
    },
    "error": null
}

🎯 总结

  • 路径使用复数名词,操作通过 HTTP 方法表达。
  • 错误提示应明确、可定位。
  • 状态码应准确匹配实际结果。
  • 规范是保障质量和效率的工具,而非限制。

本规范由 Nix24 主笔,AI 辅助整理与优化 ✍️