gRPC API 版本控制与负载均衡实践
1. gRPC API 版本控制
在设计 API 时,版本控制是一个重要的考虑因素。对于 REST API,通常会在 URL 中添加子路径来包含版本号,例如 https://example.com/status/v1
,这样可以同时托管多个不同版本的 API,客户端也不会与错误的版本进行通信。
gRPC 同样可以应用版本控制,因为它是基于 HTTP 协议的中间件包装器,仍然使用标准的 HTTP 地址。gRPC 调用实际上是对特定地址的 POST 请求,地址格式为 {base URL}/{Protobuf 包名}.{Protobuf 服务名}/{rpc 名称}
。为了使 gRPC 客户端与服务器兼容,Protobuf 定义中的以下细节必须完全匹配:
- gRPC 包名
- 服务名
- RPC 名
1.1 设计阶段的版本控制实践
在设计阶段应用 API 版本控制的一个好做法是在 proto 文件的包声明中指定版本标识符。同时,按照惯例,proto 文件的名称应与包名相同。例如,如果将包名从 stats
更改为 stats.v1
,那么文件名称也应从 stats.proto
更改为 stats.v1.proto
。
如果在 proto 文件中不指定额外的命名空间修饰符,不同的 Protobuf 版本将被放置在生成代码的不同命名空间中,这样就可以在同一个应用程序中并行维护和运行多个版本的 Prot