跳到主要内容

API 设计边界

接口是协作契约。
设计时先问边界,再堆字段——边界清楚,联调夜会短很多。

1. 设计前三问

  1. 这个接口负责什么? 核心资源/用例是什么
  2. 不负责什么? 哪些事应归别的模块
  3. 失败时调用方下一步是什么? 重试、改参数、还是申请权限

写不清三问,先不要开工实现。

2. 资源与操作

  • 路径表达资源,方法表达动作(REST 场景)
  • 避免一个接口既查询、又编排长流程、还偷偷改无关表
  • 管理端与用户端入口若权限模型不同,不要混用同一套「隐式假定」

3. 错误语义

类型期望
参数问题明确字段与原因,可修复后重试
权限问题与「资源不存在」策略一致且安全;不泄露敏感存在性(按产品约定)
业务拒绝稳定错误码/文案,可被调用方分支处理
系统故障可追踪(请求 ID);可说明是否可重试

避免「一律 500」或「成功里塞失败」。

4. 幂等与重试

  • 写操作默认考虑超时重试(客户端、网关、人工)
  • 支付、库存、加款等路径:幂等键覆盖所有入口(含管理端)
  • 超时 ≠ 失败;需要查询补偿时写清查询接口

5. 版本与兼容

  • 破坏性变更走新版本或显式兼容期
  • 废弃字段:文档标明废弃时间与替代方案
  • 枚举扩展:调用方应容忍未知枚举(向前兼容)

6. 契约优先(推荐)

  1. 先冻结/评审草案(路径、字段、错误)
  2. 再实现
  3. 示例请求/响应随文档更新
  4. 变更走评审,调用方可知

7. 评审检查表

  • 三问写清
  • 权限模型明确
  • 错误可分支
  • 幂等/重试策略明确
  • 分页/过滤/排序有上限
  • 敏感字段不落日志
  • 完成定义 中 API 项一致

标准化 API 服务说明另见 RESTful API 开发服务