Получить доступ

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

MiddleПроектирование API
Ещё спрашивают так:
  • Как не сломать потребителей API при изменениях?
  • Что такое consumer-driven contract testing?
Коротко

По уровням: дисциплина совместимых изменений → схема как источник истины → автоматическая проверка совместимости в CI → контрактные тесты от потребителей.

  • Схема (OpenAPI, protobuf, Avro) — первична; из неё генерируются клиенты и документация
  • Диф схем в сборке: ломающее изменение валит пайплайн
  • Consumer-driven contracts (Pact): потребители фиксируют, что им нужно, провайдер проверяет каждый релиз

А ещё Неизбежные изменения — expand–contract, метрики использования старой версии и политика поддержки

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

1. Дисциплина изменений. По умолчанию — только добавления; клиенты — толерантные читатели.

2. Схема — источник истины. OpenAPI для REST, protobuf для gRPC, Avro/JSON Schema для событий. Клиенты генерируются из схемы, а не пишутся по документации, которая отстаёт от кода.

3. Автоматическая проверка совместимости. В CI сравнивается новая схема со старой (openapi-diff, buf breaking для protobuf); для событий — Schema Registry с режимом совместимости BACKWARD или FORWARD: реестр не даст зарегистрировать ломающую версию.

4. Контрактные тесты, управляемые потребителем. Каждый потребитель описывает запросы, которые он делает, и поля, которые читает (Pact). Провайдер в своей сборке проверяет, что удовлетворяет всем опубликованным контрактам, — и узнаёт о поломке до выкатки. Это позволяет отказаться от хрупких сквозных тестов всей системы и общего релизного поезда.

5. Когда ломать необходимо: expand–contract (новое рядом со старым), метрики, кто ещё зовёт старую версию (по заголовку клиента или ключу API), объявленный срок поддержки и уведомление потребителей.

Что хотят услышать

  • Многоуровневый ответ, а не одна мера.
  • Схема как первичный артефакт и проверка совместимости в CI.
  • Контрактные тесты от потребителей и чем они лучше сквозных.
  • Процесс для неизбежных ломающих изменений.

Частые ошибки

  • Полагаться только на документацию и внимательность.
  • Проверять совместимость сквозными тестами всей системы.

Что спросят дальше

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

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем