Protobuf消息新增extensions声明后是否具备向后兼容性?
Protobuf消息扩展的向后兼容性问题
原始消息定义
message A { required uint64 filed1 = 1; optional string field2 = 2; }
修改后的消息定义
message A { required uint64 filed1 = 1; optional string field2 = 2; extensions 100 to max; }
问题
我们计划新增作为该消息扩展的新消息,但仍希望旧客户端能够读取这个基础消息。请问添加该extensions声明后,该消息是否仍具备向后兼容性?
回答
添加extensions声明后,该消息完全具备向后兼容性。
原因很明确:Protobuf的旧客户端解析器在处理消息时,会自动忽略所有未定义的内容(包括extensions声明本身,以及后续基于该声明添加的扩展字段),只会解析它识别的filed1和field2字段。只要原有字段的编号、类型、必填属性没有改动,旧客户端就能正常读取基础消息的核心内容,不会出现解析错误或数据丢失的情况。
后续基于extensions添加的扩展字段,旧客户端会直接跳过不处理,完全不影响原有功能的正常运行。
内容的提问来源于stack exchange,提问作者Nikolai Nikolov
相关产品推荐
相关产品推荐

