एक API रिस्पॉन्स मॉक करें
अपने ऐप की किसी API कॉल का जवाब तयशुदा रिस्पॉन्स से दें — आपके हाथ में मौजूद फ़ोन पर, बिना नकली सर्वर और बिना दोबारा बिल्ड किए। तय बॉडी के लिए Mock ब्लॉक नियम, ठीक एक बार चलाना हो तो रन कैप, और बॉडी की गणना करनी हो तो स्क्रिप्ट।
असली डिवाइस पर मॉकिंग वहीं है जहाँ ज़्यादातर सेटअप बिखर जाते हैं: स्टब सर्वर लैपटॉप पर रहता है, फ़ोन को उस तक पहुँचना होता है, और ऐप को उसकी ओर मोड़ना पड़ता है। Busymate DevTools मॉक को कैप्चर पाथ में ही रख देता है। एक ब्लॉक नियम हर उस रिक्वेस्ट पर नज़र रखता है जो किसी मेथड और होस्ट-प्लस-पाथ पैटर्न से मेल खाती है, और मेल खाने पर खुद जवाब देता है — एक सिंथेटिक एरर, कटा हुआ कनेक्शन, या ऐसा मॉक सक्सेस जो बिल्कुल ओरिजिन के जवाब जैसा दिखता है। अपस्ट्रीम सर्वर से कभी संपर्क नहीं होता।
नियम दो जगह लागू होते हैं, इसलिए हर कनेक्शन मोड कवर है: ब्राउज़र, प्रॉक्सी से Android और PAC मोड में iOS के लिए प्रॉक्सी सर्वर, और VPN मोड में iOS के लिए ऑन-डिवाइस VPN टनल। ग्लोबल नियम हर डिवाइस पर लागू होते हैं; प्रति-डिवाइस नियम उनके ऊपर जुड़ते हैं। बदलाव Realtime से फैलते हैं, इसलिए सहेजा गया नियम बिना रीकनेक्ट के फ़ोन पर लाइव होता है।
आपको क्या
एक फ़ोन जो पहले से कैप्चर कर रहा है, और वह एंडपॉइंट जिसे आप नकली बनाना चाहते हैं।
कैप्चर चालू वाला पेयर्ड फ़ोन — पहले iPhone या Android गाइड पूरी करें।
उस डिवाइस की SSL प्रॉक्सी सूची में API होस्ट। पाथ पर मेल खाने वाला नियम पाथ को सिर्फ़ डिक्रिप्टेड होस्ट पर देख सकता है।
जिस कॉल का जवाब देना है उसका मेथड, होस्ट और पाथ, और वह बॉडी जिसकी आपका ऐप उम्मीद करता है।
सिर्फ़ स्क्रिप्ट वाले रूप के लिए: आपके रोल में एडमिन-स्तर की स्क्रिप्ट क्षमता। सादे Mock नियमों को कोई ख़ास रोल नहीं चाहिए।
इसे क्रम
चरण एक से चार आपको एक तय मॉक देते हैं। पाँच और छह उन दो मामलों को कवर करते हैं जो तय बॉडी नहीं कर सकती: एक बार चलना और जवाब की गणना करना।
- 01
पक्का करें कि होस्ट डिक्रिप्टेड है
डैशबोर्ड फ़ीड खोलें और एंडपॉइंट पर गई कोई असली रिक्वेस्ट ढूँढें। अगर उसकी पंक्ति डिक्रिप्टेड बॉडी दिखाती है, तो आप तैयार हैं। अगर होस्ट अब भी एन्क्रिप्टेड दिखता है, तो उसे डिवाइस की SSL प्रॉक्सी सूची में जोड़ें — पंक्ति के होस्ट एक्शन से या डिवाइस की सेटिंग्स से — और कॉल दोबारा ट्रिगर करें। एन्क्रिप्टेड गुज़रने वाले होस्ट पर एन्फ़ोर्सर सिर्फ़ होस्टनेम से मेल कर सकता है; पाथ अदृश्य है, इसलिए पाथ-सटीक मॉक कभी नहीं चलता।
- 02
Blocks खोलें और नियम जोड़ें
ग्लोबल नियम के लिए सेटिंग्स नेविगेशन से Blocks पेज खोलें, या सिर्फ़ इस फ़ोन पर लागू नियम के लिए डिवाइस में जाकर Blocks खोलें। एक नियम जोड़ें और मेथड भरें — या किसी से भी मेल खाने के लिए खाली छोड़ें — और पैटर्न। पैटर्न वही होस्ट-प्लस-पाथ वाइल्डकार्ड हैं जो ब्रेकपॉइंट इस्तेमाल करते हैं: होस्ट, एक स्लैश, पाथ, और जहाँ कोई हिस्सा बदलता हो वहाँ तारांकन।
- 03
Mock चुनें और रिस्पॉन्स को आकार दें
एक्शन को Mock पर सेट करें। जहाँ Block कॉल को फ़ेल करने के लिए है और Drop ऐसा दिखाता है मानो नेटवर्क ग़ायब हो गया, वहीं Mock उसे संतुष्ट करने के लिए है: स्टेटस सेट करें — डिफ़ॉल्ट 200 —, वे हेडर जिन्हें ऐप देखेगा, और बॉडी। उसे वही Content-Type दें जिसे आपका ऐप पार्स करता है; टेक्स्ट जवाब पाने वाला JSON क्लाइंट एक बाइट पढ़ने से पहले ही फ़ेल हो जाएगा। JSON के रूप में सहेजने पर नियम ऐसा दिखता है।
एक Mock नियम जो फ़ीचर-फ़्लैग कॉल का जवाब तय बॉडी से देता है json{ "enabled": true, "method": "GET", "pattern": "api.example.com/v1/feature-flags", "action": { "type": "mock", "status": 200, "headers": { "Content-Type": "application/json" }, "body": "{\"flags\": {\"newCheckout\": true}}" } } - 04
सहेजें, कॉल ट्रिगर करें, और फ़ीड जाँचें
नियम सहेजें और ऐप इस्तेमाल करें। अगली मेल खाने वाली रिक्वेस्ट का जवाब कैप्चर पाथ से बाहर निकले बिना दिया जाता है, और वह फिर भी आपकी फ़ीड में दिखती है — मॉक के रूप में चिह्नित, ताकि आप ठीक-ठीक देखें कि क्या नकली बनाया गया और पुष्टि करें कि नियम ने वही किया जो आप चाहते थे। ऐप को सिर्फ़ सादा सर्वर जवाब दिखता है: सिंथेटिक रिस्पॉन्स में कोई आंतरिक या पहचान वाला हेडर नहीं होता, इसलिए रिस्पॉन्स में कुछ भी इंटरसेप्शन उजागर नहीं करता।
काम पूरा होने पर नियम को उसके इनेबल स्विच से बंद करें। बंद नियम की कोई लागत नहीं और वह अगली बार के लिए अपना रूप बनाए रखता है।
- 05
रन कैप से इसे ठीक एक बार चलाएँ
कुछ मॉक एक ही बार होने चाहिए। क्लासिक मामला है एक सिंथेटिक 401 जो ऐप को यकीन दिलाता है कि उसका टोकन खत्म हो गया ताकि वह रिफ़्रेश फ़्लो चलाए — हर रिक्वेस्ट का जवाब ऐसे दें तो ऐप रिफ़्रेश करता है, फिर कोशिश करता है, फिर 401 पाता है और हमेशा घूमता रहता है। Max runs फ़ील्ड तय करता है कि नियम कितनी बार चल सकता है; सीमा पर वह खुद को बंद कर लेता है और एडिटर ऑटो-डिसेबल्ड बैज दिखाता है, जो आपके खुद बंद किए नियम से अलग है।
गिनती प्रति डिवाइस रखी जाती है और रीकनेक्ट व ऐप रीलॉन्च के बाद भी बनी रहती है, इसलिए एक की सीमा उस फ़ोन पर हमेशा के लिए एक ही बार चलती है, हर सेशन में नहीं। सीमा वाला ग्लोबल नियम सिर्फ़ उस डिवाइस पर दबता है जिसने उसे खर्च किया और बेड़े के हर दूसरे फ़ोन पर चलता रहता है। आप BusyBro से सादी भाषा में किसी होस्ट पर एक बार का मॉक 401 भी माँग सकते हैं, और वह वही नियम लिखता है।
एक बार वाला 401 — सामान्य मॉक जैसा ही, बस एक की सीमा के साथ json{ "enabled": true, "method": "GET", "pattern": "api.example.com/v1/me", "action": { "type": "mock", "status": 401, "headers": { "Content-Type": "application/json" }, "body": "{\"error\": \"token_expired\"}" }, "maxRuns": 1 } - 06
स्क्रिप्ट से बॉडी की गणना करें
Mock बॉडी एक जमी हुई स्ट्रिंग है। जब जवाब रिक्वेस्ट पर निर्भर होना चाहिए — वापस लौटाया गया id, एक टाइमस्टैम्प, असली जवाब में बदला गया कोई फ़ील्ड — तो नियम के एक्शन को Script पर बदलें, या Settings फिर Scripts में एक स्वतंत्र स्क्रिप्ट बनाएँ। आपको रिक्वेस्ट, रिस्पॉन्स और हेल्पर ऑब्जेक्ट के लिए ऑटोकम्प्लीट वाला कोड एडिटर मिलता है, और एक Test पैनल जो आपकी स्क्रिप्ट को एक असली कैप्चर की गई एंट्री पर चलाकर लाइव ट्रैफ़िक छुए बिना पहले-बाद का डिफ़ दिखाता है। ड्राई रन उसी सैंडबॉक्स का इस्तेमाल करता है जो लाइव प्रॉक्सी करता है, इसलिए टेस्ट पास होना यानी लाइव में काम करना।
जो स्क्रिप्ट एरर फेंकती है या टाइम आउट होती है वह फ़ेल-ओपन होती है: असली बाइट्स आगे भेज दिए जाते हैं और एंट्री इंस्पेक्टर में चिह्नित हो जाती है, इसलिए टूटी हुई स्क्रिप्ट कभी कनेक्शन नहीं अटका सकती या ऐप के सामने खुद को ज़ाहिर नहीं कर सकती। स्क्रिप्ट एडमिन-स्तर की हैं क्योंकि वे कैप्चर पाथ में मनमाना कोड चलाती हैं।
एक रिक्वेस्ट हुक जो गणना की गई JSON बॉडी से शॉर्ट-सर्किट करता है javascriptfunction onRequest(req) { if (req.path.startsWith("/v1/feature-flags")) { // computed per request — the upstream is never contacted return Response.json({ flags: { newCheckout: true, seed: Date.now() } }, { status: 200 }); } // no return → forward unchanged }
क्या गड़बड़
जो नियम मरा हुआ लगता है वह लगभग हमेशा ऐसी चीज़ से मेल खा रहा होता है जिसे वह देख नहीं सकता।
नियम कभी नहीं चलता
जाँचें कि उस डिवाइस के लिए होस्ट डिक्रिप्टेड है — पाथ पैटर्न को यह चाहिए —, फिर पैटर्न की स्पेलिंग और कि मेथड मेल खाता है या खाली है। असली रिक्वेस्ट की फ़ीड पंक्ति कॉपी करने लायक सटीक होस्ट और पाथ दिखाती है।
ऐप रिफ़्रेश लूप में फँस गया
आपका सिंथेटिक 401 हर रिक्वेस्ट पर चलता है। Max runs को एक पर सेट करें ताकि पहली बार के बाद नियम खुद बंद हो जाए और दोबारा भेजी गई रिक्वेस्ट असली सर्वर तक पहुँचे।
ऐप मॉक जवाब को ठुकरा देता है
आमतौर पर Content-Type हेडर गायब है या बॉडी का ढाँचा वैसा नहीं है जैसा क्लाइंट पार्स करता है। शुरुआत के लिए इंस्पेक्टर से किसी असली कैप्चर किए रिस्पॉन्स के हेडर और बॉडी कॉपी करें।
नियम ऑटो-डिसेबल्ड बैज दिखाता है
इसने इस डिवाइस पर अपना रन कैप खर्च कर दिया। Max runs साफ़ करें या नियम फिर से चालू करें ताकि वह दोबारा तैयार हो।
स्क्रिप्ट चली पर जवाब असली वाला था
स्क्रिप्ट ने एरर फेंका या टाइम आउट हुई और फ़ेल-ओपन हो गई। इंस्पेक्टर में एंट्री खोलें — एरर बैज में संदेश और लाइन है —, एडिटर में ठीक करें, और दोबारा चालू करने से पहले उसी एंट्री पर Test पैनल फिर चलाएँ।
लोग जो
क्या ऐप बता सकता है कि उसे मॉक किया गया?
रिस्पॉन्स की जाँच से नहीं। मॉक किया 200 या ब्लॉक किया 403 कोई पहचान वाला हेडर नहीं रखता और ओरिजिन के सामान्य जवाब जैसा दिखता है। दृश्यता एकतरफ़ा है: चिह्नित एंट्री सिर्फ़ आपकी फ़ीड में दिखती है।
क्या यह VPN मोड में iOS पर काम करता है, या सिर्फ़ प्रॉक्सी के ज़रिए?
दोनों। वही नियम इंजन iOS VPN टनल के अंदर और प्रॉक्सी सर्वर पर चलता है, इसलिए दोनों मोड में iOS, प्रॉक्सी से Android और ब्राउज़र सब नियम मानते हैं।
नियम बदलने पर क्या मुझे कुछ दोबारा डिप्लॉय करना होगा?
नहीं। नियम उन्हीं सेटिंग्स में रहते हैं जो Realtime से डिवाइस तक पहुँचती हैं, इसलिए सहेजना नए कनेक्शन पर तुरंत लागू होता है। पहले से खुला keep-alive कनेक्शन रीकनेक्ट होने तक उसी कॉन्फ़िगरेशन पर रहता है जिससे शुरू हुआ था।
जवाब नकली बनाएँ,
डैशबोर्ड में एक नियम, और आपके हाथ के ऐप को वही रिस्पॉन्स मिलता है जिसे आप परखना चाहते हैं — न स्टब सर्वर, न दोबारा बिल्ड।