Ответ вслух Senior REST API и OpenAPI обновлено

Совместимость и версии API

Вопрос

Как ты развиваешь публичный API, чтобы не ломать существующих клиентов?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Главное различать совместимые и ломающие изменения. Добавить новое необязательное поле в ответ, новый эндпоинт или необязательный параметр можно без новой версии, если клиенты договорились игнорировать неизвестные поля.

Что должно прозвучать в ответе

  • Различать совместимые и ломающие изменения

  • Совместимые: новые необязательные поля, параметры, эндпоинты

  • Ломающие только в новой версии, период поддержки старой, deprecation

  • Клиенты должны игнорировать неизвестные поля

  • Контрактные тесты и мониторинг использования старой версии

Что могут спросить следом

  • Где держать версию: в пути или в заголовке?
  • Как понять, что старой версией уже никто не пользуется?

Разбор

Главное различать совместимые и ломающие изменения. Добавить новое необязательное поле в ответ, новый эндпоинт или необязательный параметр можно без новой версии, если клиенты договорились игнорировать неизвестные поля. Удалить или переименовать поле, сменить тип, сделать параметр обязательным, поменять смысл это ломающие изменения. Их выпускаю в новой версии, например /v2, а старую поддерживаю заранее объявленный срок и помечаю устаревшей в документации и заголовках ответа. Чтобы не сломать случайно, у нас контрактные тесты от потребителей, а по логам смотрю, кто ещё ходит в старую версию, и предупреждаю их до отключения.

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

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