skill.md
2.56 KB
API Diff Skill
对比两个版本的 OpenAPI 文档或生成的 API 文件,检测接口变更。
使用场景
-
更新 API 后自动检查:运行
api:generate后自动对比新旧接口 - 手动对比:对比两个不同的 OpenAPI 文档
- CI/CD 集成:在部署前检查破坏性 API 变更
如何调用
在生成 API 后自动对比
pnpm run api:generate
生成器会自动调用对比逻辑,检查是否有接口变更。
手动对比两个文档
# 对比两个 OpenAPI markdown 文档
node scripts/apiDiff.js docs/api-specs/user/api1.md docs/api-specs/user/api1-new.md
# 对比整个模块目录
node scripts/apiDiff.js docs/api-specs/user/ docs/api-specs/user-new/
# 对比生成的 API 文件
node scripts/apiDiff.js src/api/user.js src/api/user-new.js
对比维度
- 接口增删:新增或删除的接口
-
参数变更:
- 新增必填参数(破坏性变更)
- 删除参数(破坏性变更)
- 参数类型变更(破坏性变更)
- 新增可选参数(非破坏性)
-
返回值变更:
- 返回结构变更
- 字段类型变更
- HTTP 方法变更:GET ↔ POST(破坏性变更)
输出格式
对比结果会以以下格式输出:
=== API 变更检测报告 ===
📦 模块: user
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 新增接口 (1):
+ getUserProfile
⚠️ 修改接口 (2):
↪ editUserInfo
✗ [破坏性] 删除必填参数: sms_code
✓ [非破坏性] 新增可选参数: avatar
↪ getUserInfo
✓ [非破坏性] 新增可选参数: include_profile
❌ 删除接口 (1):
- deleteUserAccount
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
总计: 1 新增, 2 修改, 1 删除
⚠️ 检测到 1 个破坏性变更,请仔细检查业务逻辑!
退出码
-
0: 无变更或仅有非破坏性变更 -
1: 检测到破坏性变更(可用于 CI/CD 失败)
配置选项
可以通过环境变量配置:
# 严格模式:任何变更都返回失败码
API_DIFF_STRICT=true node scripts/apiDiff.js ...
# 输出 JSON 格式(用于程序解析)
API_DIFF_FORMAT=json node scripts/apiDiff.js ...
注意事项
- 对比逻辑基于 OpenAPI 规范,确保文档格式正确
- 破坏性变更需要在业务代码中做兼容处理
- 新增接口通常不需要修改现有代码
- 删除接口前请确认没有地方在使用