当前位置: 首页 > 知识库问答 >
问题:

Empty对向后兼容性有危险吗?

国阳
2023-03-14
service Foo {
    rpc List(google.protobuf.Empty) returns (ListResponse) {}
}

message ListResponse {
    repeated Foo results = 1;
}

message Foo {...}
message ListRequest {
    int limit = 1;
    int offset = 2;
}

然后更新rpc签名:

rpc List(ListRequest) returns (ListResponse) {}

这是一个向后不兼容的更改,还是protobuf格式可以优雅地处理这个问题?

共有1个答案

马正初
2023-03-14

wire格式很好地处理了这一点。但是,大多数使用gRPC存根的代码会中断,因为类型安全语言会注意到不兼容的类型。

如果您认为您可能需要字段,请继续为该情况制作一个特殊的消息,即使它是空的。如果有疑问,就去做。如果您确信永远不需要任何字段(“delete”的响应消息是一个常见的示例),那么使用empty就可以了。

我在随时间修改gRPC服务的谈话中提到了这个特定的情况。提供幻灯片和视频记录。

 类似资料:
  • ngrok承诺有关其接口的兼容性和稳定性,以便您可以自信地构建集成顶部,知道在升级到较新版本时期望的更改。 兼容性承诺 Point Release (2.0.0 -> 2.0.1) - ngrok承诺在点发布之间没有突破性的变化 Minor Version Change (2.0 -> 2.1) - ngrok可能会进行小的更改,打破兼容性的次要版本更改。 ngrok承诺,任何破坏性更改将由一个版

  • 确保您可以轻松顺利地升级您的应用程序,这对我们是很重要的。这就是为什么我们只在主 要版本里程碑才会打破兼容性。你可能熟悉 语义版本控制 ,这 就是我们在所有的 CakePHP 项目中使用的通用准则。总之,语义版本控制意味着只有主要版 本(比如2.0,3.0,4.0)可以打破向后兼容性。次要版本(比如2.1,3.1,3.2)可能会引入新 的功能,但不能破坏兼容性。错误修复版本(比如2.1.2,3.0

  • 查看v3规范,新消息似乎是有效的,难道旧的提供程序库(v3.2.13)不支持它吗?我查看了代码,发现了这个commit,在我看来,这似乎是引入更改的地方。 从我的测试来看,新的提供程序库(3.5.12)可以处理新旧格式,但如果类路径中同时存在新的提供程序库和旧的使用者库,http契约测试将失败,并出现运行时错误。 问题:

  • 我正在迁移到Spring Boot2.0,我的Prometheus度量有问题。 我知道千分尺是一种新的操作方法,它不像普罗米修斯的立体式那么简单,但还可以。 我的问题是,如果我现在不想更改我的度量,我就不能升级到Spring Boot2.0。我说的对吗? 我尝试了以下操作: 第1号审判 保持我的实现“原样” 将新的依赖项添加到我的应用程序(执行器已在其中) 更改中的内容以访问endpoint =>

  • 我刚刚将我们的Nexus存储库从OSS 2.14.5-02升级到OSS 3.6.2-01。我将遗留url设置为true(如http://books.sonatype.com/nexus-book/3.1/reference/install.html#config-legacy-url中所述),但是REST API似乎不向后兼容。 例如,以下REST API在我的旧Nexus服务器上工作(它下载ja

  • 问题内容: 我在一个应用程序中工作,我们需要将对象保存为XML格式,并在以后需要时加载它们。为此,我使用JAXB将XML编组和解编回Java类。 我的问题是我必须在某个时候更改Java模型(通过添加,重命名或删除属性),结果,我将拥有不兼容的保存XML,无法将其绑定回新的类形式。 为了解决这个问题,每次必须进行更改时,我都会在一个新程序包(以其版本命名)下复制所有类的副本,并应用所请求的更改。并且

  • 我已经开始使用Swagger。此时,我收到了一个swagger版本1.2的swagger文件。但是,如果我想用这个文件生成一些东西,它只会给我一堆看起来更像它的错误,只是忽略了我的swagger文件在1.2版规范中的事实,只是继续并根据规范的2.0版验证它。 我得到的一些错误: 缺少所需属性:路径 不允许附加属性:模型、apis、resourcePath、swaggerVersion、apiVer

  • 我正在我的项目中尝试Java8,我被困在与我的构建过程相关的错误中。 我正在使用ANT脚本,在某个时刻,我正在使用一些javascript(嵌入到ANT中)来执行一些特定于构建的操作。导致错误的脚本部分如下所示: 该项目使用Java 7或Java 6构建得很好,但在使用Java 8时,它会给我带来一些错误。这些错误与JS引擎的升级有关。 特别是我得到了以下例外: javax。剧本ScriptExc