
Reverse-engineer automaticamente API REST tramite la cattura del traffico
https://user-images.githubusercontent.com/5400940/168086818-c48f60ab-3f95-42eb-b435-c8b1a6326b81.mp4
Uno strumento per convertire automaticamente le catture di mitmproxy in specifiche OpenAPI 3.0. Ciò significa che puoi eseguire il reverse engineering automatico delle API REST semplicemente eseguendo le app e catturando il traffico.
🆕 NUOVO!
Aggiunto supporto per l'elaborazione di HAR esportati dagli strumenti di sviluppo del browser. Vedi Utilizzo - HAR per maggiori dettagli.
Per prima cosa avrai bisogno di python3 e pip3.
$ pip install mitmproxy2swagger
# ... oppure ...
$ pip3 install mitmproxy2swagger
# ... oppure ...
$ git clone [email protected]:alufers/mitmproxy2swagger.git
$ cd mitmproxy2swagger
$ docker build -t mitmproxy2swagger .
Poi clona il repo ed esegui mitmproxy2swagger come negli esempi seguenti.
Per creare una specifica ispezionando il traffico HTTP dovrai:
Catturare il traffico usando lo strumento mitmproxy. Personalmente consiglio di usare mitmweb, un'interfaccia web integrata in mitmproxy.
$ mitmweb
Web server listening at http://127.0.0.1:8081/
Proxy server listening at http://*:9999
...
IMPORTANTE
Per configurare il tuo client affinché usi il proxy esposto da mitmproxy, consulta la documentazione di mitmproxy per maggiori informazioni.
Salvare il traffico in un file di flusso.
In mitmweb puoi farlo usando il menu "File" e selezionando "Salva":

Eseguire il primo passaggio di mitmproxy2swagger:
$ mitmproxy2swagger -i <percorso_del_flusso_mitmproxy> -o <percorso_dello_schema_output> -p <prefisso_api>
# ... oppure ...
$ docker run -it -v $PWD:/app mitmproxy2swagger mitmproxy2swagger -i <percorso_del_flusso_mitmproxy> -o <percorso_dello_schema_output> -p <prefisso_api>
Nota che puoi usare uno schema esistente, nel qual caso lo schema esistente verrà esteso con i nuovi dati. Puoi anche eseguirlo più volte con diverse catture di flusso; i dati catturati verranno uniti in modo sicuro.
<prefisso_api> è l'URL di base dell'API di cui vuoi fare reverse engineering. Dovrai ottenerlo osservando le richieste effettuate in mitmproxy.
Ad esempio, se un'app ha effettuato richieste come queste:
https://api.example.com/v1/login
https://api.example.com/v1/users/2
https://api.example.com/v1/users/2/profile
Catturare ed esportare il traffico dagli strumenti di sviluppo del browser.
Negli strumenti di sviluppo del browser, vai alla scheda "Rete" e clicca sul pulsante "Esporta HAR".

Continua nello stesso modo in cui faresti con il dump di mitmproxy. mitmproxy2swagger rileverà automaticamente il file HAR e lo elaborerà.
Vedi gli esempi. Troverai uno schema generato e un file html con la documentazione generata (tramite redoc-cli).
Vedi il file html generato.
Questo progetto utilizza:
Per installare le dipendenze:
uv sync
Esegui i linter:
uv run prek run --all-files
Installa gli hook di prek:
uv run prek install
Esegui i test:
uv run pytest
Esegui i test con copertura:
uv run pytest --cov=mitmproxy2swagger
MIT
Il prefisso probabile è https://api.example.com/v1.
L'esecuzione del primo passaggio dovrebbe aver creato una sezione nel file dello schema come questa:
x-path-templates:
# Rimuovi il prefisso ignore: per generare un endpoint con il suo URL
# Le righe più in alto hanno la precedenza, il matching è greedy
- ignore:/addresses
- ignore:/basket
- ignore:/basket/add
- ignore:/basket/checkouts
- ignore:/basket/coupons/attach/{id}
- ignore:/basket/coupons/attach/104754
Dovresti modificare il file dello schema con un editor di testo e rimuovere il prefisso ignore: dai percorsi che desideri vengano generati. Puoi anche regolare i parametri che appaiono nei percorsi.
Eseguire il secondo passaggio di mitmproxy2swagger:
$ mitmproxy2swagger -i <percorso_del_flusso_mitmproxy> -o <percorso_dello_schema_output> -p <prefisso_api> [--examples]
# ... oppure ...
$ docker run -it -v $PWD:/app mitmproxy2swagger mitmproxy2swagger -i <percorso_del_flusso_mitmproxy> -o <percorso_dello_schema_output> -p <prefisso_api> [--examples]
Esegui il comando una seconda volta (con lo stesso file dello schema). Prenderà le righe modificate e genererà le descrizioni degli endpoint.
Nota che mitmproxy2swagger non sovrascriverà le descrizioni degli endpoint esistenti; se vuoi sovrascriverle, puoi eliminarle prima di eseguire il secondo passaggio.
L'uso di --examples aggiungerà dati di esempio alle richieste e alle risposte. Presta cautela nell'usare questa opzione, poiché potrebbe aggiungere dati sensibili (token, password, informazioni personali, ecc.) allo schema.
L'uso di --headers aggiungerà i dati delle intestazioni alle richieste e alle risposte. Presta cautela nell'usare questa opzione, poiché potrebbe aggiungere dati sensibili (token, password, informazioni personali, ecc.) allo schema.