Код-ревью Senior gRPC, SOAP и другие протоколы обновлено
Ревью изменения proto-контракта
Вопрос
Команда предлагает новую версию контракта. В старой версии было string id = 1; string status = 2; double amount = 3; string comment = 4;. Найди проблемы в новой версии.
syntax = "proto3";
message Order {
string id = 1;
int32 status = 2;
double amount = 3;
string delivery_date = 4;
string customer_email = 5;
}
Коротко
Правила эволюции protobuf: не менять тип и смысл существующего номера, удалённые номера и имена помечать reserved, новые поля добавлять со свежими номерами. Для статуса лучше enum с нулевым значением UNSPECIFIED, но вводить его надо как новое поле.
Что должен найти ревьюер
- Ошибкастрока 4Тип поля 2 сменён со string на int32: старые и новые клиенты перестанут понимать друг друга
- Ошибкастрока 5Деньги в double: ошибки округления; лучше целые копейки (int64) или decimal-строка с валютой
- Ошибкастрока 6Номер 4 был у comment и отдан новому полю: старые клиенты прочтут дату как комментарий; номер нужно пометить reserved
- Стильстрока 6Дата строкой без формата: лучше google.protobuf.Timestamp или явный формат ISO 8601
- Безопасностьстрока 7В контракт добавлен email клиента: проверить, нужен ли он потребителям (минимизация ПДн)
Разбор
Правила эволюции protobuf: не менять тип и смысл существующего номера, удалённые номера и имена помечать reserved, новые поля добавлять со свежими номерами. Для статуса лучше enum с нулевым значением UNSPECIFIED, но вводить его надо как новое поле.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.