Сначала контракт, потом код ✊🏻

Очень много API-команд живут в режиме «давай быстрее хендлер, спека потом». Проблема в том, что это «потом» почти всегда превращается в рассинхрон: фронт ожидает одну структуру, бэк отдает другую, QA тестирует третью, а интеграции сыпятся на деталях, которые никто заранее не проговорил.

OpenAPI-first - это не бюрократия и не «документация ради документации». Это способ заранее зафиксировать договоренности: какие endpoint’ы реально существуют, какие статусы и ошибки система обещает, какие поля обязательные, где версия контракта и как мы меняем API без внезапной боли у клиентов.

На практике такой подход резко снижает шум в коммуникации. Спор «я думал, тут будет так» заменяется diff’ом openapi.yaml в MR. Появляется нормальное ревью API до написания бизнес-логики, можно генерировать типы и часть серверного кода, а негативные сценарии вроде 401/403/409/422 становятся частью дизайна, а не «ой, потом докрутим».

Рабочий процесс обычно простой: сначала меняем спецификацию, потом смотрим контрактный diff, после этого запускаем генерацию, реализуем логику за интерфейсами, прогоняем проверку соответствия контракту и сквозные проверки интеграций. Такая последовательность дисциплинирует команду и убирает половину случайных несовместимостей между слоями.

Чаще всего всё ломается в четырёх местах: спека пишется задним числом для галочки, не фиксируется единый формат ошибок, делаются breaking changes без явного версионирования, а во внешний контракт утаскиваются внутренние поля БД и технические детали домена. Потом это очень дорого разгребать.

OpenAPI-first не делает архитектуру идеальной автоматически, но очень заметно снижает стоимость самых дорогих багов - коммуникационных. Контракт в таком подходе перестает быть приложением к коду. Он и есть первая часть кода, с которой начинается реализация.

Сначала контракт, потом код ✊🏻 | Сетка — социальная сеть от hh.ru