我有一个客户端-服务器应用程序,服务器将 protobuf 格式的序列化对象传输给客户端,我想停用一个required
字段。不幸的是,我不能同时更改客户端和服务器以使用新.proto
定义。
如果我将一个required
字段更改为optional
,但仅用于序列化消息的代码(即反序列化代码尚未重建并且仍然认为它是一个required
字段),我可以继续发布可以反序列化的消息,只要我填充一个值现在optional
-场?
(这样做似乎很好,至少对于我尝试过的一些微不足道的情况(仅使用Java),但我感兴趣的是它是否是一种普遍合理的方法,以及是否有任何边缘情况等我应该担心)。
动机:我的目标是停用required
客户端-服务器应用程序中的一个字段,其中服务器发布由客户端反序列化的消息。我的预期方法是:
required
将字段更改为optional
在主干上。- 如果需要部署新的服务器代码(用于不相关的功能/修复),请确保在消息中继续填充可选字段。
- 逐步为所有客户部署更新的代码(这需要时间,因为它需要其他团队参与他们自己的发布计划)
- 确认所有客户端都已更新。
- 开始停用(即不填充)可选字段。