--- name: designing-contracts description: "Guides API contract design, event schema definition, and version compatibility management for RMDC system. Triggered when defining new APIs, modifying request/response structures, designing MQTT message schemas, or planning breaking changes. Keywords: API versioning, backward compatibility, schema evolution, OpenAPI, event contract, MQTT payload, breaking change." allowed-tools: - Read - Glob - Grep - Bash argument-hint: "$ARGUMENTS: [module] — contract-type: api|event|schema|breaking-change" --- # designing-contracts ## 概述 本 Skill 指导 RMDC 系统的契约设计,包括 API 接口、事件消息、数据 Schema 的定义与版本管理。 ## 动态上下文注入 ### 查找现有 API 定义 !`grep -rn "router\.\(GET\|POST\|PUT\|DELETE\)" --include="*.go" | head -30` ### 查找 MQTT topic 定义 !`grep -rn "topic\|Topic\|MQTT" --include="*.go" | head -20` --- ## Plan(规划阶段) ### 契约变更类型判定 | 类型 | 影响范围 | 兼容性要求 | |:---|:---|:---| | 新增字段(可选) | 低 | 向后兼容 | | 新增必填字段 | 高 | Breaking Change | | 修改字段类型 | 高 | Breaking Change | | 删除字段 | 高 | Breaking Change | | 修改字段语义 | 高 | Breaking Change | ### 决策点 - [ ] 是否为 Breaking Change? - [ ] 是否需要版本化(v1 -> v2)? - [ ] 影响哪些下游模块/客户端? - [ ] 是否需要过渡期(同时支持新旧版本)? --- ## Verify(验证清单) ### API 契约检查 - [ ] 新增字段有默认值 - [ ] 必填字段未被删除 - [ ] 字段类型未变更 - [ ] 错误码向后兼容 - [ ] 响应结构保持一致 ### 事件契约检查 - [ ] Topic 命名遵循规范 - [ ] Payload 字段向后兼容 - [ ] 消息版本字段存在 - [ ] 消费者兼容新字段 ### 验证命令 ```bash # 对比 API 变更 git diff HEAD~1 --name-only | grep -E "handler|router" # 检查 breaking change ./scripts/verify-api-compatibility.sh ``` --- ## Execute(执行步骤) ### 新增 API 1. 定义请求/响应结构体 2. 添加字段校验规则 3. 注册路由 4. 更新 API 文档 5. 通知下游模块 ### Breaking Change 处理 1. 创建新版本路由(/v2/...) 2. 保留旧版本兼容期 3. 添加废弃警告 4. 通知所有消费者 5. 设定旧版本下线时间 --- ## Pitfalls(常见坑) 1. **删除字段未通知下游**:前端/其他模块仍在使用该字段,导致解析失败。 2. **修改字段类型**:如 `string` 改 `int`,JSON 解析会失败。 3. **错误码语义变更**:下游按错误码做分支处理,语义变更会导致逻辑错误。 4. **MQTT payload 无版本字段**:无法做向后兼容处理。 5. **必填字段无默认值**:旧客户端无法正常调用。 --- ## 相关文件 | 用途 | 路径 | |:---|:---| | 版本策略 | [reference/api-versioning-policy.md](reference/api-versioning-policy.md) | | 事件规则 | [reference/event-schema-rules.md](reference/event-schema-rules.md) | | Breaking Change 清单 | [reference/breaking-change-checklist.md](reference/breaking-change-checklist.md) |