Выбор ответа Middle gRPC, SOAP и другие протоколы обновлено

Номера полей в protobuf

Вопрос

Из сообщения protobuf удалили поле string comment = 5;. Как правильно поступить, чтобы не сломать совместимость?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Пометить номер 5 и имя как reserved. В бинарном формате protobuf поле идентифицируется номером, а не именем.

Варианты ответа

  1. Отдать номер 5 новому полю int64 discount
  2. Ничего: важны только имена полей, а не номера
  3. Перенумеровать оставшиеся поля по порядку
  4. Пометить номер 5 и имя как reservedправильный ответ

Разбор

В бинарном формате protobuf поле идентифицируется номером, а не именем. Если отдать номер 5 полю другого типа, старые клиенты прочитают мусор. Перенумерация ломает всех. reserved защищает номер и имя от повторного использования.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.