Google协议缓冲区消息是否已经过验证?

时间:2017-10-31 18:30:55

标签: protocol-buffers

以下是Google developer guide web page的.proto文件。假设协议缓冲区编译器在.proto文件上运行以生成数据访问类。这些类是否验证收到的消息?例如,它是否验证"类型" field的值是MOBILE,HOME还是WORK,没有别的?假设一条消息包含.proto文件中未指定的数据,这些类是否会提醒使用此应用程序?

message Person {
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phone = 4;
}

1 个答案:

答案 0 :(得分:0)

是的,您收到的数据会被反序列化为您拥有的对象,并忽略任何未知字段。当您的应用程序收到其使用的原型中不存在的字段时,我认为没有任何警告,但这应该很容易测试。

来自docs

  

您可以在不中断的情况下为邮件格式添加新字段   向后兼容性;旧的二进制文件只是忽略了新的字段   解析。因此,如果您有使用协议的通信协议   缓冲区作为其数据格式,您可以无需扩展协议   不得不担心破坏现有代码。