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

hackjutsu

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

struct FooResponse {
  1: optional i32 foo
}

struct FooResponse {
  1: optional i32 fooDeprecated
}
詹斯

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

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

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

TL; DR

从技术角度来看

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

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

也可以看看

Diwaker Gupta的“缺少指南”对该主题的很好的阅读它还详细说明了优缺点,optional并且required在退役字段之前也应考虑其优缺点-否则最终可能会破坏IDL兼容性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Thrift IDL 中的列表语法

Java中的Thrift异步请求

Thrift编译器(0.9.3)生成Thrift包中未定义的函数thrift.PrependError

如何使结构对象可以在 Thrift IDL 中具有任何附加字段

C ++ / Thrift:TThreadedServer :: stop()线程安全吗?

Apache Thrift是否提供反射API?

微服务架构中的HTTP vs Thrift

在Windows 10中启动Spark Thrift Server

如何在.thrift文件中弃用可选字段?

Thrift IDL 语法错误 - 接受并返回映射

在TFS中重命名字段“ RefernceName”

在Apache Thrift中多路复用时IDL中的服务可组合性

Apache Thrift是否保证数据完整性?

Apache Thrift是否可以与Scala一起使用

对Apache Thrift生成的代码进行单元测试是否必要?

如何在Thrift中检测服务器断开连接?

如何在Thrift服务方法中返回多个值?

Apache Thrift中的“注释”是什么,它的用途是什么?

在Thrift教程中无法导入shared.SharedService

如何声明在Thrift / Scrooge中返回Option值的方法?

将Thrift客户端连接到同一主机上单独docker容器中的Thrift服务器

在elasticsearch重命名字段

如何在C ++源代码中正确设置Thrift结构中的字段?

使用 thrift 在 java 生成的文件中设置额外的布尔值字段

awk计数和重命名字段中的符号

Laravel Eloquent:仅在模型类中重命名字段

是否可以在Thrift结构中为联合,嵌套结构和容器定义默认值?

是否可以在Windows 7中重命名字体?

找不到类型或命名空间名称 TSocket apache thrift C# Visual Studio 2019