v2 接口把 amount 从分改成了元,老版本 App 还在调 v1,发布后一批用户支付金额放大了 100 倍。回滚 v2 又让新客户端解析失败。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,两个版本共用同一套 DTO 和同一段业务代码,改字段单位时直接改了共享模型,v1 的输出跟着变。版本号只体现在路由上,内部没有做字段映射和转换,等于只换了个地址。
「接口版本共存」这类改动最怕改一半,回滚脚本先准备好,再动生产。报错里带路径的,先去看那个路径在不在、权限对不对。
curl -s https://api.example.com/v1/orders/42 | jq '.amount' curl -s https://api.example.com/v2/orders/42 | jq '.amount'
同一份配置存在多处的,先确认改的是被加载的那一份。
具体做法是,给每个大版本保留独立的响应模型 别共用同一个类;在路由层做版本到模型的映射 业务层只接收统一单位;老版本只修安全问题 新字段一律只加不改;发版前用旧版本客户端跑一遍核心链路。
最后用这个标准收尾,两个版本各跑一遍核心用例 v1 返回的金额单位仍是分 v2 是元 换算后数值一致。
