Mock-серверы в PolyApiIDE: подмена ответа без реального бэкенда
Содержание
Я делаю PolyApiIDE, и один из вопросов, который задают регулярно: «а можно подставить свой ответ вместо реального бэкенда?». Можно — это платная функция (планы Month, Year, Lifetime), называется mock-серверы. Ниже — как это устроено на самом деле, без преувеличений насчёт того, что именно подменяется.
Что это такое
Mock-сервер в PolyApiIDE — это правило: метод (GET, POST и так далее) плюс паттерн URL. Когда реальный запрос из вкладки совпадает с правилом, расширение перехватывает его через собственный механизм блокировки/редиректа запросов в браузере и возвращает тело ответа и content-type, которые вы задали в правиле, — вместо того чтобы отправлять запрос на настоящий backend.
Важный момент: это целиком локальный механизм. Перехват происходит в браузере, ни один байт мок-трафика не уходит на какой-либо наш сервер — правило просто подставляет готовый ответ вместо реального запроса на вашей машине.
Приоритет: Collection > Workspace > Global
Правило можно задать на одном из трёх уровней, и при совпадении нескольких правил побеждает самое специфичное:
| Уровень | Где действует | Приоритет |
|---|---|---|
| Collection | только запросы внутри конкретной коллекции | высший — переопределяет всё остальное |
| Workspace (пространство) | все запросы в этом пространстве | средний |
| Global | все запросы во всех пространствах IDE | низший — работает как база/заглушка по умолчанию |
Пример: вы ставите глобальное правило-заглушку GET /api/*, которое возвращает пустой список, чтобы вкладка не падала без сети, когда backend недоступен вообще. Но в одной конкретной коллекции, где вы сейчас разрабатываете фичу профиля пользователя, добавляете более узкое правило GET /api/users/* с реалистичной тестовой фикстурой. Для запросов из этой коллекции сработает правило коллекции, для всех остальных — глобальная заглушка.
Что подменяется сегодня, а что нет
Здесь важно быть честным: на сегодня платформа подменяет только тело ответа и content-type. Статус-код, заголовки ответа и искусственная задержка перед ответом технически не поддерживаются. Если вам нужно замокать именно 500-ю ошибку с нужным статусом или проверить, как клиент реагирует на медленный ответ с задержкой, — этого сейчас сделать нельзя. Мы работаем с тем, что уже реализовано, и не будем делать вид, что это полноценная платформа контрактного тестирования уровня WireMock или Prism. Это легковесная подстановка тела и типа контента, которая закрывает самый частый случай, но не заменяет полноценный мок-сервер.
Когда это реально пригождается
- Backend для нужного эндпоинта ещё не готов (или вы, как фронтендер, обгоняете команду backend) — вы работаете по заранее согласованному контракту, не дожидаясь релиза.
- Нужно показать демо без живого backend — например, в самолёте или в сети без доступа к стейджингу.
- Вы хотите работать полностью офлайн, не завязываясь на доступность внешнего сервиса.
- Вы тестируете скрипты (
pm/poly) или QA-проверки на детерминированном фиксированном ответе, не зависящем от того, насколько сейчас «моргает» реальный нестабильный backend.
Как это настраивается на практике
Концептуально это три шага: выбрать уровень (коллекция, пространство или глобально), добавить правило — метод плюс паттерн URL — и указать тело ответа и content-type, которые должны вернуться. После включения правила обычный запрос из вкладки, который совпадает с паттерном, получает подставленный ответ сразу, без обращения к реальному адресу. Остальной рабочий процесс — скрипты, QA-проверки, сценарии — работает с этим ответом так же, как с настоящим.
Если вы ещё не настраивали PolyApiIDE — начните с быстрого старта. Вопросы по лицензиям, планам и границам платных функций — в FAQ.
Автор делает PolyApiIDE. В текстах это сказано прямо, а не в подвале мелким шрифтом.