协议缓冲区:更改字段名称是否会中断消息?

时间:2017-08-01 07:36:53

标签: protocol-buffers

使用协议缓冲区,更改消息的字段名称是否仍然允许它向后兼容?我找不到任何关于那个的引用。

例如:原始消息

#id_name>div>div>div {
  width: 5%;
  background: blue;
}

#id_name>div>div>div[class] {
  width: 100%;
  background: red;
}

更改为:

<div id="id_name">
  <div>
    <div>
      <div class="col-sm-10 col-md-5 no-padding">
        /*CONTENT SQUASHED BY THE 5% WIDTH*/
      </div>
      <div>
        /*THE ORIGINAL DIV THAT WAS TARGETED BY THE CSS*/
      </div>
    </div>
  </div>

1 个答案:

答案 0 :(得分:16)

更改字段名称不会影响protobuf编码或使用仅由字段名称不同的原型定义的应用程序之间的兼容性。

二进制protobuf编码基于标签号,因此您需要保留。

您甚至可以在某种程度上更改字段类型(检查https://developers.google.com/protocol-buffers/docs/encoding#structure处的类型表),前提是其线型保持不变,但这需要额外考虑,例如,是否将uint32更改为从您的应用程序代码的角度来看,uint64是安全的,并且对于更好的&#39;只需定义一个新字段就更好了。

如果使用该功能,更改字段名称将影响json表示。