谷歌协议缓冲区消息是否经过验证



下面是来自Google开发人员指南网页的.proto文件。假设协议缓冲区编译器在 .proto 文件上运行以生成数据访问类。这些类是否验证收到的消息?例如,它是否验证"类型"字段的值为"移动"、"家庭"或"工作",而不是其他值?假设一条消息包含 .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;
}
是的

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

从文档中:

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

最新更新