环境与配置管理60 条

向后兼容变更

接口演进遵守兼容规则:只增字段、不删不改语义;客户端按「兼容近 N 个版本」设计,升级与服务解耦。

CI/CD 与发布速查开发更新于 2026-10-13

向后兼容变更是什么

接口演进遵守兼容规则:只增字段、不删不改语义;客户端按「兼容近若干版本」设计,升级与服务解耦。服务端新增可选字段,旧客户端忽略未知字段照样工作;废弃字段先标记并保留期,到期再删。不兼容的变化走版本化,而不是就地改。

基本信息

服务端新增可选字段;废弃字段先标记保留期;版本化仅用于不兼容变更
客户端忽略未知字段(健壮性原则);对废弃字段有降级路径
验证契约测试保证双方预期一致(如 Pact)
下线流程公告期 → 流量观测(确认无调用)→ 移除
判据旧版本客户端在新服务端上必须仍可用

典型使用场景

  • 字段扩展:新增可选字段承载新信息
  • 功能改造:新旧字段并存过渡再淘汰
  • 移动端适配:老版本长期在网,服务端持续兼容
  • 上下游协作:契约测试锁定期望,双方独立发布
  • 接口下线:按流量观测确认无调用后移除

实践要点

  • 添加而非修改:改语义等同破坏性变更,宁可新增字段
  • 宽松解析:客户端忽略未知字段,别硬校验全部
  • 契约测试:消费方驱动(如 Pact)提前暴露不兼容
  • 观测先行:下线前看调用方清单与流量再动手
  • 变更公告:给调用方迁移窗口与文档

演进示例

演进示例
// v1:{"amount": 100}
// v2 兼容演进:
{"amount": 100, "currency": "CNY"}   // 新增可选字段,旧客户端忽略

变化类型对照

变化类型兼容性处置
新增可选字段兼容直接发布
新增必填字段不兼容版本化或默认值过渡
改字段语义不兼容新增字段替代
删除字段不兼容公告与观测后延时移除
接口下线流程:公告期 → 流量观测(确认无调用)→ 移除;保留全流程记录。
兼容周期与客户端节奏挂钩:移动端与嵌入式设备在线时间长,保留期要更宽。

易错点

  • 在兼容字段上改语义(单位从元变分):字段没变但含义变了,等价于破坏性变更
  • 客户端硬解析全部字段:服务端加字段即崩,采用宽松解析
  • 契约测试只跑不拦:失败不阻断合并等于没有契约,纳入门禁
  • 下线不做流量观测:漏掉低频调用方,上线后才发现事故

数据来源与参考

  • Google API 设计指南(向后兼容)
  • Pact 文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌