Перейти к содержимому
Поиск
Разработка

Requestly: подмена ответов API, ошибки и задержки на живых примерах

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

Александр Некрасов
Requestly: тестирование API. Учебные ответы 200 и 500, JSON и задержки на тёмно-бирюзовом фоне.

Что здесь можно проверить

Интерфейс почти всегда показывают с идеальными данными и быстрым сервером. Но что будет с пустым списком, ответом 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.

  1. Бэкенд ещё не готов. Выберите сценарий «Свой JSON»: учебный маршрут /api/custom без подмены отвечает 404, а с вашим mock-ответом показывает тестовые товары. Поменяйте название, цену и остаток в массиве items.
  2. Нужен другой сценарий. Включите замену тела, задайте статус 401, 429 или 500. Откройте инспектор: при сетевом сбое HTTP-ответа не будет вообще, а при 500 он существует.
  3. Нужно проверить окружение. В сценарии «Маршрут и headers» путь каталога заменяется на учебный echo-маршрут. В теле ответа будут видны итоговые заголовки и путь. Это локальная замена маршрута, не сетевой редирект 301/302.
  4. Нужно сохранить эксперимент. Скачайте настройки стенда в 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.

  1. Начните с контрольного запроса. Посмотрите исходный ответ без правил, чтобы потом понимать, что именно изменилось.
  2. Сузьте область действия. Укажите конкретный адрес и нужный метод; не включайте широкое правило на все вкладки.
  3. Меняйте по одному условию. Сначала данные, затем ошибки или задержку. Так проще связать наблюдение с конкретным правилом.
  4. Выключите правило после проверки. Повторите запрос к настоящему 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.