OpenAPI Diff
एक OpenAPI diff API स्पेसिफिकेशन के दो संस्करणों — पुराने अनुबंध और नए अनुबंध — की तुलना करता है और बताता है कि वास्तव में क्या बदला: हटाए गए एंडपॉइंट, अनिवार्य हो गए पैरामीटर, प्रकार बदल चुके फ़ील्ड, गायब हो गए enum मान। नीचे दोनों स्पेसिफिकेशन लोड या पेस्ट करें और यह पेज हर बदलाव को ब्रेकिंग या नॉन-ब्रेकिंग के रूप में वर्गीकृत करता है, ताकि आप किसी वेंडर अपग्रेड, या अपने ही रिलीज़, के प्रोडक्शन तक पहुँचने से पहले उसका आकलन कर सकें। दोनों फ़ाइलें इस पेज में, आपके डिवाइस पर पार्स होती हैं — कुछ भी अपलोड नहीं होता, जो मायने रखता है क्योंकि स्पेसिफिकेशन उन आंतरिक एंडपॉइंट का वर्णन करती हैं जिन्हें आप किसी और के सर्वर पर नहीं रखना चाहेंगे। इस शब्दावली में नए हैं? साथी लेख, ब्रेकिंग API बदलाव, समझाए गए, यहाँ इस्तेमाल हर शब्द को परिभाषित करता है।
अंतिम अपडेट:
पुरानी स्पेसिफिकेशन (वह अनुबंध जो क्लाइंट आज उपयोग करते हैं)
इस पैनल में कहीं भी फ़ाइल छोड़ें, एक चुनें, या टेक्स्ट पेस्ट करें। पार्सिंग स्थानीय रूप से होती है; कुछ भी इस डिवाइस से बाहर नहीं जाता।
नई स्पेसिफिकेशन (उम्मीदवार अनुबंध)
इस पैनल में कहीं भी फ़ाइल छोड़ें, एक चुनें, या टेक्स्ट पेस्ट करें। पार्सिंग स्थानीय रूप से होती है; कुछ भी इस डिवाइस से बाहर नहीं जाता।
तुलना परिणाम
सारांश क्लिपबोर्ड पर कॉपी हो गया।
यह differ क्या जाँचता है — और ब्रेकिंग का वास्तव में क्या मतलब है
कोई बदलाव ब्रेकिंग तब होता है जब पुरानी स्पेसिफिकेशन के अनुसार सही ढंग से लिखा गया क्लाइंट, अपने कोड की एक भी पंक्ति बदले बिना, नई स्पेसिफिकेशन के सामने विफल हो सकता है। यही परिभाषा इस पेज के हर निर्णय को चलाती है। किसी पाथ या ऑपरेशन को हटाना ब्रेकिंग है क्योंकि मौजूदा कॉल्स के पास जाने की कोई जगह नहीं रहती। किसी रिस्पॉन्स स्थिति — सबसे बढ़कर 2xx — को हटाना ब्रेकिंग है क्योंकि क्लाइंट की त्रुटि-हैंडलिंग पुराने सेट के आसपास लिखी गई थी। कोई अनिवार्य पैरामीटर या अनिवार्य अनुरोध गुण जोड़ना ब्रेकिंग है क्योंकि कल का वैध अनुरोध अचानक अस्वीकार हो जाता है। किसी फ़ील्ड का प्रकार या प्रारूप बदलना ब्रेकिंग है क्योंकि पार्सर, वैलिडेटर और जनरेट किए गए SDK सभी घोषित प्रकार पर आधारित होते हैं। किसी enum मान को हटाना ब्रेकिंग है क्योंकि क्लाइंट उसे अब भी भेज सकता है, या ऐसा संग्रहीत डेटा रख सकता है जिसकी वह अब व्याख्या नहीं कर सकता। बाकी सब — नया एंडपॉइंट, वैकल्पिक पैरामीटर, नया रिस्पॉन्स फ़ील्ड, नया enum मान, नया स्थिति कोड — नॉन-ब्रेकिंग के रूप में रिपोर्ट होता है: पुराने क्लाइंट काम करते रहते हैं, भले ही वे नई क्षमता का उपयोग अभी न कर सकें।
तुलना पाठ्य नहीं, संरचनात्मक है। तुलना से पहले दोनों दस्तावेज़ एक ही मॉडल में सामान्यीकृत होते हैं: हर पाथ और ऑपरेशन, नाम और स्थान के आधार पर अनुक्रमित उनके पैरामीटर, उनका अनुरोध बॉडी और हर रिस्पॉन्स एक स्कीमा हस्ताक्षर में समेटे जाते हैं — प्रकारों, प्रारूपों, गुण नामों, अनिवार्य सूचियों और enum मानों का एक निर्धारणात्मक सारांश, जो पुनरावर्ती रूप से बनाया जाता है और जिसमें स्थानीय $ref संदर्भ हल किए जाते हैं। यही कारण है कि कुंजियों को पुनः क्रमबद्ध करने, रिक्त स्थान को पुनः प्रारूपित करने या हर विवरण को फिर से लिखने से खाली diff बनता है: इनमें से कुछ भी अनुबंध नहीं बदलता। और यही कारण है कि संदर्भित स्कीमा के तीन स्तर गहराई में दबा बदलाव भी मिल जाता है — हस्ताक्षर संदर्भ के नाम की तुलना करने के बजाय उसे विस्तारित करता है।
दो इनपुट आकार स्वीकार किए जाते हैं क्योंकि पारिस्थितिकी तंत्र दोनों प्रकाशित करता है: पहले JSON आज़माया जाता है, और जब वह विफल होता है तो टेक्स्ट को YAML के रूप में पार्स किया जाता है, वह प्रारूप जिसका उपयोग अधिकांश हाथ से लिखे गए OpenAPI दस्तावेज़ करते हैं। Swagger 2.0 दस्तावेज़ भी काम करते हैं, उनके in: body पैरामीटर और प्रति-रिस्पॉन्स स्कीमा समेत। जानबूझकर कोई लाइव फ़ेचिंग नहीं है और कोई अपलोड नहीं: दस्तावेज़ पेस्ट करें या फ़ाइलें छोड़ें, बिल्कुल वैसे ही जैसे आप HAR कैप्चर के साथ करते, और तुलना तब चलती है जब आप बटन दबाते हैं — हर कीस्ट्रोक पर नहीं — इसलिए दो बड़े पेस्ट किए गए स्पेसिफिकेशन भी प्रतिक्रियाशील बने रहते हैं।
परिणाम को सजावट के रूप में नहीं, रिलीज़ गेट के रूप में उपयोग करें। समीक्षा में, ब्रेकिंग सूची ही एजेंडा है: हर प्रविष्टि को या तो सुधार, संस्करण वृद्धि, पदावनति अवधि, या यह लिखित निर्णय चाहिए कि ब्रेक जानबूझकर किया गया है और सूचित किया गया है। नॉन-ब्रेकिंग सूची चेंजलॉग का मसौदा है। Diff को JSON के रूप में निर्यात करने से आप उस निर्णय को रिलीज़ के बगल में संग्रहीत कर सकते हैं, और कॉपी करने योग्य सारांश सीधे पुल अनुरोध में चला जाता है — वही अनुशासन जो आप webhook अनुबंध बदलाव पर लागू करेंगे, जहाँ चुपचाप बदला गया पेलोड हर सब्सक्राइबर को एक साथ तोड़ देता है।
ईमानदार सीमाएँ, स्पष्ट रूप से कही गईं। यह differ घोषित अनुबंध की तुलना करता है: यह वह व्यवहार नहीं देख सकता जो स्पेसिफिकेशन घोषित नहीं करती, जैसे कोई फ़ील्ड जो अपना प्रकार रखता है लेकिन उसका अर्थ बदल जाता है, कोई नया व्यावसायिक नियम, सख्त दर सीमाएँ, या कोई त्रुटि संदेश जिसे क्लाइंट (अविवेकपूर्ण ढंग से) पार्स कर रहे थे। यह स्थानीय संदर्भों का पालन करता है और सीमित गहराई तक स्कीमा की तुलना करता है, इसलिए रोगात्मक रूप से गहराई में नेस्ट किए गए या परस्पर पुनरावर्ती स्कीमा हमेशा के लिए विस्तारित होने के बजाय सारांशित होते हैं। और शून्य ब्रेकिंग बदलावों वाला diff यह वादा नहीं है कि अपग्रेड सुरक्षित है — यह इस बात का प्रमाण है कि दस्तावेज़ीकृत अनुबंध बना रहा, जो बिल्कुल वही प्रमाण है जो डिप्लॉय करने से पहले होना चाहिए।
वह वर्गीकरण तालिका जिसके आधार पर यह पेज मूल्यांकन करता है
| हटाया गया पाथ या ऑपरेशन | ब्रेकिंग। जो एंडपॉइंट अब मौजूद नहीं है, उसके लिए कॉल्स सीधे विफल हो जाती हैं; किसी पुराने क्लाइंट को उसके सामने काम करते रहने का कोई संगत तरीका नहीं है। |
| हटाई गई रिस्पॉन्स स्थिति | ब्रेकिंग। क्लाइंट की पुनः प्रयास, त्रुटि-हैंडलिंग और निगरानी लॉजिक घोषित स्थिति सेट के आधार पर लिखी जाती है; 2xx खोना इसका सबसे गंभीर रूप है। |
| पैरामीटर अनिवार्य हो गया / अनिवार्य फ़ील्ड जोड़ा गया | ब्रेकिंग। पुरानी स्पेसिफिकेशन के तहत वैध अनुरोध नई स्पेसिफिकेशन द्वारा अस्वीकार कर दिए जाते हैं, इसलिए हर मौजूदा क्लाइंट को एंडपॉइंट को कॉल करने से पहले बदलना होगा। |
| प्रकार या प्रारूप बदला गया | ब्रेकिंग। पार्सर, वैलिडेटर और जनरेट किए गए SDK घोषित प्रकार से बनाए जाते हैं; integer से string (या int32 से int64) में बदलना सख्त क्लाइंट को तोड़ देता है, भले ही वायर मान समान दिखें। |
| गुण हटाया गया (अनुरोध या रिस्पॉन्स) | ब्रेकिंग। क्लाइंट जो अनुरोध गुण भेजते हैं वह अनदेखा या अस्वीकार हो जाता है; क्लाइंट जो रिस्पॉन्स गुण पढ़ते हैं वह उनके कोड में null या गायब हो जाता है। |
| Enum मान हटाया गया | ब्रेकिंग। क्लाइंट हटाए गए मान को अब भी भेज सकते हैं, या उसका उपयोग करने वाला संग्रहीत डेटा रख सकते हैं। जोड़े गए enum मान नॉन-ब्रेकिंग होते हैं और अलग से रिपोर्ट होते हैं। |
| जोड़ | नॉन-ब्रेकिंग। नए पाथ, ऑपरेशन, वैकल्पिक पैरामीटर, वैकल्पिक अनुरोध गुण, रिस्पॉन्स गुण, रिस्पॉन्स स्थितियाँ और enum मान पहले से वैध इंटरैक्शन को कभी अमान्य नहीं करते। |
अक्सर पूछे जाने वाले प्रश्न
क्या मेरी स्पेसिफिकेशन फ़ाइलें कहीं अपलोड होती हैं?
नहीं। दोनों दस्तावेज़ इस पेज में, आपके डिवाइस पर पार्स और तुलना किए जाते हैं; उनकी तुलना करने से कोई नेटवर्क अनुरोध नहीं होता और कुछ भी संग्रहीत नहीं होता। यह एक जानबूझकर बनाया गया नियम है: स्पेसिफिकेशन आपके API का नक्शा है — आंतरिक और अदस्तावेज़ीकृत एंडपॉइंट समेत — और जो टूल तुलना करने के लिए उसे अपलोड करने को कहेगा, वह ठीक वही नक्शा इकट्ठा कर रहा होगा जिसे आपको निजी रखना चाहिए।
कौन से प्रारूप स्वीकार किए जाते हैं?
OpenAPI 3.x और Swagger 2.0, JSON या YAML के रूप में। टेक्स्ट को पहले JSON के रूप में आज़माया जाता है और विफल होने पर YAML के रूप में पार्स किया जाता है। किसी दस्तावेज़ को स्पेसिफिकेशन के रूप में पहचाने जाने के लिए उसमें paths ऑब्जेक्ट होना चाहिए; बाकी सब कुछ चुपचाप खाली diff देने के बजाय "स्पेसिफिकेशन नहीं है" के रूप में रिपोर्ट होता है।
यहाँ ब्रेकिंग बदलाव किसे माना जाता है?
कोई भी चीज़ जो सही ढंग से लिखे गए पुराने क्लाइंट को विफल कर सकती है: हटाए गए पाथ, ऑपरेशन या रिस्पॉन्स स्थितियाँ; अनिवार्य हो गए पैरामीटर या अनुरोध गुण; प्रकार या प्रारूप के बदलाव; हटाए गए अनुरोध या रिस्पॉन्स गुण; और हटाए गए enum मान। कोई भी वैकल्पिक चीज़ जोड़ना नॉन-ब्रेकिंग है। विवरण, शीर्षक और प्रारूपण के बदलाव पूरी तरह अनदेखे किए जाते हैं — वे अनुबंध बदलाव नहीं हैं।
संदर्भित स्कीमा कैसे संभाले जाते हैं?
#/components/schemas/Pet जैसे स्थानीय संदर्भ (या Swagger 2.0 में #/definitions/Pet) हस्ताक्षर बनाते समय हल किए जाते हैं, इसलिए साझा स्कीमा के अंदर का बदलाव उसका उपयोग करने वाले हर ऑपरेशन पर रिपोर्ट होता है। हल करना गहराई-सीमित और चक्र-सुरक्षित है, इसलिए पुनरावर्ती स्कीमा तुलना को रोक नहीं सकते।
क्या मैं परिणाम संग्रहीत या साझा कर सकता हूँ?
हाँ। डाउनलोड बटन पूरे diff को JSON के रूप में निर्यात करता है — सारांश गणनाओं के साथ हर बदलाव, उसकी गंभीरता, प्रकार, पाथ, विधि और संरचित विवरण समेत — और कॉपी बटन पुल अनुरोध या रिलीज़ नोट के लिए सादा-पाठ सारांश बनाता है। दोनों उसी तुलना से स्थानीय रूप से बनाए जाते हैं जो आपने अभी चलाई है।