Highlights
Теперь при клике на любой request в Activity вы увидите полный payload. Еще один клик открывает его обратно в Playground, уже заполненным и готовым к повторному запуску. Мы также обнаружили класс proxy, которые возвращают ваш собственный request в качестве ложного ответа, и заблокировали их, чтобы они не загрязняли ваши данные.
What's New
Activity → Playground: повторный запуск любого request
Каждый вызов API возвращается с header X-Foura-Request-Id. Этот же id отображается рядом с request в Activity. Кликните на любую строку, чтобы получить полную картину: время запуска, использованный ключ, request body, response, статус-коды и затраченное время. Нажмите «Open in Playground», и request загрузится в форму уже заполненным.
Раньше для повторного запуска приходилось восстанавливать request по памяти. Теперь Activity хранит историю, а Playground служит кнопкой перезапуска.
Несколько технических деталей. Мы храним последние 200 payload для каждого API-ключа в течение 24 часов. После этого старые записи удаляются по мере поступления новых. Если срок хранения payload истек, диалоговое окно сообщит вам об этом вместо того, чтобы показывать непонятное значение null или «(empty body)», как это было раньше.
Вы также можете сопоставлять id запросов. Логируйте response header X-Foura-Request-Id вместе с вашим собственным id запроса на стороне клиента, и поиск соответствующей строки в Activity займет всего одно действие вставки.
Процесс сохранения работает вне hot path. Ваш API request никогда не ждет его завершения. Если хранилище сохраненных данных недоступно, вызов все равно будет выполнен, просто позже в диалоговом окне отобразится «no body captured».
Validate against the response body
В разделе Validate в Playground появились правила для содержимого body. Вы можете задать условия вида «успешно, только если response содержит X» или «ошибка, если содержит Y», разделяя альтернативные варианты символом |. Это работает для Single и Proxy. Полезно, когда статус-коды скрывают реальное положение дел.
Bodyless payloads explain themselves
Неудачные requests не имеют response body для отображения. Раньше в диалоговом окне это выводилось как null или «(empty body)», что можно было легко принять за настоящий пустой response. Теперь диалоговое окно различает три случая: request завершился ошибкой (с выводом реального сообщения об ошибке), payload не был сохранен или сервер действительно вернул ноль байт.
Мелочь, но это избавляет от постоянных сомнений в духе «подождите, это был реальный response или баг интерфейса?».
Reset button in Playground
Возвращает форму активного endpoint к настройкам по умолчанию в один клик. По умолчанию параметры unblocker и tryJsonData остаются включенными, так как это сценарий использования в 90% случаев.
Under the Hood
Honeypot proxy detection
Некоторые proxy в сети на самом деле не перенаправляют трафик. Они возвращают ваш собственный request в виде текстового дампа переменных сервера (HTTP-метод, headers, целевой хост), чтобы их оператор мог перехватить любые содержащиеся там данные. Мы сталкивались с ситуациями, когда один и тот же proxy перенаправлял один request, возвращал эхо для следующего и выдавал ошибку 502 на третий, и все это в рамках одной сессии.
Теперь валидатор body распознает сигнатуру такого дампа еще до того, как response покинет наш edge. Single возвращает честную ошибку. Proxy Finder пробует другой proxy. Browser наследует эту же защиту из общего HTTP-слоя. В результате вы увидите меньше мусорных строк в Activity, а ваши парсеры не будут собирать то, что выглядит как данные, но на самом деле является зондированием.
Репутация пока не меняется. Этот proxy временно остается в пуле. Мы просто отказываемся передавать вам его ложный ответ.
Поэтому, если request попадает в Activity с пометкой о критической ошибке там, где раньше он отображался как сомнительный «success», это означает, что сработала защита. Лучше чистая ошибка, чем испорченная запись.