
إعادة هندسة واجهات برمجة تطبيقات REST تلقائياً عبر التقاط حركة المرور
https://user-images.githubusercontent.com/5400940/168086818-c48f60ab-3f95-42eb-b435-c8b1a6326b81.mp4
أداة لتحويل لقطات mitmproxy تلقائيًا إلى مواصفات OpenAPI 3.0. هذا يعني أنه يمكنك هندسة REST API s العكسية تلقائيًا بمجرد تشغيل التطبيقات والتقاط حركة المرور.
🆕 جديد!
تمت إضافة دعم معالجة HAR المُصدَّر من أدوات المطوّر في المتصفح. راجع الاستخدام - HAR لمزيد من التفاصيل.
ستحتاج أولاً إلى python3 و pip3.
$ pip install mitmproxy2swagger
# ... أو ...
$ pip3 install mitmproxy2swagger
# ... أو ...
$ 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 لمزيد من المعلومات.
احفظ حركة المرور في ملف تدفق (flow file).
في mitmweb يمكنك فعل ذلك باستخدام قائمة "File" واختيار "Save":

شغّل المرور الأول لـ mitmproxy2swagger:
$ mitmproxy2swagger -i <path_to_mitmproxy_flow> -o <path_to_output_schema> -p <api_prefix>
# ... أو ...
$ docker run -it -v $PWD:/app mitmproxy2swagger mitmproxy2swagger -i <path_to_mitmproxy_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
فمن المرجح أن يكون البادئة .
التقط حركة المرور من أدوات المطوّر في المتصفح وصدرها.
في أدوات المطوّر في المتصفح، انتقل إلى علامة التبويب "Network" وانقر على زر "Export HAR".

تابع بنفس الطريقة التي تتعامل بها مع تفريغ mitmproxy. سيكتشف mitmproxy2swagger ملف HAR تلقائيًا ويقوم بمعالجته.
راجع الأمثلة. ستجد هناك مخططًا مُنشأ وملف HTML مع التوثيق المُنشأ (عبر redoc-cli).
راجع ملف HTML المُنشأ.
يستخدم هذا المشروع:
لتثبيت التبعيات:
uv sync
تشغيل المدققات (linters):
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:
# قم بإزالة البادئة ignore: لإنشاء نقطة نهاية مع عنوان URL الخاص بها
# الأسطر الأقرب إلى الأعلى لها الأولوية، المطابقة جشعة
- 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_mitmproxy_flow> -o <path_to_output_schema> -p <api_prefix> [--examples]
# ... أو ...
$ docker run -it -v $PWD:/app mitmproxy2swagger mitmproxy2swagger -i <path_to_mitmproxy_flow> -o <path_to_output_schema> -p <api_prefix> [--examples]
شغّل الأمر مرة ثانية (بنفس ملف المخطط). سيلتقط الأسطر المُحرّرة ويُنشئ أوصاف نقاط النهاية.
يُرجى ملاحظة أن mitmproxy2swagger لن يستبدل أوصاف نقاط النهاية الموجودة، إذا كنت ترغب في استبدالها، يمكنك حذفها قبل تشغيل المرور الثاني.
إضافة --examples سيُضيف بيانات أمثلة إلى الطلبات والاستجابات. توخَّ الحذر عند استخدام هذا الخيار، فقد يُضيف بيانات حساسة (رموز مميزة، كلمات مرور، معلومات شخصية، إلخ) إلى المخطط.
إضافة --headers سيُضيف بيانات الرؤوس إلى الطلبات والاستجابات. توخَّ الحذر عند استخدام هذا الخيار، فقد يُضيف بيانات حساسة (رموز مميزة، كلمات مرور، معلومات شخصية، إلخ) إلى المخطط.