
Automatisch wie von Zauberhand REST-APIs durch Verkehrserfassung reverse-engineeren.
https://user-images.githubusercontent.com/5400940/168086818-c48f60ab-3f95-42eb-b435-c8b1a6326b81.mp4
Ein Tool zum automatischen Konvertieren von mitmproxy-Mitschnitten in OpenAPI 3.0-Spezifikationen. Das bedeutet, dass Sie REST-APIs automatisch rekonstruieren können, indem Sie einfach die Apps ausführen und den Datenverkehr mitschneiden.
🆕 NEU!
Unterstützung für die Verarbeitung von HAR-Dateien, die aus den Browser-Entwicklertools exportiert wurden, hinzugefügt. Siehe Verwendung - HAR für weitere Details.
Zuerst benötigen Sie Python3 und pip3.
$ pip install mitmproxy2swagger
# ... or ...
$ pip3 install mitmproxy2swagger
# ... or ...
$ git clone [email protected]:alufers/mitmproxy2swagger.git
$ cd mitmproxy2swagger
$ docker build -t mitmproxy2swagger .
Klonen Sie dann das Repository und führen Sie mitmproxy2swagger wie in den folgenden Beispielen aus.
Um eine Spezifikation durch Überprüfen des HTTP-Datenverkehrs zu erstellen, müssen Sie:
Nehmen Sie den Datenverkehr mit dem mitmproxy-Tool auf. Ich persönlich empfehle die Verwendung von mitmweb, einer in mitmproxy integrierten Weboberfläche.
$ mitmweb
Web server listening at http://127.0.0.1:8081/
Proxy server listening at http://*:9999
...
WICHTIG
Um Ihren Client für die Verwendung des von mitmproxy bereitgestellten Proxys zu konfigurieren, konsultieren Sie bitte die mitmproxy-Dokumentation für weitere Informationen.
Speichern Sie den Datenverkehr in einer Flow-Datei.
In mitmweb können Sie dies über das Menü „Datei“ und die Auswahl von „Speichern“ tun:

Führen Sie den ersten Durchlauf von mitmproxy2swagger aus:
$ 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>
Bitte beachten Sie, dass Sie ein vorhandenes Schema verwenden können; in diesem Fall wird das vorhandene Schema mit den neuen Daten erweitert. Sie können es auch mehrmals mit verschiedenen Flow-Mitschnitten ausführen, die aufgezeichneten Daten werden sicher zusammengeführt.
<api_prefix> ist die Basis-URL der API, die Sie rekonstruieren möchten. Sie müssen diese ermitteln, indem Sie die in mitmproxy gestellten Anfragen beobachten.
Wenn eine App beispielsweise folgende Anfragen gestellt hat:
https://api.example.com/v1/login
https://api.example.com/v1/users/2
https://api.example.com/v1/users/2/profile
Nehmen Sie den Datenverkehr in den Browser-Entwicklertools auf und exportieren Sie ihn.
Gehen Sie in den Browser-Entwicklertools zum Netzwerk-Tab und klicken Sie auf die Schaltfläche „HAR exportieren“.

Fahren Sie auf die gleiche Weise fort wie beim mitmproxy-Dump. mitmproxy2swagger erkennt die HAR-Datei automatisch und verarbeitet sie.
Siehe die Beispiele. Dort finden Sie ein generiertes Schema und eine HTML-Datei mit der generierten Dokumentation (über redoc-cli).
Siehe die generierte HTML-Datei.
Dieses Projekt verwendet:
So installieren Sie die Abhängigkeiten:
uv sync
Linter ausführen:
uv run prek run --all-files
Prek-Hooks installieren:
uv run prek install
Tests ausführen:
uv run pytest
Tests mit Codeabdeckung ausführen:
uv run pytest --cov=mitmproxy2swagger
MIT
Das wahrscheinliche Präfix ist https://api.example.com/v1.
Der erste Durchlauf sollte einen Abschnitt in der Schemadatei wie folgt erstellt haben:
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
Sie sollten die Schemadatei mit einem Texteditor bearbeiten und das Präfix ignore: von den Pfaden entfernen, die generiert werden sollen. Sie können auch die in den Pfaden erscheinenden Parameter anpassen.
Führen Sie den zweiten Durchlauf von mitmproxy2swagger aus:
$ 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]
Führen Sie den Befehl ein zweites Mal aus (mit derselben Schemadatei). Er wird die bearbeiteten Zeilen aufnehmen und Endpunktbeschreibungen generieren.
Bitte beachten Sie, dass mitmproxy2swagger vorhandene Endpunktbeschreibungen nicht überschreibt; wenn Sie sie überschreiben möchten, können Sie sie vor dem zweiten Durchlauf löschen.
Die Übergabe von --examples fügt Beispieldaten zu Anfragen und Antworten hinzu. Seien Sie vorsichtig bei der Verwendung dieser Option, da sie sensible Daten (Token, Passwörter, persönliche Informationen usw.) zum Schema hinzufügen kann.
Die Übergabe von --headers fügt Header-Daten zu Anfragen und Antworten hinzu. Seien Sie vorsichtig bei der Verwendung dieser Option, da sie sensible Daten (Token, Passwörter, persönliche Informationen usw.) zum Schema hinzufügen kann.