Requestly: подмена ответов API, ошибки и задержки на живых примерах
Тестируйте API прямо в статье: подменяйте JSON, меняйте статусы и заголовки, добавляйте задержки, проверяйте POST-форму и гонку запросов. Изолированная интерактивная мастерская.

Что здесь можно проверить
Интерфейс почти всегда показывают с идеальными данными и быстрым сервером. Но что будет с пустым списком, ответом 500, неожиданным JSON или запросом, который пришёл слишком поздно? Ниже можно воспроизвести эти ситуации прямо на странице: изменить ответ учебного API и увидеть реакцию небольшого приложения.
Requestly HTTP Interceptor помогает перехватывать и изменять HTTP(S)-трафик, подставлять mock-данные и проверять нестандартные ответы: для браузера есть расширение, а для более широкого перехвата используется настольное приложение с локальным прокси, как объясняет официальная документация Requestly. Ниже эти задачи можно изучить на контролируемых учебных данных.
Это не встроенный Requestly и не копия всех его возможностей. Стенд демонстрирует практические задачи: mock API, изменение тела и заголовков, перенаправление между учебными маршрутами, задержки, ошибки и отмену запросов. Не вводите реальные токены, пароли, персональные данные или рабочие Cookie.
Если браузер разрешает Service Worker, примеры отправляют настоящие fetch-запросы в изолированное пространство lab-api и получают сформированные в браузере HTTP-ответы. Если такое встраивание запрещено, включается явно обозначенный локальный режим Request/Response. Ни один режим не перехватывает запросы других страниц и не обращается к вашему рабочему бэкенду.
Лаборатория ответов API
Начните с обычного ответа, затем выберите «Ошибка сервера» и нажмите «Отправить запрос». Сравните сам JSON, HTTP-статус и сообщение в интерфейсе. После этого попробуйте задержку, пустой список и неправильную структуру данных: успешный HTTP-ответ ещё не означает, что приложение сможет его использовать.
Как настроить своё правило
Откройте «Свои правила подмены» внутри лаборатории. Включите правило, задайте путь для совпадения и нужный метод. Сравнивается путь без query-параметров: правило для /api/catalog подходит к поиску /api/catalog?q=лампа, но не к /api/account.
- Бэкенд ещё не готов. Выберите сценарий «Свой JSON»: учебный маршрут
/api/customбез подмены отвечает 404, а с вашим mock-ответом показывает тестовые товары. Поменяйте название, цену и остаток в массивеitems. - Нужен другой сценарий. Включите замену тела, задайте статус 401, 429 или 500. Откройте инспектор: при сетевом сбое HTTP-ответа не будет вообще, а при 500 он существует.
- Нужно проверить окружение. В сценарии «Маршрут и headers» путь каталога заменяется на учебный echo-маршрут. В теле ответа будут видны итоговые заголовки и путь. Это локальная замена маршрута, не сетевой редирект 301/302.
- Нужно сохранить эксперимент. Скачайте настройки стенда в JSON и загрузите их в другой сеанс. Это собственный формат
aen-http-lab-v1, а не конфигурация для импорта в Requestly.
Порядок обработки в стенде фиксирован: совпадение пути и метода, замена маршрута, заголовки запроса, задержка, ответ учебного обработчика, подмена тела и статуса, отображение результата. Вкладка «Цепочка» показывает исходный и итоговый запрос и выполненные шаги. Несовпавшее или выключенное правило ничего не меняет.
Схема для каталога
Для предпросмотра каталога нужен массив items; у товара должны быть строка name и числа price, stock. Полный ответ остаётся доступным в инспекторе, а визуальная карточка показывает не более 20 товаров. Тестовые цены отображаются в рублях; это не магазин.
{
"items": [
{"id": 10, "name": "Мой тестовый товар", "price": 790, "stock": 8}
],
"currency": "RUB"
}
POST: ошибка формы и повторная отправка
В форме полезно проверить не только успешный запрос. Отправьте количество 0 или 8: учебный обработчик вернёт 422 и объяснит ограничение. Затем исправьте данные; отдельно включите 500 и медленный ответ, чтобы оценить сообщение об ошибке и блокировку повторной отправки.
Кнопка «Исправить и повторить» возвращает допустимое количество и обычный сценарий, после чего действительно отправляет новый учебный POST. Успех показывается после ответа, а не сразу после нажатия. Никаких платежей, заказов или изменений на сервере сайта здесь нет.
Медленная сеть и гонка запросов
Один запрос не показывает всей картины. При быстром поиске старый медленный ответ может прийти позже нового и заменить актуальные данные. Запустите пример с защитой, затем снимите переключатель и сравните итоговый товар с текущим словом поиска.
При включённой защите ожидание старого запроса отменяется через AbortController. Без защиты пример намеренно показывает ошибочное поведение: поздний результат для «блокнот» перезаписывает результат для «лампа». Время в журнале измеряется в текущем браузере; это не тест производительности сервера.
Как читать результат, а не только статус
| Проверка | Что искать |
|---|---|
| 200 и пустой массив | Понятное пустое состояние вместо ошибки. |
| 200 и неверный JSON | Отдельное сообщение об ошибке разбора, доступный сырой ответ. |
| 200 и другая структура | Проверка контракта данных, а не бесконечная загрузка. |
| 401 / 429 / 500 | Разные объяснения: доступ, ожидание, сбой сервера. |
| Сетевой сбой | Отсутствие HTTP-статуса; это не «ошибка 500». |
| Задержка и отмена | Понятное ожидание и отсутствие устаревшего результата. |
Во вкладке «Ответ» находится тело, в «Заголовках» служебные поля, в «Запросе» исходные данные, в «Цепочке» преобразования, в «Коде» вызов локального механизма. Журнал хранит последние 12 результатов только в памяти вкладки. Открытие старой строки показывает снимок: запрос повторно не отправляется, настройки редактора не меняются.
Как перенести подход в настоящий Requestly
В реальном проекте укажите адрес принадлежащего вам тестового приложения, настройте перехват и создайте нужное HTTP-правило. Официальный Interceptor поддерживает изменение URL, заголовков, тел запросов и ответов, локальные и облачные mock-сценарии и другие средства отладки, перечисленные в актуальном репозитории Interceptor.
- Начните с контрольного запроса. Посмотрите исходный ответ без правил, чтобы потом понимать, что именно изменилось.
- Сузьте область действия. Укажите конкретный адрес и нужный метод; не включайте широкое правило на все вкладки.
- Меняйте по одному условию. Сначала данные, затем ошибки или задержку. Так проще связать наблюдение с конкретным правилом.
- Выключите правило после проверки. Повторите запрос к настоящему API и убедитесь, что временная подмена больше не влияет на тест.
Подмена ответа в вашем браузере не меняет сервер и не публикует исправление для других пользователей. Это способ проверить гипотезу и поведение интерфейса, а не замена тестов бэкенда, проверки прав доступа или развёртывания исправленного приложения. Для системного перехвата, других приложений и устройств нужен соответствующий вариант настройки из документации Requestly.
Не весь продукт Requestly следует называть открытым. Репозиторий requestly/requestly теперь служит центром обсуждений API Client; его README указывает, что приложение API Client имеет закрытый исходный код. Открытый HTTP Interceptor вынесен в отдельный репозиторий. Условия выбранного компонента проверяйте отдельно.
Границы стенда и безопасная работа
Можно проверить здесь
- JSON, статусы и HTTP-заголовки на учебных данных.
- Состояния загрузки, ошибки, пустые ответы и feature flags.
- POST-валидацию, повторную отправку и устаревшие результаты.
- Совпадение правила, локальную замену маршрута и отмену ожидания.
Здесь намеренно нет
- Запросов к произвольным внешним URL и серверного прокси.
- Обхода CORS, авторизации или ограничений чужих сайтов.
- Исполнения введённого JavaScript, HTML или shell-команд.
- Облачного хранения, перехвата других вкладок и публикации mock-API в интернете.
Работайте только со своими приложениями и ресурсами, на тестирование которых есть разрешение. Подставлять фиктивные ответы удобно для разработки интерфейса, но по ним нельзя делать вывод о реальной безопасности, доступности или корректности чужого сервера. Официальные возможности и установку смотрите на сайте Requestly.


