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

Whats the best way to deprecate a field in Protocol Buffer v3, reserved vs deprecated=true?

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

要么使用标签使用弃用字段:

message MyMessage {
    string deprecated_my_field = 1 [deprecated=true];
}

或创建保留字段 ID:

message MyMessage {
    reserved 1; // Deprecated "my_field"
}

我倾向于reserved,以后就没人能用了。

这是个坏主意吗?

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

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

在某些情况下,更柔和的 "mark it as a build warning, but allow access" 可能是首选;在其他情况下,hard "that doesn't exist!" 方法更简洁。这是主观的。

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