一个 API 的 OpenAPI 文件可以看起来很整洁,却仍然让每个消费者猜测部分失败后会发生什么。
为什么需要这个 Skill
API 设计质量评审用于在实现或版本演进前检查 API 契约,把输入、输出、错误、权限、生命周期和消费者影响写到足够可验证。
Skill 用来做什么
在实现或版本演进前,依据提供的 API 设计开展评审。按 operation 建立覆盖矩阵,检查资源命名、请求/响应字段与边界、错误和 HTTP 状态、认证/授权、幂等与重试、分页、限流、版本演进、消费者迁移、隐私和可观测性。
每项缺口都要绑定 API-## 发现,注明 operation、来源和证据、状态、消费者影响与兼容风险、负责人和决策问题,以及验证方法。一个请求/响应样例或 OpenAPI 文件只能证明材料存在,不足以证明契约完整或兼容。
Awesome QA Skills 按语言和测试阶段组织 Skill;系列总览 介绍通用安装方式。
它不做什么
这个 Skill 不调用 API、不执行安全或性能测试,也不批准版本策略。它不会凭惯例补造缺失的字段、错误、权限、重试、限流或幂等行为。缺少运行身份、时间、环境、输入、响应和原始结果时,运行状态仍为未执行或未评估。
它主要检查哪些内容
| operation 级维度 | 复核问题 | 需要保留的证据 |
|---|---|---|
| 资源与请求/响应 | 命名、必填字段、类型、可空性和边界是否明确? | 有版本的 Schema 和有来源的样例 |
| 错误与状态 | 每个 operation 的业务码、HTTP 状态和重试含义是否定义? | 错误目录、操作例外、消费者行为 |
| 身份与副作用 | 谁可以调用?如何避免重复或未授权写入? | 授权规则、幂等/重试契约、状态副作用 |
| 集合行为 | 是否说明分页、排序、过滤和限流? | 契约来源和消费者约束 |
| 演进与迁移 | 支持哪些新旧客户端/服务端组合?如何通知消费者? | 版本策略、迁移顺序、兼容证据 |
| 隐私与可观测性 | 响应/日志允许出现什么?如何追踪一次操作? | 脱敏和关联规则 |
一个样例不能证明一个 operation 已经完整覆盖。记录已声明的例外和消费者特定约束,不要假设一份响应适用于所有人。
开始之前先审计输入
围绕“契约发现”开始分析时,先把输入分成六种状态。缺口不会自动变成失败,但也不能被隐藏在结论里。
| 状态 | 含义 | 本 Skill 的处理方式 |
|---|---|---|
| known | 材料直接证明的事实 | 标出来源、版本和时间,允许进入判断 |
| missing | 本轮需要但尚未提供的材料 | 列出最小补证动作,结论保持受限 |
| conflicting | 来源之间互相矛盾 | 并列来源和冲突点,交给负责人裁决 |
| stale | 材料存在但版本或时间已经过期 | 标出新鲜度,不把旧结论当当前事实 |
| out_of_scope | 有关但不在本轮范围内 | 明确排除,避免分析悄悄扩大 |
| assumptions | 为继续分析而暂时采用的假设 | 写出验证方式和失效条件 |
至少把输入版本、范围、环境、证据位置和负责人放在一起。没有运行记录时,只能交付分析、设计或验证计划,不能写执行通过。
从问题到结构化发现
API-## 发现字段
每条发现都要注明稳定的 operation、来源/证据、状态(assessed、missing、conflicting、stale 或 unassessed)、消费者/数据/安全影响与兼容风险及 P0–P3 依据、负责人及决策/迁移问题,以及含前置条件、动作、预期结果和原始证据要求的验证方法。事实、推断、建议和 Human 决策要分开。
一个完整案例
本节按输入、分析、发现、决策和验证展开;材料不足时保留 missing、conflicting 或 assumptions,不把它们改写成通过。
输入
| 材料 | 这次提供什么 | 缺失时怎么处理 |
|---|---|---|
| 契约材料 | OpenAPI、请求与响应示例、状态码和版本策略 | 未定义字段列为缺口,不要猜 |
| 消费者上下文 | 移动端、Web、计费、重试行为和发布顺序 | 写出尚未咨询的消费者 |
| 风险边界 | 授权、幂等、状态变化和向后兼容 | 发布批准仍由负责人决定 |
可以这样调用:
请使用 api-design-quality-review Skill。
任务:在移动端、Web 端和计费服务接入前,评审订阅取消 API
输入材料:[需求、版本、链接、日志、报告或数据路径]
范围:[本次包含和排除的对象]
未知项:[缺失的环境、账号、数据或权限]
期望输出:[按风险排序的发现、证据状态和下一步动作]
先审计输入。分开写事实、假设和待确认问题。没有运行记录时不要声称已经执行。
分析
先从一个边界清楚的小回合开始:在移动端、Web 端和计费服务接入前,评审订阅取消 API。对取消订阅,需要定义订阅已经取消、计费服务不可用和请求重复时的行为。契约应该告诉消费者是重试、轮询、展示最终状态,还是请求人工介入。
交接产物要同时保留输入版本、时间窗口、证据索引、负责人和下一次验证动作。Skill 可以整理不确定性,不能制造缺失的产物。
发现
以下是评审候选格式,不是执行结果:
| 字段 | 示例 |
|---|---|
| ID / operation | API-01 —— POST /subscriptions/{id}/cancel |
| 来源 / 状态 | 提供的取消设计及其版本;尚未定义重复请求和计费服务故障行为时标为 missing |
| 影响 / 兼容风险 | 移动端、Web 和计费服务可能对重试或最终状态作出冲突判断;按项目影响证据排序 |
| 负责人 / 决策 | API 负责人确认重复取消规则;消费者负责人确认迁移要求 |
| 验证 | 规则定义后复核请求/响应与消费者样例;运行结论需有调用身份、环境、输入、输出、日志和原始结果 |
决策
API 负责人决定契约与版本策略。移动端、Web 和计费负责人提供兼容和迁移约束;Skill 负责呈现取舍,不替团队批准方案。
验证
实现前确认每个受影响 operation 都有适用来源、明确边界、消费者预期和可关闭的决策。这属于设计证据,不要称为兼容性或运行时测试。
发现如何进入下一阶段
交接产物
| 输出字段 | 它要回答什么 | 示例状态 |
|---|---|---|
| 契约发现 | 缺失、冲突、过期或不可验证的 API 规则 | API-##、影响和来源 |
| 消费者影响 | 客户端哪些行为会变得模糊或不安全 | 受影响消费者和版本 |
| 就绪动作 | 需要明确的字段、错误、策略或迁移决定 | 负责人和关闭证据 |
没有运行记录、查询结果或原始产物时,不要写“已通过”。好的评审会走一遍消费者主流程、一条失败路径和一次版本变化。它不会用接口数量来批准设计。
下一步路由
将缺失的 operation 规则交给 API 负责人,将迁移问题交给各消费者负责人。交接时保留 operation、版本、证据状态、决策问题和兼容风险。
怎样准备更好的输入
提供 API 目标、operation、OpenAPI/契约版本、请求/响应样例、所有已知消费者、授权模型、错误与重试规则、分页/限流、发布顺序和迁移说明。标明哪些消费者或版本尚未复核,不要让一个样例代替其余情况。
和其他 Skill 怎么配合
- API 契约测试:检查实现后的契约与消费者。
- API 错误契约测试:检查错误行为。
- API 版本兼容性测试:验证跨版本演进。
容易踩的坑
- 只看接口结构,不走消费者流程。
- 把 200 响应当成完整成功契约。
- 把版本和重试行为留给实现者自行猜测。
安装与调用
全局安装这个 Skill:
npx skills add https://github.com/naodeng/awesome-qa-skills/tree/main/skills/zh/testing-types/api-design-quality-review -g
安装后使用 api-design-quality-review Skill,并附上真实项目材料。
常见问题
代码还没写可以评审吗?
可以,这正是它的用途:在契约选择变成兼容性负担之前发现不可验证或冲突的地方。
这个 Skill 会替团队决定 API 版本吗?
不会。它展示取舍与证据缺口,版本决定仍由负责人做。
参考
源 Skill 与执行契约
完整执行契约位于 API 设计质量评审 提示词。调用 Skill 前先阅读它;提示词定义了详细流程和输出契约。源目录 中还包含入口文件以及实际存在的配套资料。
入口文件重点约束操作契约、错误模型、授权、幂等、兼容性和消费者影响。写结论前先阅读配套提示词,并保留这个 Skill 的决策边界。
参考链接
-
Awesome QA Skills:API 设计质量评审 源文件:https://github.com/naodeng/awesome-qa-skills/tree/main/skills/zh/testing-types/api-design-quality-review
-
Awesome QA Skills GitHub:https://github.com/naodeng/awesome-qa-skills
-
API 设计质量评审 详情页:https://inaodeng.com/zh-cn/qaskills/api-design-quality-review/