Выбор ответа Senior CI/CD, фича-флаги и релизы обновлено

Обратная совместимость API для мобильных клиентов

Вопрос

Бэкенд хочет переименовать поле в ответе API. Что нужно учесть из-за мобильных клиентов?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Старые версии живут месяцами: нужно отдавать оба поля или версионировать API, пока старых клиентов много. Мобильные клиенты нельзя обновить синхронно с бэкендом: часть пользователей отключила автообновление, часть не заходит месяцами.

Варианты ответа

  1. Ничего: клиенты с включённым автообновлением получат новую версию в течение часа после релиза
  2. Достаточно выпустить новую версию приложения в тот же день и поднять минимальную версию через неделю
  3. Переименование безопасно, если тип поля не изменился: JSON-декодеры сопоставляют поля по типу и порядку
  4. Старые версии живут месяцами: нужно отдавать оба поля или версионировать API, пока старых клиентов многоправильный ответ

Разбор

Мобильные клиенты нельзя обновить синхронно с бэкендом: часть пользователей отключила автообновление, часть не заходит месяцами. Поэтому изменения API делают аддитивными (добавить новое поле, старое оставить), версионируют эндпоинты или используют серверно-управляемый контракт. Удаление старого поля происходит после проверки статистики версий. Новая версия в тот же день не решает проблему уже установленных. Декодеры сопоставляют поля по имени, а не по типу и порядку.

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

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