
Автоматически восстанавливать REST API путём захвата трафика
https://user-images.githubusercontent.com/5400940/168086818-c48f60ab-3f95-42eb-b435-c8b1a6326b81.mp4
Инструмент для автоматического преобразования захватов mitmproxy в спецификации OpenAPI 3.0. Это означает, что вы можете автоматически восстанавливать REST API, просто запуская приложения и захватывая трафик.
🆕 НОВОЕ!
Добавлена поддержка обработки HAR, экспортированного из инструментов разработчика браузера. Подробнее см. в разделе Использование - HAR.
Сначала вам понадобятся python3 и pip3.
$ pip install mitmproxy2swagger
# ... or ...
$ pip3 install mitmproxy2swagger
# ... or ...
$ git clone [email protected]:alufers/mitmproxy2swagger.git
$ cd mitmproxy2swagger
$ docker build -t mitmproxy2swagger .
Затем клонируйте репозиторий и запустите mitmproxy2swagger, как показано в примерах ниже.
Чтобы создать спецификацию путем анализа HTTP-трафика, вам необходимо:
Захватите трафик с помощью инструмента mitmproxy. Лично я рекомендую использовать mitmweb — встроенный веб-интерфейс mitmproxy.
$ mitmweb
Web server listening at http://127.0.0.1:8081/
Proxy server listening at http://*:9999
...
ВАЖНО
Чтобы настроить ваш клиент на использование прокси, предоставляемого mitmproxy, обратитесь к документации mitmproxy для получения дополнительной информации.
Сохраните трафик в файл потока.
В mitmweb это можно сделать через меню "Файл" и выбрав "Сохранить":

Запустите первый проход mitmproxy2swagger:
$ mitmproxy2swagger -i <path_to_mitmptoxy_flow> -o <path_to_output_schema> -p <api_prefix>
# ... or ...
$ docker run -it -v $PWD:/app mitmproxy2swagger mitmproxy2swagger -i <path_to_mitmptoxy_flow> -o <path_to_output_schema> -p <api_prefix>
Обратите внимание, что вы можете использовать существующую схему, в этом случае она будет дополнена новыми данными. Вы также можете запускать его несколько раз с разными захватами потоков, захваченные данные будут безопасно объединены.
<api_prefix> — это базовый URL API, который вы хотите восстановить. Вам нужно получить его, наблюдая за запросами в mitmproxy.
Например, если приложение сделало такие запросы:
https://api.example.com/v1/login
https://api.example.com/v1/users/2
https://api.example.com/v1/users/2/profile
Захватите и экспортируйте трафик из инструментов разработчика браузера.
В инструментах разработчика браузера перейдите на вкладку "Сеть" и нажмите кнопку "Export HAR".

Продолжайте так же, как и с дампом mitmproxy. mitmproxy2swagger автоматически обнаружит файл HAR и обработает его.
См. примеры. Там вы найдете сгенерированную схему и HTML-файл со сгенерированной документацией (через redoc-cli).
См. сгенерированный HTML-файл.
Этот проект использует:
Для установки зависимостей:
uv sync
Запуск линтеров:
uv run prek run --all-files
Установка хуков prek:
uv run prek install
Запуск тестов:
uv run pytest
Запуск тестов с покрытием:
uv run pytest --cov=mitmproxy2swagger
MIT
Скорее всего, префиксом будет https://api.example.com/v1.
После первого прохода в файле схемы должен появиться раздел, подобный этому:
x-path-templates:
# Remove the ignore: prefix to generate an endpoint with its URL
# Lines that are closer to the top take precedence, the matching is greedy
- ignore:/addresses
- ignore:/basket
- ignore:/basket/add
- ignore:/basket/checkouts
- ignore:/basket/coupons/attach/{id}
- ignore:/basket/coupons/attach/104754
Вам нужно отредактировать файл схемы в текстовом редакторе и удалить префикс ignore: из тех путей, которые вы хотите сгенерировать. Вы также можете настроить параметры, указанные в путях.
Запустите второй проход mitmproxy2swagger:
$ mitmproxy2swagger -i <path_to_mitmptoxy_flow> -o <path_to_output_schema> -p <api_prefix> [--examples]
# ... or ...
$ docker run -it -v $PWD:/app mitmproxy2swagger mitmproxy2swagger -i <path_to_mitmptoxy_flow> -o <path_to_output_schema> -p <api_prefix> [--examples]
Запустите команду второй раз (с тем же файлом схемы). Она обнаружит отредактированные строки и сгенерирует описания конечных точек.
Обратите внимание, что mitmproxy2swagger не перезаписывает существующие описания конечных точек; если вы хотите их перезаписать, удалите их перед вторым проходом.
Передача --examples добавит примеры данных в запросы и ответы. Соблюдайте осторожность при использовании этой опции, так как она может добавить конфиденциальные данные (токены, пароли, личную информацию и т.д.) в схему.
Передача --headers добавит данные заголовков в запросы и ответы. Соблюдайте осторожность при использовании этой опции, так как она может добавить конфиденциальные данные (токены, пароли, личную информацию и т.д.) в схему.