Dmitriy Kononov
Обсудим задачуСвязаться

Новости и разборы

Моки API и отдельные базы: как проверить релиз, когда команды работают параллельно

Postman, Supabase, .NET и PostgreSQL меняют инструменты проверки. Разбираем, где заканчивается изоляция и начинается доказательство готовности релиза.

Параллельная разработка ускоряется только до первого общего ресурса. Команды могут работать в разных ветках кода, но мешать друг другу одной базой, зависеть от ещё не выпущенного API или проверять код на другом окружении. Октябрьские обновления сокращают часть этих ожиданий. При этом растёт значение отдельного этапа, на котором независимые результаты снова соединяются.

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

Новые возможности проверяют разные предположения

В Postman 15 октября появились программируемые моки на JavaScript с состоянием между запросами. Supabase 14 октября представила локальный проект для каждой рабочей копии; новый движок и нативный запуск остаются экспериментальными.

Одновременно .NET 11 RC2 от 13 октября вышел с лицензией go-live support, а PostgreSQL 19 RC1 от 15 октября остаётся кандидатом в релиз с запланированной общей доступностью 19 ноября. Одинаковое обозначение RC не означает одинаковую политику использования. Проверять нужно условия каждого проекта.

Эти четыре сообщения не образуют готовый совместимый стек. Они показывают четыре разных основания теста: модель поведения API, отдельное состояние данных, версию среды исполнения и статус базы. Каждое основание нужно фиксировать явно.

Мок должен уметь спорить с реализацией

Если разработчик пишет сервис и его мок из одного предположения, оба могут одинаково ошибаться. Успешный тест тогда доказывает согласованность выдуманной модели с кодом. Чтобы мок был полезен, ожидаемое поведение задают через согласованный контракт и реальные ограничения поставщика.

Особенно ценны переходы между запросами. Создание объекта должно влиять на последующее чтение. Повтор команды, истечение срока, отказ в доступе и ограничение частоты нужны там, где интеграция зависит от их обработки. Ошибка должна возникать в известном месте сценария, чтобы результат можно было воспроизвести.

Мок позволяет отладить реакцию на задержку, но не измеряет настоящую задержку внешнего сервиса. Он показывает, отправит ли код повтор, но не доказывает безопасность этого повтора в реальном API. Перед выпуском эти границы закрываются отдельными проверками.

Условный сценарий: изменение статуса заказа

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

Первый тест: два окна открыли одну версию. В первом заказ согласован, во втором отправлено старое изменение. Ожидаемый результат: второе действие не перезаписывает согласование незаметно. Интерфейс получает конфликт и предлагает обновить данные. Ответ мока задаёт поведение клиента, но сервер обязан пройти такой же контрактный сценарий самостоятельно.

Затем собирается общая проверочная среда. Миграции применяются с согласованной исходной схемы, запускаются обе версии приложения и повторяется конфликт. Если старая версия ещё обслуживает запросы во время обновления, она входит в проверку. Иначе релиз может сломаться именно в переходный период, хотя новая версия отдельно исправна.

В локальной базе полезно разрешать частый сброс. В общей среде нужно проверять сохранность уже существующих записей. Эти задачи противоположны по отношению к данным; одна настройка окружения редко обслуживает обе достаточно хорошо.

Приёмка с понятными границами

Для выпуска фиксируют версии инструментов, схему исходных данных и различия между локальной и общей средой. Экспериментальный нативный запуск Supabase не следует незаметно принимать за эквивалент любого продакшен-развёртывания. Новую версию базы оценивают вместе с расширениями, драйверами и способом обновления.

Процесс можно остановить после конкретного несоответствия: контракт не совпал, миграция не прошла на копии структуры или старый клиент неправильно обработал новый ответ. Это полезнее общего требования «проверить всё» без ответственного и результата. Количество зелёных тестов само по себе не объясняет, какие предположения остались непроверенными.

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