非中断性变更允许现有客户端继续工作而不做任何变更。

非重大变化

在 gRPC 协议级别和 .NET 二进制级别,这些变更不会中断。

  • 添加新服务
  • 向服务中添加新方法
  • 默认值(若未设置)进行反序列化。
  • 未知字段集合中。

二进制中断性变更

如果你计划将 gRPC 库发布到 NuGet,二进制兼容性很重要。

  • 保留关键字指定邮件上已删除的字段编号和名称。
  • 任何字段都会出现消息名称在网络上发送的情况。
  • 这并不是 gRPC 协议中断性变更,但如果客户端升级到最新的协定,则需要对其进行更新。

协议中断性变更

以下各项是协议和二进制的中断性变更:

  • 但是,如果服务器正在使用 JSON 内容,则重命名字段是一个中断性变更。
  • 即使新的数据类型是兼容的,但如果客户端升级到最新的协定,它也可能需要更新以支持新的类型。
  • 更改字段编号 - 对于 Protobuf 有效负载,字段编号用于标识网络上的字段。
  • 客户端从服务器获取 UNIMPLEMENTED 状态。
  • 删除服务或方法 - 客户端在调用已删除的方法时从服务器获取 UNIMPLEMENTED 状态。

行为中断性变更

例如,向请求消息添加新字段:

  • 它不是协议中断性变更。
  • 如果未设置新字段,则在服务器上返回错误状态对于旧客户端来说是一个中断性变更。

行为兼容性由应用特定的代码决定。

版本号服务

若要在进行中断性变更的同时保持后向兼容性,一种方法是发布服务的多个版本。

该包可用于指定服务的版本号及其消息:

 

package greet.v1;

 

相关文章:

猜你喜欢
  • 2022-12-23
  • 2021-07-24
相关资源
相似解决方案