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

2024-05-13

如果客户端不再使用该字段,通过重命名来弃用 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(使用前将#替换为@)

在 Thrift IDL 中重命名字段是否安全? 的相关文章

随机推荐

  • TestFlight iOS 应用程序 get-task-allow 问题

    我在 ios 的 testflight 中有一个名为 MapItTrackIt 的应用程序 一切都进展顺利 我刚刚更新到 xcode 5 1 我按照以往的方式构建了该应用程序 相同的配置文件和临时证书 这次 当我尝试上传 IPA 文件时 我
  • 从字符串中修剪/删除制表符 ( "\t" )

    任何人都可以建议一种从字符串中删除制表符 t 的方法吗 CString 或 std string 例如 1E10 变为 1E10 hackingwords 的回答 https stackoverflow com questions 5562
  • 如何使用 Scikit-Learn 和 Python 找到最佳簇数

    我正在学习聚类Pythons scikit learnlib 但我找不到找到最佳簇数的方法 我试图制作一个集群数量列表并将其传递进去for loop 并看到elbow但我想找到更好的解决方案 只有当我这样做时 这种方法才有效range 1
  • Microsoft 报表查看器对象

    我正在 Microsoft Visual studio 2013 Express 上为 Windows 桌面开发一个 C Windows 窗体应用程序 我还使用 SQL Server 2012 Express 以及包括报告服务在内的高级功能
  • 使用 XML 时引用未声明的实体异常

    我正在尝试设置 xmldoc 的 innerxml 但出现异常 Reference to undeclaredEntity XmlDocument xmldoc new XmlDocument string text Hello I am
  • 具有依赖项的自定义 MSBuild 任务

    我编写了一个使用第三方程序集的 MSBuild 任务 当我在项目中使用该任务时 MSBuild 抱怨它无法加载第三方程序集 毫不奇怪 我应该将第三方程序集放在哪里 以便 MSBuild 可以使用它们 我尝试向它们添加项目引用但没有成功 我不
  • Kubernetes 通过基于时间的触发器扩展 Pod

    我有一台在 Kubernetes 上运行的服务器来处理每小时的处理作业 考虑使用服务来公开 pod 并使用 外部 cron 作业来访问负载均衡器 以便 kubernetes 可以根据需要自动缩放以处理更高的负载 然而在实现中 如果 cron
  • 我测量运行时间的方法有缺陷吗?

    抱歉 这篇文章很长 但我只是在分析这个问题时解释一下我的思路 问题在最后 我了解测量代码运行时间的原理 它运行多次以获得平均运行时间 以考虑每次运行的差异 并获得更好地利用缓存的时间 为了测量某人的跑步时间 我想出了this https s
  • count 和 groupby 在一个查询中一起使用

    以下查询正在获取页面上的一些产品信息 这很好 但我也想以文本形式显示它出现的产品编号 但是 我使用了groupby但我也想用count on pro id SELECT FROM cart WHERE session id SESSION
  • 创建正则表达式来检查强密码

    假设我有一个检查字母数字的正则表达式 我现在想创建另一个正则表达式来检查密码中至少有 1 个数字 我想检查它是否至少有 1 个非字母数字字符 字母或数字以外的字符 我应该单独调用每个函数 如果一个函数失败返回 false 还是有办法将它们合
  • Python 中的 QuantLib cpibond 债券示例

    我正在尝试让官方 C cpibond 示例在 Python 中运行 原始示例在这里 https github com lballabio quantlib blob master QuantLib test suite inflationc
  • Win32 自定义绘制树视图控件

    我正在尝试使用 NM CUSTOMDRAW 消息自定义树视图控件 我只是想用灰色绘制所有其他可见的项目 这是绘制的代码 INT CResourceOutliner On WM NOTIFY HWND hDlg WPARAM wParam L
  • Navicat utf8 不适用于 mysql 数据库

    我目前正在尝试合并两个不同步的表达式引擎数据库之间的数据更改 为此我选择使用 navicat 该网站在模板中大量使用希腊字符集 当我在 phpmyadmin 中查看希腊语表字段数据时 我按预期看到了希腊语字符 当我将它们加载到 Navica
  • 将元素添加到数组java中

    布局是这样的 index num 0 10 1 20 2 30 Add 35 here 3 40 Move elements down 4 50 5 60 6 70 那么我的方法是这样的 public static void method
  • 如何查看上次提交和现在之间发生了什么变化(进行一些更改后)

    与此类似question https stackoverflow com questions 1552340 how to list the file names only that changed between two commits但
  • 对(静态)CSS 文件所做的更改未反映在 Django 开发服务器中

    我正在使用 Django 制作一个 Web 应用程序 但在将 CSS 文件 存储在我的应用程序的静态目录中 中所做的更改反映到开发服务器上时遇到了一些问题 需要明确的是 服务器能够访问静态文件 但是 它目前停留在我的 CSS 文件的旧版本上
  • chai-http/superagent : 设置多部分表单字段的 Content-Type

    在集成测试中上传文件如下 chai request server instance post profile photo 0 set Access Token accessToken set API Key testConfig apiKe
  • JavaScript 对输入的循环创建一个对象数组

    我正在尝试循环 div 中的输入元素 以创建对象数组 div div
  • 引用 dll 路径的区域内的此注释的目的是什么? (系统.操作)

    如果我浏览到 VS 中 System Action 的定义 region Assembly mscorlib dll v2 0 50727 C Windows Microsoft NET Framework v2 0 50727 mscor
  • 在 Thrift IDL 中重命名字段是否安全?

    如果客户端不再使用该字段 通过重命名来弃用 Thrift 中的字段是否安全 我的理解是 只要我们不改变类型 这应该有效 例如 From struct FooResponse 1 optional i32 foo To struct FooR