如果客户端不再使用该字段,可以通过重命名在Thrift中弃用该字段吗?我的理解是,只要我们不更改类型,它就应该起作用。例如
来自
struct FooResponse {
1: optional i32 foo
}
收件人
struct FooResponse {
1: optional i32 fooDeprecated
}
答案 0 :(得分:2)
是的,它是100%安全的。节俭仅在内部处理字段ID。结构名称以及方法参数名称仅用于在生成的代码中生成字段名称。他们甚至都不会越过电线。
此外,这是建议不要使用的字段。即使在字段已完全淘汰的情况下,也应将其注释掉,但将其保留在IDL中,以防止数字字段ID被意外重用。
将名称用作名称的唯一位置是通过服务方法调用。方法没有数字标识符,在这种情况下,将使用名称。更改名称实际上会声明一个新方法。
从技术角度来看
关于代码级别的兼容性,如果您避免过于频繁地更改字段名称,那么API的任何使用者都会高度重视它。
Diwaker Gupta's "Missing Guide"是该主题的不错阅读。它还详细说明了optional
和required
的优缺点,在淘汰字段之前也应考虑它们的优缺点-否则最终可能会破坏IDL兼容性。