如果客户端不再使用该字段,通过重命名来弃用 Thrift 中的字段是否安全?我的理解是,只要我们不改变类型,这应该有效。例如
From
struct FooResponse {
1: optional i32 foo
}
To
struct FooResponse {
1: optional i32 fooDeprecated
}
是的,100% 安全。 Thrift 仅在内部处理字段 ID。结构体的名称以及方法参数名称仅用于在生成的代码中生成字段名称。他们甚至不越过电线。
此外,这是弃用字段的推荐方法。即使在某个字段完全退役的情况下,也应该将其注释掉,但将其保留在 IDL 中,以防止数字字段 ID 被意外重用。
名称用作名称的唯一地方是服务方法调用。方法没有数字标识符,在这种情况下使用名称。更改名称实际上声明了一个新方法。
TL;DR
从技术角度来看
- Thrift IDL 中的所有名称都可以根据需要进行更改,除了...
- 方法名称不得更改(除非您知道自己在做什么)
关于代码级别的兼容性,如果您避免过于频繁地更改字段名称,那么您的 API 的任何使用者都会高度重视它。
See also
关于该主题的好读物是迪瓦克·古普塔的《失踪的指南》 http://diwakergupta.github.io/thrift-missing-guide/thrift.pdf。还详细阐述了优缺点optional
and required
在您退役字段之前也应该考虑这一点 - 否则您可能最终会破坏 IDL 兼容性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)