如果客户端不再使用该字段,可以通过重命名在Thrift中弃用该字段吗?我的理解是,只要我们不更改类型,它就应该起作用。例如
从
struct FooResponse {
1: optional i32 foo
}
至
struct FooResponse {
1: optional i32 fooDeprecated
}
是的,它是100%安全的。节俭仅在内部处理字段ID。结构名称以及方法参数名称仅用于在生成的代码中生成字段名称。他们甚至没有越过电线。
此外,这是建议使用的弃用字段的方法。即使在字段已完全淘汰的情况下,也应将其注释掉,但将其保留在IDL中,以防止数字字段ID被意外重用。
使用名称作为名称的唯一地方是通过服务方法调用。方法没有数字标识符,在这种情况下,将使用名称。更改名称实际上声明了一个新方法。
从技术角度来看
关于代码级别的兼容性,如果您避免过于频繁地更改字段名称,那么API的任何使用者都会高度重视它。
Diwaker Gupta的“缺少指南”是对该主题的很好的阅读。它还详细说明了优缺点,optional
并且required
在退役字段之前也应考虑其优缺点-否则最终可能会破坏IDL兼容性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句