非中断性变更允许现有客户端继续工作而不做任何变更。
非重大变化
在 gRPC 协议级别和 .NET 二进制级别,这些变更不会中断。
- 添加新服务
- 向服务中添加新方法
- 默认值(若未设置)进行反序列化。
- 未知字段集合中。
二进制中断性变更
如果你计划将 gRPC 库发布到 NuGet,二进制兼容性很重要。
- 保留关键字指定邮件上已删除的字段编号和名称。
- 任何字段都会出现消息名称在网络上发送的情况。
- 这并不是 gRPC 协议中断性变更,但如果客户端升级到最新的协定,则需要对其进行更新。
协议中断性变更
以下各项是协议和二进制的中断性变更:
- 但是,如果服务器正在使用 JSON 内容,则重命名字段是一个中断性变更。
- 即使新的数据类型是兼容的,但如果客户端升级到最新的协定,它也可能需要更新以支持新的类型。
- 更改字段编号 - 对于 Protobuf 有效负载,字段编号用于标识网络上的字段。
- 客户端从服务器获取 UNIMPLEMENTED 状态。
- 删除服务或方法 - 客户端在调用已删除的方法时从服务器获取 UNIMPLEMENTED 状态。
行为中断性变更
例如,向请求消息添加新字段:
- 它不是协议中断性变更。
- 如果未设置新字段,则在服务器上返回错误状态对于旧客户端来说是一个中断性变更。
行为兼容性由应用特定的代码决定。
版本号服务
若要在进行中断性变更的同时保持后向兼容性,一种方法是发布服务的多个版本。
该包可用于指定服务的版本号及其消息:
package greet.v1;