В .proto номер удалённого поля переиспользовали под новое поле: что будет со старыми клиентами
В контракте gRPC-сервиса произошло изменение:
// было
message Order {
int64 id = 1;
string promo_code = 4;
}
// стало
message Order {
int64 id = 1;
int32 bonus_points = 4;
}
Часть клиентов ещё собрана со старой версией контракта.
Чего ожидать?
- Ничего страшного: изменилось только имя поля, а клиенты сопоставляют поля сообщения по именам и просто не найдут promo_code
- Старые клиенты не получат promo_code: поле опознаётся по номеру, а тег 4 теперь несёт другой тип значения
- Сломается только представление сообщения в JSON, а бинарный формат к таким правкам схемы устойчив по построению
- Проблема проявится лишь при разных версиях библиотеки protobuf у клиента и сервера, на одинаковых её не будет
