
Automaticamente faça engenharia reversa de APIs REST capturando tráfego.
https://user-images.githubusercontent.com/5400940/168086818-c48f60ab-3f95-42eb-b435-c8b1a6326b81.mp4
Uma ferramenta para converter automaticamente capturas do mitmproxy em especificações OpenAPI 3.0. Isso significa que você pode reverter a engenharia de APIs REST automaticamente apenas executando os aplicativos e capturando o tráfego.
🆕 NOVO!
Adicionado suporte para processar HAR exportado do DevTools do navegador. Veja Uso - HAR para mais detalhes.
Primeiro você precisará de python3 e pip3.
$ pip install mitmproxy2swagger
# ... or ...
$ pip3 install mitmproxy2swagger
# ... or ...
$ git clone [email protected]:alufers/mitmproxy2swagger.git
$ cd mitmproxy2swagger
$ docker build -t mitmproxy2swagger .
Em seguida, clone o repositório e execute mitmproxy2swagger conforme os exemplos abaixo.
Para criar uma especificação inspecionando o tráfego HTTP, você precisará:
Capture o tráfego usando a ferramenta mitmproxy. Eu pessoalmente recomendo usar o mitmweb, que é uma interface web embutida no mitmproxy.
$ mitmweb
Web server listening at http://127.0.0.1:8081/
Proxy server listening at http://*:9999
...
IMPORTANTE
Para configurar seu cliente para usar o proxy exposto pelo mitmproxy, consulte a documentação do mitmproxy para mais informações.
Salve o tráfego em um arquivo de fluxo.
No mitmweb você pode fazer isso usando o menu "Arquivo" e selecionando "Salvar":

Execute a primeira passagem do mitmproxy2swagger:
$ mitmproxy2swagger -i <caminho_para_fluxo_mitmproxy> -o <caminho_para_esquema_saida> -p <prefixo_api>
# ... ou ...
$ docker run -it -v $PWD:/app mitmproxy2swagger mitmproxy2swagger -i <caminho_para_fluxo_mitmproxy> -o <caminho_para_esquema_saida> -p <prefixo_api>
Observe que você pode usar um esquema existente; nesse caso, o esquema existente será estendido com os novos dados. Você também pode executá-lo algumas vezes com diferentes capturas de fluxo; os dados capturados serão mesclados com segurança.
<prefixo_api> é a url base da API da qual você deseja fazer engenharia reversa. Você precisará obtê-la observando as requisições feitas no mitmproxy.
Por exemplo, se um aplicativo fez requisições como estas:
https://api.example.com/v1/login
https://api.example.com/v1/users/2
https://api.example.com/v1/users/2/profile
Capture e exporte o tráfego do DevTools do navegador.
No DevTools do navegador, vá para a aba "Rede" e clique no botão "Exportar HAR".

Continue da mesma forma que faria com o dump do mitmproxy. O mitmproxy2swagger detectará automaticamente o arquivo HAR e o processará.
Veja os exemplos. Você encontrará um esquema gerado lá e um arquivo html com a documentação gerada (via redoc-cli).
Veja o arquivo html gerado.
Este projeto usa:
Para instalar as dependências:
uv sync
Execute linters:
uv run prek run --all-files
Instale hooks do prek:
uv run prek install
Execute testes:
uv run pytest
Execute testes com cobertura:
uv run pytest --cov=mitmproxy2swagger
MIT
O prefixo provável é https://api.example.com/v1.
Executar a primeira passagem deve ter criado uma seção no arquivo de esquema como esta:
x-path-templates:
# Remove o prefixo ignore: para gerar um endpoint com sua URL
# Linhas mais próximas do topo têm precedência, a correspondência é gananciosa
- ignore:/addresses
- ignore:/basket
- ignore:/basket/add
- ignore:/basket/checkouts
- ignore:/basket/coupons/attach/{id}
- ignore:/basket/coupons/attach/104754
Você deve editar o arquivo de esquema com um editor de texto e remover o prefixo ignore: dos caminhos que deseja que sejam gerados. Você também pode ajustar os parâmetros que aparecem nos caminhos.
Execute a segunda passagem do mitmproxy2swagger:
$ mitmproxy2swagger -i <caminho_para_fluxo_mitmproxy> -o <caminho_para_esquema_saida> -p <prefixo_api> [--examples]
# ... ou ...
$ docker run -it -v $PWD:/app mitmproxy2swagger mitmproxy2swagger -i <caminho_para_fluxo_mitmproxy> -o <caminho_para_esquema_saida> -p <prefixo_api> [--examples]
Execute o comando uma segunda vez (com o mesmo arquivo de esquema). Ele pegará as linhas editadas e gerará descrições de endpoints.
Observe que o mitmproxy2swagger não sobrescreverá descrições de endpoints existentes; se você quiser sobrescrevê-las, pode deletá-las antes de executar a segunda passagem.
Passar --examples adicionará dados de exemplo às requisições e respostas. Tenha cuidado ao usar esta opção, pois pode adicionar dados sensíveis (tokens, senhas, informações pessoais etc.) ao esquema.
Passar --headers adicionará dados de cabeçalho às requisições e respostas. Tenha cuidado ao usar esta opção, pois pode adicionar dados sensíveis (tokens, senhas, informações pessoais etc.) ao esquema.