У меня есть клиент-серверное приложение, где сервер передает сериализованные объекты в формате protobuf клиенту, и я хотел бы уйти в отставку в поле required
. К сожалению, я не могу одновременно изменять клиент и сервер, чтобы использовать новое определение .proto
.
Если я изменяю поле required
как optional
, но только для кода, который сериализует сообщения (т.е. десериализационный код не был перестроен и все еще считает его полем required
), могу ли я продолжать публиковать сообщения, может быть десериализовано , пока я заполняю значение для поля now- optional
?
(Похоже, это так, по крайней мере, для нескольких тривиальных случаев, с которыми я экспериментировал (только с использованием Java), но мне интересно, если это вообще разумный подход, и есть ли какие-либо краевые случаи и т.д. я должен беспокоиться).
Мотивация. Моя цель - удалить поле required
в клиент-серверном приложении, где сервер публикует сообщения, которые десериализуются клиентом. Мой предполагаемый подход:
- Измените
required
наoptional
на соединительной линии. - Если необходимо развернуть новый код сервера (для несвязанных функций/исправлений), убедитесь, что в сообщении добавлено дополнительное поле.
- Постепенно разворачивайте обновленный код для всех клиентов (это потребует времени, поскольку оно требует участия других команд со своими расписаниями выпуска).
- Подтвердите, что все клиенты обновлены.
- Начните убирать (то есть не заполнять) необязательное поле.