Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: grpc, proto, api evolution

Как проектировать gRPC API так, чтобы оно было backward compatible при эволюции схемы?

Проверяет навык проектирования API, важный в больших продуктах.

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

Нельзя переиспользовать номера полей, нельзя менять типы, нельзя убирать поля. Новые поля — только с новыми тегами. Используются reserved поля, wrapper-типы и расширяемые структуры.

Длинный ответ

1. Никогда не изменять номера полей

Даже если поле удалено → отмечаем:

reserved 3;
reserved "old_field"

2. Нельзя менять тип поля

Это ломает бинарную совместимость.

3. Добавление новых полей — безопасно

Старый клиент их игнорирует.

4. Использовать wrapper-типы (google.protobuf.*Value)

Чтобы различать “не передано” и “нулевое значение”.

5. Oneof вместо enum

Удобно эволюционирует.

6. Версионирование пакетов

my.service.v1, my.service.v2.

7. Deprecation policy

Нельзя «ломать» контракты без подготовки.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    8

Навыки

  • Golang

    Golang

Ключевые слова

#grpc

#proto

#api evolution

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.