让我们说我有一个定义如下的proto3消息,用作gRPC请求(即使用protobuf的二进制编码):
message MyRequest {
string name = 1;
}
我是否可以更改我的服务器(即邮件的阅读器)以使用以下定义而不破坏现有客户端(即作者)的电线兼容性?
message MyRequest {
repeated string names = 1;
}
在proto2 language guide中,我看到以下内容:
optional
与repeated
兼容。给定重复字段的序列化数据作为输入,期望该字段为optional
的客户端将采用最后一个输入值(如果它是原始类型字段)或合并所有输入元素(如果它是消息类型)字段。
但是,proto3文档不包含等效语句。我认为这可能与在proto3中对重复字段使用packed
编码有关。
答案 0 :(得分:1)
是的,这是可能的,因为可选string
和具有单个元素的repeated string
的二进制编码是相同的。但是,这种变化可能会使代码的读者感到困惑,因为以这种方式重新解释消息并不是很明显。