定义行为,不只定义结构
状态码、重试建议、幂等、字段语义和错误 payload 都应该在实现前写进契约。
查看错误模式状态码、重试建议、幂等、字段语义和错误 payload 都应该在实现前写进契约。
查看错误模式每个变化都要分类为安全、风险或破坏性,并在发布前写明消费者动作。
审查 schema diff用量查询、迁移窗口、Sunset header 和客户通知应该是契约的一部分。
打开废弃指南| 位置 | 写法 | 评审意义 |
|---|---|---|
| 新增字段 | 通常安全,但客户端拒绝未知字段时有风险 | 补契约说明和消费者测试 |
| 枚举扩展 | 对生成客户端经常是破坏性变更 | 需要兼容性评审和发布说明 |
| 错误结构变化 | 客户端解析稳定 code 时会破坏 | 版本化错误分类并保留旧字段 |
| Webhook 重试变化 | 可能产生重复副作用 | 需要幂等 key 和重放测试 |
# API 契约评审块 Endpoint: - Method / path: - 消费方: 兼容性评审: - 增量变化: - 风险变化: - 破坏性变化: 运行时行为: - 重试策略: - 幂等 key: - 错误分类: 发布门禁: - 消费者测试: - 迁移说明: - 回滚方案:
只要 API 变化可能改变消费者假设,就应该使用这个 Hub。结构变化只是风险的一部分,消费者还会依赖时序、重试行为、枚举含义、分页顺序、错误码、认证规则和没有写在文档里的副作用。契约评审要在 schema 发布前把这些假设摊开。
从 diff 开始,但不要止步于 diff。每个字段、状态码、事件和重试规则都要分类为安全、风险或破坏性变化。然后写清消费者需要采取什么动作。如果动作是“无需处理”,就说明为什么旧客户端仍然正确。说不清楚,就还不能发布。
强的 API 规格会把发布说明和运行时监控接起来。废弃说明没有用量查询是不完整的;Webhook 变化没有重放和幂等测试是不完整的;版本策略没有迁移窗口也是不完整的。消费者路径和提供方路径一样清楚,契约才算完成。
| 检查项 | 通过标准 |
|---|---|
| 兼容性 | 每个变化都分类为安全、风险或破坏性。 |
| 消费者动作 | 内部和外部消费者知道是否需要改代码。 |
| 运行语义 | 重试、幂等、分页和错误结构都写明。 |
| 发布沟通 | 迁移说明和废弃窗口在发布前准备好。 |
| 可观测性 | 发布后能通过日志和指标识别不匹配客户端。 |
交接产物应包含契约 diff、消费者列表、迁移说明、测试证据和回滚决策。它应该放在 API spec 附近,而不是只躺在发布工单里。
一个很小的枚举变化就足够测试契约评审质量。提供方可能认为新增 status=archived 是安全的,因为旧客户端可以忽略。但生成客户端、switch 语句、分析任务和 Webhook 消费者未必能忽略。规格要写明已知消费者、未知枚举值处理方式,以及旧 SDK 是否需要在放量前发补丁。
发布责任人要附上按客户端版本统计当前流量的查询、schema diff 和回滚选择。如果回滚意味着用 feature flag 隐藏新枚举,就写清楚。如果回滚意味着回退契约并重放事件,也要写清楚。关键是不能等消费者开始失败后再猜。
新增 enum 在 OpenAPI 里看起来很小,但生成客户端经常把 enum 当成封闭集合。它应该被当成调用方行为评审,而不只是 schema 编辑。
| 评审项 | 问题 | 证据 |
|---|---|---|
| 调用方清单 | 哪些客户端解析 refund_status? | Web、移动端、合作方 webhook、分析任务 |
| 生成客户端风险 | 是否有 SDK 把 enum 视为封闭? | 用包含 pending_review 的 fixture 编译旧 SDK |
| fallback 行为 | 未知值应该展示什么? | 未知状态映射到 review_required UI 状态 |
| 迁移说明 | 发布前谁必须行动? | 移动端团队在公开放量前更新 switch |
把这个 Hub 用到真实团队之前,先做一个短审核。第一,读者离开页面时是否能复制一个产物到自己的流程里。第二,关联文章是否分别回答不同问题,而不是重复同一个定义。第三,页面是否点出了生产环境里真的会造成损失的失败模式,而不只是停留在计划阶段。
有用的 Hub 更像工作台。读者应该能打开页面,选择路径,复制片段,并知道评审前要附什么证据。如果页面只是解释主题,它只是另一篇文章;如果它能帮助读者决定下一步怎么做,它才是资源。
最后再问三个问题:这页是否让读者知道第一步该做什么;是否给了可以直接复制的文本;是否说明了什么情况下应该暂停而不是继续推进。只要其中一个答案是否定的,就不要把它当作完成。主题页的价值不是把文章重新包装一遍,而是把分散内容整理成一条能执行的路线。
这也是给审核员看的质量信号:页面有明确主题,有原创组织方式,有表格、流程、示例和行动项,并且能把读者带到下一步资源。它不是为了凑字数存在,而是帮助用户更快判断自己需要哪类规格、哪类证据和哪类评审。
把 schema 和行为预期接进 CI,减少发布后的契约漂移。
阅读文章在上线前区分安全、风险和破坏性变更。
阅读文章当客户端可能来自旧文档或 AI 输出时,管理 API 变更和迁移路径。
阅读文章设计稳定 error code、retry category 和机器可读失败细节。
阅读文章让智能体客户端不会乱造 ID、跳过 dry-run 或破坏性重试。
阅读文章把生成层和人工设计层分开评审,避免 SDK 只“能用”但不好用。
阅读文章写清事件版本、消费者所有权、重放安全和编排边界。
阅读文章把推送偏好当作跨设备、权限、静音时段和同意状态的契约。
阅读文章OpenAPI 描述结构。规格还要写清行为:兼容性、重试语义、失败处理、放量预期和消费者通知。
只要影响字段、错误、幂等、认证、限流、版本,或任何消费者可能依赖的行为,就值得评审。
需要直接落地时,先打开模板,再回到这页补齐评审和证据。