Код-ревью 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, но вводить его надо как новое поле.

Что должен найти ревьюер

  1. Ошибкастрока 4
    Тип поля 2 сменён со string на int32: старые и новые клиенты перестанут понимать друг друга
  2. Ошибкастрока 5
    Деньги в double: ошибки округления; лучше целые копейки (int64) или decimal-строка с валютой
  3. Ошибкастрока 6
    Номер 4 был у comment и отдан новому полю: старые клиенты прочтут дату как комментарий; номер нужно пометить reserved
  4. Стильстрока 6
    Дата строкой без формата: лучше google.protobuf.Timestamp или явный формат ISO 8601
  5. Безопасностьстрока 7
    В контракт добавлен email клиента: проверить, нужен ли он потребителям (минимизация ПДн)

Разбор

Правила эволюции protobuf: не менять тип и смысл существующего номера, удалённые номера и имена помечать reserved, новые поля добавлять со свежими номерами. Для статуса лучше enum с нулевым значением UNSPECIFIED, но вводить его надо как новое поле.

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

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