Back to questions
Рамблер
Senior
4
Как вы подходили к версионированию gRPC контрактов?
Companies where asked
Answer from AI
sobes.tech AI
Версионирование 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.
Таким образом, клиенты могут постепенно мигрировать на новую версию без прерывания работы.