Выбор ответа Middle gRPC, SOAP и другие протоколы обновлено
Номера полей в protobuf
Вопрос
Из сообщения protobuf удалили поле string comment = 5;. Как правильно поступить, чтобы не сломать совместимость?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Пометить номер 5 и имя как reserved. В бинарном формате protobuf поле идентифицируется номером, а не именем.
Варианты ответа
- Отдать номер 5 новому полю
int64 discount - Ничего: важны только имена полей, а не номера
- Перенумеровать оставшиеся поля по порядку
- Пометить номер 5 и имя как
reservedправильный ответ
Разбор
В бинарном формате protobuf поле идентифицируется номером, а не именем. Если отдать номер 5 полю другого типа, старые клиенты прочитают мусор. Перенумерация ломает всех. reserved защищает номер и имя от повторного использования.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.