Два инструмента, которые помогли мне повысить производительность при тестировании и разработке моих API

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

В последнее время я разрабатывал API для личного проекта и столкнулся с необходимостью решить, использовать ли Postman или Burp Suite. Это отличные инструменты для тестирования ваших конечных точек и изменения получаемых ими данных, чтобы вы могли гарантировать высокую производительность и безопасность даже в крайних случаях.

Однако, даже если у меня уже был опыт работы с обоими инструментами, я решил поискать альтернативы, которые можно было бы легче настроить и лучше соответствовать моим требованиям, которые в основном таковы:

  • легко создавать запросы
  • изменять и взаимодействовать с исходящими запросами
  • оценка и фильтрация ответов для облегченного тестирования

Я также не хотел тратить время на написание простых в использовании прокси-серверов самостоятельно, что я делаю только тогда, когда стремлюсь к чрезвычайно конкретным вариантам использования, например, всегда автоматически изменяю исходящие запросы к домену test.testing.com.

После поиска в различных репозиториях GitHub я решил использовать httpie и mitmproxy (а также mitmdump), чтобы помочь мне в разработке API для sTeX.

Разработка API еще не закончена, но я могу сказать, что доволен тем, как сочетаются два инструмента, и хотел поделиться опытом с читателем.

HTTPie

Бьюсь об заклад, что большинство из вас слышали о cURL и/или использовали его. Сокращенный от клиентского URL, cURL (также) является утилитой командной строки для передачи данных между протоколами. Мне нравится cURL, и я много использовал его как для разработки, так и для исследований в области безопасности, но как только я начал использовать httpie, я понял, почему создатели сочли нужным такой проект конкурировать с cURL.

cURL разработан так, чтобы иметь гораздо больше функций, но они редко бывают полезны при повседневном тестировании API. С другой стороны, httpie — это инструмент командной строки, позволяющий легко взаимодействовать со всем, что работает на HTTP или HTTPS, и он разработан, чтобы быть максимально простым и максимально простым.

Его значения по умолчанию гарантируют, что у вас будет максимально гладкая работа при ручной обработке запросов API, например, эта команда httpie:

http http://127.0.0.1 test=data

Преобразуется в следующий HTTP-запрос:

POST / HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 16
Content-Type: application/json
Host: 127.0.0.1
{
    "test": "data"
}

Такой синтаксис очень подходит для большинства API и гарантирует, что пользователю не придется вводить длинные команды перед отправкой желаемого запроса. Конечно, по крайней мере, на мой взгляд, cURL по-прежнему является королем в области создания запросов CLI, но простота и рабочий процесс httpie делают его более подходящим для большинства задач тестирования.

MITMProxy

MITM может показаться вам знакомым, если нет, напомню: главное посередине. Это означает, что mitmproxy буквально размещается между вашими приложениями и сервером, на который они отправляют данные. Такое поведение также называется прокси-перехватчиками и используется всеми современными (или нет) инструментами тестирования API.

Использование таких инструментов в тестировании API простое: вы можете легко изменять, изменять форму и отслеживать данные, которые ваш API получает после выполнения запроса.

Есть два инструмента, которые я использую конкретно:

  • митпрокси
  • митмдамп

MITMProxy

Этот инструмент хранит все в памяти, и я использую его, когда хочу отслеживать httpie-запросы, которые я делаю (обычно это набор запросов, прямой результат сценария bash для тестирования различных областей API). Это то, что я использую на ходу и быстро отслеживаю, как API реагирует на различные действия пользователя. Например, вы можете протестировать API по списку полезных нагрузок эксплойтов. Я могу эффективно отслеживать эти запросы благодаря хорошей работе фильтров mitmproxy.

MITMDump

С другой стороны, mitmdump (похожий на великий tcpdump) сохраняет все потоки в файлах, что делает его предпочтительным для структурированного тестирования и использования собственных ответов API позже для проведения дальнейшего тестирования. Он также поддерживает добавление пользовательских сценариев к запросам и ответам, хотя я предпочитаю покрывать это своими собственными сценариями.

Три инструмента вместе идеально подошли мне. Я делаю запросы с помощью httpie и использую прокси-сервер mitmproxy (или mitmdump) для мониторинга и анализа запросов и ответов.

Такие инструменты, как Postman, работают очень хорошо, но иногда предлагают слишком много функций, которые нам не нужны, не имеют некоторых параметров настройки, не являются бесплатными и/или с открытым исходным кодом, или мы просто хотим сделать перерыв в графическом интерфейсе и переключиться на командную строку. .

Лично я больше буду использовать комбинацию httpie, mitmproxy и mitmdump. Возможно, я также создам простой бэкенд, чтобы легко делиться результатами и иметь возможность сотрудничать, как в Postman.

Спасибо за прочтение!