从Proto消息中提取枚举是否属于破坏性变更?
Proto枚举重构是否属于破坏性变更?
你原本的Proto定义:
message Value { enum Strategy { STRATEGY_1 = 1; STRATEGY_2 = 2; } Strategy strategy = 1; }
计划重构为:
enum Strategy { STRATEGY_1 = 1; STRATEGY_2 = 2; } message Value { Strategy strategy = 1; }
从协议层面来看,这不属于破坏性变更,原因如下:
- Proto的二进制序列化核心依赖字段编号和枚举的数值,和枚举的定义位置(嵌套在消息内还是顶层独立定义)无关。两种定义下,枚举值
STRATEGY_1和STRATEGY_2的数值完全一致,序列化后的二进制数据没有任何差异。 - 新旧版本的客户端/服务端对二进制数据的解析逻辑完全兼容——它们识别的是枚举的数值,而非枚举的代码引用路径。
- 唯一的变化只存在于代码实现层面(比如原来代码里的
Value.Strategy要改成Strategy),但这属于业务代码的适配调整,不会影响协议本身的兼容性。
内容的提问来源于stack exchange,提问作者maxime1992
相关产品推荐
相关产品推荐

