プロトフィールド番号の変更の安全性

Dec 10 2020

たとえば、次のように変更した場合:

message Request {
  int foo = 1;
}

message Request {
  int bar = 1;
  int foo = 2;
}

foo1から2に変更しても安全ですか?ドキュメントはそうしないと言っています:These numbers are used to identify your fields in the message binary format, and should not be changed once your message type is in use.、しかし、私は理由を知りたいです。

回答

1 Matteo Dec 10 2020 at 17:12

最初のバージョンで生成されたメッセージのシリアル化されたバージョンがある場合、メッセージの2番目のバージョンで逆シリアル化することはできません。protobufを使用してモデルを生成し、DBに格納したり、Apache Kafkaなどのブローカーで公開したりする場合は、規則に従う必要があります。オンラインで使用するためのモデルとサービスを生成するためにprotobufferを使用する場合は、何も壊さないでください(すべてのモデルを再生成する場合)

古い数値を再利用しないようにするには、reservedキーワードも参照してください。さらに読むここでも