Как было организовано единое хранение и версионирование gRPC/Protobuf-контрактов?

Версионирование gRPC контрактов в Golang обычно строится на следующих принципах:

Короткий ответ

Что ответить на собеседовании

Версионирование gRPC контрактов в Golang обычно строится на следующих принципах:

Подробный разбор

Ответ с пояснениями

Версионирование gRPC контрактов в Golang обычно строится на следующих принципах:

  • Обратная совместимость: стараемся не ломать существующие сервисы и клиентов.
  • Добавление новых методов и сообщений: новые RPC и поля добавляются с новыми номерами, старые не удаляются.
  • Использование опциональных полей: новые поля в сообщениях делают опциональными, чтобы старые клиенты могли их игнорировать.
  • Версионирование пакетов или сервисов: иногда создают отдельные пакеты с версией, например v1, v2, чтобы явно отделить разные версии API.

Пример:

syntax = "proto3";
package example.v1;

service MyService {
  rpc GetData(Request) returns (Response);
}

message Request {
  int32 id = 1;
}

message Response {
  string data = 1;
  string extra_info = 2; // новое поле, опциональное
}

Если нужно изменить контракт несовместимым образом, создают новую версию сервиса, например example.v2.MyService.

Таким образом, клиенты могут постепенно мигрировать на новую версию без прерывания работы.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее