可以将proto3可选字段更改为重复而不会破坏电线兼容性吗?

时间:2017-08-23 21:57:46

标签: protocol-buffers proto3

让我们说我有一个定义如下的proto3消息,用作gRPC请求(即使用protobuf的二进制编码):

message MyRequest {
  string name = 1;
}

我是否可以更改我的服务器(即邮件的阅读器)以使用以下定义而不破坏现有客户端(即作者)的电线兼容性?

message MyRequest {
  repeated string names = 1;
}

proto2 language guide中,我看到以下内容:

  

optionalrepeated兼容。给定重复字段的序列化数据作为输入,期望该字段为optional的客户端将采用最后一个输入值(如果它是原始类型字段)或合并所有输入元素(如果它是消息类型)字段。

但是,proto3文档不包含等效语句。我认为这可能与在proto3中对重复字段使用packed编码有关。

1 个答案:

答案 0 :(得分:1)

是的,这是可能的,因为可选string和具有单个元素的repeated string的二进制编码是相同的。但是,这种变化可能会使代码的读者感到困惑,因为以这种方式重新解释消息并不是很明显。