代码之家  ›  专栏  ›  技术社区  ›  Hani Gotc

来自两个不同存储库的protobuf是否应该对齐

  •  0
  • Hani Gotc  · 技术社区  · 3 年前

    问题描述

    work 已分配 id 4 ,而在Java端它是赋值的 身份证件 5

    问题

    如果协议没有对齐,我们会有什么问题?protobufs不对齐可以吗?


    message CPPContext {
      optional string date              = 1;
      optional string time              = 2;
      optional string hour              = 3;
      optional string work              = 4;
    }
    
    message JAVAContext {
      optional string date              = 1;
      optional string time              = 2;
      optional string hour              = 3;
      optional string currency          = 4;
      optional string work              = 5;
    }
    
    0 回复  |  直到 3 年前
        1
  •  1
  •   Serikov    3 年前

    Protobuf根据字段号而不是字段名序列化和反序列化消息。

    例如,如果 CPPContext 消息在另一侧反序列化为 JAVAContext 然后你的 work 字段将被视为 currency 另一边的场地。

    最好在通信双方使用相同的proto文件。或者至少(向后)兼容的proto文件。例如,可以先在proto文件的一侧添加带有新字段id的新可选字段(在另一侧它们将被忽略),但更改字段id或删除必需字段是不好的。