
ट्रैफ़िक कैप्चर करके REST API का स्वचालित रूप से रिवर्स इंजीनियरिंग
https://user-images.githubusercontent.com/5400940/168086818-c48f60ab-3f95-42eb-b435-c8b1a6326b81.mp4
एक उपकरण जो स्वचालित रूप से mitmproxy कैप्चर को OpenAPI 3.0 विनिर्देशों में परिवर्तित करता है। इसका मतलब है कि आप केवल ऐप्स चलाकर और ट्रैफ़िक कैप्चर करके REST API को स्वचालित रूप से रिवर्स-इंजीनियर कर सकते हैं।
🆕 नया!
ब्राउज़र DevTools से निर्यात किए गए 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
...
महत्वपूर्ण
अपने क्लाइंट को mitm प्रॉक्सी द्वारा प्रदर्शित प्रॉक्सी का उपयोग करने के लिए कॉन्फ़िगर करने के लिए, कृपया अधिक जानकारी के लिए mitmproxy दस्तावेज़ीकरण देखें।
ट्रैफ़िक को एक फ़्लो फ़ाइल में सहेजें।
mitmweb में आप "फ़ाइल" मेनू का उपयोग करके और "सहेजें" चुनकर ऐसा कर सकते हैं:

mitmproxy2swagger का पहला पास चलाएँ:
$ mitmproxy2swagger -i <path_to_mitmptoxy_flow> -o <path_to_output_schema> -p <api_prefix>
# ... या ...
$ docker run -it -v $PWD:/app mitmproxy2swagger mitmproxy2swagger -i <path_to_mitmptoxy_flow> -o <path_to_output_schema> -p <api_prefix>
कृपया ध्यान दें कि आप किसी मौजूदा स्कीमा का उपयोग कर सकते हैं, जिस स्थिति में मौजूदा स्कीमा को नए डेटा के साथ विस्तारित किया जाएगा। आप इसे विभिन्न फ़्लो कैप्चर के साथ कुछ बार भी चला सकते हैं, कैप्चर किया गया डेटा सुरक्षित रूप से मर्ज हो जाएगा।
<api_prefix> उस API का आधार URL है जिसे आप रिवर्स-इंजीनियर करना चाहते हैं। आपको इसे mitmproxy में किए जा रहे अनुरोधों को देखकर प्राप्त करना होगा।
उदाहरण के लिए यदि किसी ऐप ने इस प्रकार के अनुरोध किए हैं:
https://api.example.com/v1/login
https://api.example.com/v1/users/2
https://api.example.com/v1/users/2/profile
ब्राउज़र DevTools से ट्रैफ़िक कैप्चर करें और निर्यात करें।
ब्राउज़र DevTools में, नेटवर्क टैब पर जाएँ और "Export HAR" बटन पर क्लिक करें।

उसी तरह जारी रखें जैसे आप mitmproxy डंप के साथ करते। mitmproxy2swagger स्वचालित रूप से HAR फ़ाइल का पता लगाएगा और उसे प्रोसेस करेगा।
उदाहरण देखें। वहाँ आपको एक उत्पन्न स्कीमा और उत्पन्न दस्तावेज़ीकरण के साथ एक HTML फ़ाइल मिलेगी (redoc-cli के माध्यम से)।
उत्पन्न HTML फ़ाइल देखें।
यह प्रोजेक्ट उपयोग करता है:
निर्भरताएँ स्थापित करने के लिए:
uv sync
लिंटर चलाएँ:
uv run prek run --all-files
प्री-क हुक स्थापित करें:
uv run prek install
परीक्षण चलाएँ:
uv run pytest
कवरेज के साथ परीक्षण चलाएँ:
uv run pytest --cov=mitmproxy2swagger
MIT
संभावित उपसर्ग https://api.example.com/v1 है।
पहले पास को चलाने से स्कीमा फ़ाइल में ऐसा एक अनुभाग बन जाना चाहिए:
x-path-templates:
# किसी एंडपॉइंट को उसके URL के साथ उत्पन्न करने के लिए ignore: उपसर्ग हटाएँ
# शीर्ष के निकट की पंक्तियों को प्राथमिकता दी जाती है, मिलान लालची होता है
- 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]
# ... या ...
$ 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 पास करने से अनुरोधों और प्रतिक्रियाओं में हेडर डेटा जुड़ जाएगा। इस विकल्प का उपयोग करते समय सावधानी बरतें, क्योंकि यह स्कीमा में संवेदनशील डेटा (टोकन, पासवर्ड, व्यक्तिगत जानकारी आदि) जोड़ सकता है।