protobuf消息字段id和字段顺序是什么关系?
What is the relation of protobuf message field id and field order?
我想从protobuf和serialization/deserialization的角度了解下面的消息是否兼容。
message HelloReply {
string message = 1;
string personalized_message = 2;
}
message HelloReply {
string personalized_message = 2;
string message = 1;
}
在任何情况下顺序对兼容性有影响吗?
文本顺序在很大程度上是无关紧要的,尽管它可能会影响某些代码生成工具——但大多数语言并不关心声明顺序,所以即使这样:也无关紧要。这些字段在语义上仍然是等效的——数字匹配现有的含义(名称)和类型。它是识别字段的决定性特征。
在协议层面:
- 解析器必须允许任何顺序的字段
- 序列化程序应该(但不是必须)以升序数字字段顺序写入字段
我想从protobuf和serialization/deserialization的角度了解下面的消息是否兼容。
message HelloReply {
string message = 1;
string personalized_message = 2;
}
message HelloReply {
string personalized_message = 2;
string message = 1;
}
在任何情况下顺序对兼容性有影响吗?
文本顺序在很大程度上是无关紧要的,尽管它可能会影响某些代码生成工具——但大多数语言并不关心声明顺序,所以即使这样:也无关紧要。这些字段在语义上仍然是等效的——数字匹配现有的含义(名称)和类型。它是识别字段的决定性特征。
在协议层面:
- 解析器必须允许任何顺序的字段
- 序列化程序应该(但不是必须)以升序数字字段顺序写入字段