弃用 Protocol Buffer v3 中字段的最佳方法是什么?保留 vs deprecated=true?

cor*_*ath 16 protocol-buffers

当使用 Protocol Buffers 版本 3 时,据我所知,有 2 种方法可以弃用字段:

使用标签使用 deprecate 字段:

message MyMessage {
    string deprecated_my_field = 1 [deprecated=true];
}
Run Code Online (Sandbox Code Playgroud)

或者创建一个保留字段ID:

message MyMessage {
    reserved 1; // Deprecated "my_field"
}
Run Code Online (Sandbox Code Playgroud)

我倾向于reserved从那时起就没有人能够使用该领域。

这是一个坏主意吗?

Mar*_*ell 17

两者都会起作用;第一个选项将定义保留在模型中,因此仍然可以访问和查询它 - 但它可能会在可用时生成构建警告(对于从架构更新的客户端)。这在某些情况下可能会有有用的应用。

第二个选项从模型中完全删除该字段,因此当客户端从架构更新时,任何现有用法都将在构建时中断。同样,这可能是好是坏,取决于你在这个领域的“完成程度”。

在某些情况下,更温和的“将其标记为构建警告,但允许访问”可能是首选;在另一些人看来,“那不存在!” 方法更干净。这是主观的。

两者都可以从根本上完成工作。