在Thrift IDL中重命名字段是否安全?

时间:2018-10-18 20:50:54

标签: thrift thrift-protocol

如果客户端不再使用该字段,可以通过重命名在Thrift中弃用该字段吗?我的理解是,只要我们不更改类型,它就应该起作用。例如

来自

struct FooResponse {
  1: optional i32 foo
}

收件人

struct FooResponse {
  1: optional i32 fooDeprecated
}

1 个答案:

答案 0 :(得分:2)

是的,它是100%安全的。节俭仅在内部处理字段ID。结构名称以及方法参数名称仅用于在生成的代码中生成字段名称。他们甚至都不会越过电线。

此外,这是建议不要使用的字段。即使在字段已完全淘汰的情况下,也应将其注释掉,但将其保留在IDL中,以防止数字字段ID被意外重用。

将名称用作名称的唯一位置是通过服务方法调用。方法没有数字标识符,在这种情况下,将使用名称。更改名称实际上会声明一个新方法。

TL; DR

从技术角度来看

  • Thrift IDL中的所有名称可能会根据需要更改,除了...
  • 方法名称可能不会更改(除非您知道自己在做什么)

关于代码级别的兼容性,如果您避免过于频繁地更改字段名称,那么API的任何使用者都会高度重视它。

另请参见

Diwaker Gupta's "Missing Guide"是该主题的不错阅读。它还详细说明了optionalrequired的优缺点,在淘汰字段之前也应考虑它们的优缺点-否则最终可能会破坏IDL兼容性。