更改原字段编号的安全性

one*_*ece 10 protocol-buffers

例如,如果我从以下位置更改:

message Request {
  int foo = 1;
}
Run Code Online (Sandbox Code Playgroud)

到

message Request {
  int bar = 1;
  int foo = 2;
}
Run Code Online (Sandbox Code Playgroud)

foo从 1 更改为 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.,但我想知道为什么。

Mat*_*teo 7

如果您有使用第一个版本生成的消息的序列化版本,则您将无法使用该消息的第二个版本进行反序列化。如果您使用 protobuf 生成模型以存储在数据库中或在 Apache Kafka 等代理中发布,则需要遵循约定。如果您使用 proto buffer 生成模型和服务以供在线使用,则不应破坏任何内容(如果您将重新生成所有模型)

另请参阅保留关键字,以免重复使用旧数字。进一步阅读也在这里

  • @onepiece,这取决于:您是否有任何有效负载存储在文件中?在数据库中?在消息队列中?如果其中任何一个(以及更多)的答案是“可能”,那么**不,这不行**。坦率地说,改变字段编号绝对没有任何好处,而且风险很大。对我来说,只需“不去管这个领域”就可以节省大量的文字和浪费的时间。没有人会介意。 (2认同)