标准答案
- 新增可选字段通常对能忽略未知字段的客户端兼容,但不能假定所有 SDK、表格导出或强校验客户端都具备这种容忍能力。
- 删除字段、重命名字段、改变类型、改变单位或改变空值含义通常会直接破坏调用方,应通过兼容字段、版本或迁移期处理。
- 响应枚举新增值可能让客户端的 switch 穷举、数据库约束、展示逻辑和权限逻辑出错;消费者应有 unknown 或默认分支。
- 默认值变化会在调用方未显式传参时改变业务行为,因此要把默认值、时区、排序和权限含义写入明确契约。
- 用契约测试、消费者测试、调用量观测、灰度和 SDK 版本约束验证变更,不要只在服务端单测中证明新逻辑可运行。
题目解析
兼容性不仅是 JSON 能否解析,还包括业务语义是否仍正确。例如金额从元改分、状态从空表示未知改为默认值,都会产生严重后果。
发布前应识别真实消费者和老版本比例;没有消费侧观测时,很难安全判断一个字段是否可以删除。
常见误区
- 认为新增字段永远不会破坏客户端。
- 只测试新版本服务端,不测试旧 SDK 和已有消费者。
- 把默认值、排序和空值语义当成无关紧要的实现细节。