Agent Skills
返回列表
💻

API 契约设计

开发编程 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @kunlungrowth/kg-api-and-interface-design

技能介绍

接口为何越改越脆弱

当你的 API 被多个团队调用后,一些奇怪的事情开始发生:有人依赖了 404 响应中的特定错误消息文本,有人习惯了某个端点返回字段的顺序,还有人用着你没写进文档的边角行为。这就是 Hyrum's Law 的现实——只要有足够多的用户,你所有的可观测行为都会被某人依赖。

结果就是:你以为是"安全"的重构,却让线上用户的应用突然崩溃。接口文档和实现逐渐脱节,新团队成员面对混乱的错误格式和随意的命名,只能在复制粘贴中摸索。

从契约开始,而非从实现开始

这个技能把"设计稳定接口"拆成可执行的步骤。核心是两条定律:贺拉斯定律提醒你,所有可观测行为都会被依赖,所以设计时就规划弃用策略;单一版本规则避免让消费者在多个版本间二选一,而是通过扩展而非分叉来演进。

具体执行时遵循五条原则:

  • 契约优先:先定义接口契约,实现跟随契约,而非反过来
  • 一致的错误语义:全局统一错误格式,比如 REST 用 HTTP 状态码 + {error:{code, message, details?}} 结构,绝不混用不同模式
  • 边界处校验:只在系统边缘(API 路由、表单提交、第三方响应)校验输入,内部代码间信任类型契约
  • 偏好新增而非修改:用可选字段扩展接口,不破坏既有消费者
  • 可预测命名:REST 用复数名词、camelCase 字段、is/has/can 布尔前缀

对于 REST API,它规定了资源设计的标准方法(GET 列表/详情、POST 创建、PATCH 局部更新、DELETE 删除),列表端点必须分页,过滤用查询参数。对于 TypeScript 场景,它推荐可辨识联合、输入/输出分离、branded types 防止 ID 混用。

什么时候不该用它

这个技能面向需要长期维护的公开接口、团队间契约和组件 props。如果你只是写一个内部一次性的临时变量,它可能显得太重——不过即便如此,至少也该有个类型契约。

它不会替你写实现代码,而是输出结构化的 ApiDesign 工件,可以交给下游的 spec-driven-development、incremental-implementation、deprecation-and-migration 等技能继续处理。

使用场景

  • 设计新任务管理 REST API,需定义端点、分页和统一错误格式
  • 团队间定义模块边界,明确哪些输入在边界处校验
  • 为组件设计 props 接口,用可选字段做向后兼容扩展
  • 变更既有公开接口,规划弃用路径和兼容策略

适合人员

  • 后端工程师,要设计稳定、难误用的 REST API
  • 前端工程师,需要定义组件 props 和模块边界的类型契约
  • 技术负责人,要统一团队间的接口设计与错误语义
  • 全栈开发者,正在变更既有公开接口并控制兼容风险