向后兼容变更是什么
接口演进遵守兼容规则:只增字段、不删不改语义;客户端按「兼容近若干版本」设计,升级与服务解耦。服务端新增可选字段,旧客户端忽略未知字段照样工作;废弃字段先标记并保留期,到期再删。不兼容的变化走版本化,而不是就地改。
基本信息
| 服务端 | 新增可选字段;废弃字段先标记保留期;版本化仅用于不兼容变更 |
|---|---|
| 客户端 | 忽略未知字段(健壮性原则);对废弃字段有降级路径 |
| 验证 | 契约测试保证双方预期一致(如 Pact) |
| 下线流程 | 公告期 → 流量观测(确认无调用)→ 移除 |
| 判据 | 旧版本客户端在新服务端上必须仍可用 |
典型使用场景
- 字段扩展:新增可选字段承载新信息
- 功能改造:新旧字段并存过渡再淘汰
- 移动端适配:老版本长期在网,服务端持续兼容
- 上下游协作:契约测试锁定期望,双方独立发布
- 接口下线:按流量观测确认无调用后移除
实践要点
- 添加而非修改:改语义等同破坏性变更,宁可新增字段
- 宽松解析:客户端忽略未知字段,别硬校验全部
- 契约测试:消费方驱动(如 Pact)提前暴露不兼容
- 观测先行:下线前看调用方清单与流量再动手
- 变更公告:给调用方迁移窗口与文档
演进示例
演进示例
// v1:{"amount": 100}
// v2 兼容演进:
{"amount": 100, "currency": "CNY"} // 新增可选字段,旧客户端忽略变化类型对照
| 变化类型 | 兼容性 | 处置 |
|---|---|---|
| 新增可选字段 | 兼容 | 直接发布 |
| 新增必填字段 | 不兼容 | 版本化或默认值过渡 |
| 改字段语义 | 不兼容 | 新增字段替代 |
| 删除字段 | 不兼容 | 公告与观测后延时移除 |
接口下线流程:公告期 → 流量观测(确认无调用)→ 移除;保留全流程记录。
兼容周期与客户端节奏挂钩:移动端与嵌入式设备在线时间长,保留期要更宽。