तेज़ डिबगिंग के लिए JSON को कैसे फ़ॉर्मेट करें
न्यूनतम एपीआई प्रतिक्रियाएँ स्पष्ट दृष्टि से त्रुटियों को छिपाती हैं। आपकी मशीन पर पेलोड रखने वाले ब्राउज़र टूल का उपयोग करके एक दोहराने योग्य वर्कफ़्लो सीखें - सुंदर-प्रिंट, मान्य संरचना, डीकोड जेडब्ल्यूटी, और रेगेक्स का परीक्षण करें।
जब कोई एपीआई न्यूनतम JSON की दीवार लौटाता है, तो वास्तविक बग ढूंढने से पहले डिबगिंग धीमी हो जाती है। कुंजियाँ एक साथ धुंधली हो जाती हैं, गायब अल्पविराम लंबी स्ट्रिंग में छिप जाते हैं, और नेस्टेड सरणियों को स्कैन करना असंभव हो जाता है। सुंदर-मुद्रण कॉस्मेटिक नहीं है - यह है कि आप अपारदर्शी परिवहन प्रारूप को किसी ऐसी चीज़ में बदल देते हैं जिसे आपकी आँखें सेकंडों में पार्स कर सकती हैं।
अपने ब्राउज़र नेटवर्क टैब, टर्मिनल या लॉग फ़ाइल से मूल प्रतिक्रिया की प्रतिलिपि बनाएँ। इसे पावर टूल्स पर JSON फ़ॉर्मेटर में पेस्ट करें। एक इंडेंटेशन स्तर चुनें - कॉम्पैक्ट लॉग के लिए दो स्थान, जब आप कोड समीक्षा में स्निपेट साझा करते हैं तो चार स्थान। फ़ॉर्मेटर सिंटैक्स को रेंडर करते समय मान्य करता है। यदि कोई अनुगामी अल्पविराम या गैर-उद्धृत कुंजी दस्तावेज़ को तोड़ती है, तो आपको यह अनुमान लगाने के बजाय कि कौन सी पंक्ति विफल हुई, तुरंत त्रुटि स्थान दिखाई देता है।
सत्यापन त्रुटियाँ कुछ पूर्वानुमानित श्रेणियों में आती हैं। एक भी छूटा हुआ उद्धरण अक्सर दर्जनों भ्रामक संदेशों में बदल जाता है; पहले रिपोर्ट की गई समस्या को ठीक करें और पुनः प्रारूपित करें। स्ट्रिंग के रूप में संग्रहीत संख्याएँ - 200 के बजाय "200" - वैध JSON हैं, लेकिन आपके एप्लिकेशन में सख्त तुलनाओं को तोड़ सकती हैं; इंडेंटेड आउटपुट पढ़ते समय उन्हें हाइलाइट करें। PATCH एंडपॉइंट में शून्य बनाम अनुपस्थित कुंजियाँ मायने रखती हैं: स्वरूपित JSON इसे स्पष्ट करता है जब कोई फ़ील्ड गायब होने के बजाय स्पष्ट रूप से शून्य होता है।
एक बार जब पेलोड पढ़ने योग्य हो जाए, तो ऊपर से नीचे तक पढ़ने के बजाय रणनीतिक रूप से डीबग करें। लिफ़ाफ़े की पहचान करें: HTTP रैपर अक्सर डेटा को डेटा, परिणाम या आइटम के अंतर्गत रखते हैं। जिस आकार की आप अपेक्षा करते हैं उसकी तुलना करें—सरणी बनाम वस्तु—जो आया है उसके साथ। यदि पृष्ठांकन शामिल है, तो अलग-अलग रिकॉर्ड में जाने से पहले पृष्ठ, कुल और कर्सर फ़ील्ड की पुष्टि करें।
प्रमाणीकरण बग में अक्सर JWT एक्सेस टोकन शामिल होते हैं। जब कोई एपीआई 401 या 403 लौटाता है, तो जेडब्ल्यूटी डिकोडर टूल में बियरर टोकन - "बियरर" उपसर्ग के बिना, यदि डिकोडर कच्चे जेडब्ल्यूटी की अपेक्षा करता है - पेस्ट करें। पहले एक्सपी दावे का निरीक्षण करें: समाप्त हो चुके टोकन अचानक विफलताओं की व्याख्या करते हैं जो "यादृच्छिक" दिखाई देते हैं क्योंकि घड़ियां एक सीमा पार कर जाती हैं। यदि आपकी सेवा जारीकर्ता या दर्शकों को मान्य करती है तो आईएस और ऑड की जांच करें। पेलोड अनुभाग भूमिकाओं, किरायेदार आईडी और कस्टम दावों को प्रकट करता है, यदि सेवाओं के बीच प्रकार भिन्न होते हैं तो आपका बैकएंड गलत तरीके से पढ़ सकता है।
उत्पादन टोकन को कभी भी सार्वजनिक पेस्टबिन में पेस्ट न करें या दृश्यमान दावों वाले चैट स्क्रीनशॉट न डालें। आपकी अपनी मशीन पर ब्राउज़र-आधारित डिकोडिंग तीसरे पक्ष के सर्वर से रहस्य को दूर रखती है, लेकिन आपकी स्क्रीन और क्लिपबोर्ड अभी भी मायने रखते हैं। साझा हार्डवेयर पर डिबगिंग के बाद फ़ील्ड साफ़ करें।
स्ट्रिंग फ़ील्ड में अक्सर एस्केप्ड JSON या बेस64 ब्लॉब्स होते हैं। बाहरी ऑब्जेक्ट को फ़ॉर्मेट करने के बाद, एक आंतरिक स्ट्रिंग की प्रतिलिपि बनाएँ और फिर से फ़ॉर्मेट करें। कुछ एपीआई डबल-एनकोड त्रुटियों को दर्शाते हैं: संदेश फ़ील्ड में ऑब्जेक्ट के बजाय JSON स्ट्रिंग होती है। प्रत्येक परत को अच्छी तरह से प्रिंट करने से वास्तविक सत्यापन संदेश सामने आता है जो आपके यूआई को उपयोगकर्ताओं को दिखाना चाहिए।
जब लॉग में मिश्रित टेक्स्ट और JSON शामिल हो - जो वेबहुक डिलीवरी में आम है - फ़ॉर्मेटिंग से पहले JSON ब्लॉक को अलग करने के लिए रेगेक्स टेस्टर का उपयोग करें। सावधानीपूर्वक एंकरिंग के साथ \{[\s\S]*\} जैसा पैटर्न आसपास के हेडर से ऑब्जेक्ट को निकाल सकता है। सहेजे गए नमूना लॉग के विरुद्ध रेगेक्स का परीक्षण करें, फिर इसे समान प्रविष्टियों पर लगातार लागू करें। रेगेक्स निष्कर्षण को फ़ॉर्मेटर के साथ संयोजित करें ताकि आप लाइन दर लाइन टाइमस्टैम्प उपसर्गों को मैन्युअल रूप से न हटाएं।
प्रतिगमन कार्य के लिए, जब आपको कर्ल या पोस्टमैन में सटीक बाइट अनुक्रमों को पुन: उत्पन्न करने की आवश्यकता हो तो स्वरूपित JSON को वापस एक पंक्ति में छोटा करें। JSON फ़ॉर्मेटर उस राउंड ट्रिप के लिए मिनीफाई मोड का समर्थन करता है। अपने टिकट में दोनों अभ्यावेदन संग्रहीत करें: मानव पाठकों के लिए इंडेंट, कॉपी-पेस्ट पुनरुत्पादन चरणों के लिए छोटा।
एपीआई घटनाओं के लिए एक व्यक्तिगत चेकलिस्ट बनाएं। चरण एक: सिंटैक्स को प्रारूपित करें और ठीक करें। चरण दो: अपने ओपनएपीआई या टाइपस्क्रिप्ट प्रकारों के विरुद्ध फ़ील्ड मैप करें। चरण तीन: यदि प्रमाणीकरण शामिल है तो JWT को डिकोड करें। चरण चार: आवश्यकता पड़ने पर लॉग से रेगेक्स-एम्बेडेड पेलोड निकालें। चरण पाँच: सबसे छोटे विफल उपसमुच्चय का दस्तावेज़ीकरण करें—असंबद्ध शाखाओं को तब तक हटाएँ जब तक कि केवल समस्याग्रस्त कुंजी न रह जाए।
टीमों को इंडेंटेशन और प्रमुख ऑर्डरिंग परंपराओं पर सहमत होने से लाभ होता है, भले ही JSON ऑब्जेक्ट तकनीकी रूप से अव्यवस्थित हों। पुल अनुरोधों में लगातार स्वरूपण से भिन्न शोर कम हो जाता है। किसी अन्य के पेलोड की समीक्षा करते समय, उन्हें स्क्रीनशॉट के बजाय स्वरूपित JSON चिपकाने के लिए कहें; पाठ को खोजा जा सकता है, छवियों को नहीं।
बड़े सरणियाँ विशेष ध्यान देने योग्य हैं। सूचकांक शून्य पर मानसिक रूप से ढहना आसान है; सूचकांक चार सौ पर कोई बग नहीं हैं। फ़ॉर्मेट करने के बाद, अपनी बग रिपोर्ट से विशिष्ट आईडी या ईमेल खोजें। यदि फ़ॉर्मेटर अत्यधिक बड़े चिपकाए गए इनपुट के साथ संघर्ष करता है, तो अपने संपादक में सरणी को विभाजित करें या एपीआई मालिक से पृष्ठांकित समापन बिंदु का अनुरोध करें।
सुरक्षा-संवेदनशील फ़ील्ड-पासवर्ड, ताज़ा टोकन, निजी कुंजियाँ—कभी-कभी आकस्मिक डिबग डंप में दिखाई देती हैं। टिकटों में स्वरूपित आउटपुट को आंतरिक रूप से भी साझा करने से पहले पुनः संपादित करें। फ़ॉर्मेटर आपके लिए रहस्य नहीं हटाता है.
संरचना के लिए JSON फॉर्मेटर, टोकन दावों के लिए JWT डिकोडर और JSON को गंदे लॉग से बाहर निकालने के लिए रेगेक्स टेस्टर के साथ, आप उन्मत्त कॉपी-पेस्ट सत्रों को एक छोटी, दोहराने योग्य पाइपलाइन में बदल देते हैं। अगली बार जब उत्पादन एक अपारदर्शी बॉडी के साथ 500 लौटाता है, तो आप व्हॉट्सएप से लड़ने में घंटों के बजाय आपत्तिजनक क्षेत्र का पता लगाने में कुछ मिनट बिताएंगे।