API Gateway के साथ API में ब्रेकिंग चेंजेस को कैसे रोकें
September 11, 2023
जब आप API विकसित करते हैं, तो कभी-कभी ऐसे परिवर्तन करते हैं जो वर्तमान API उपभोक्ताओं के लिए समस्याएं पैदा कर सकते हैं। अपने API को विकसित करना वर्तमान उपयोगकर्ताओं को प्रभावित किए बिना आवश्यक है, अन्यथा वे आपके प्रस्ताव पर भरोसा खो सकते हैं। इन समस्याओं से पूरी तरह बचना असंभव है, लेकिन आप प्रभाव को कम कर सकते हैं या कुछ ब्रेकिंग चेंजेस को होने से पहले पकड़ सकते हैं। ब्रेकिंग चेंजेस को विकास चरण के दौरान पहचाना जाना चाहिए, और यदि वे होते हैं, तो API गेटवे को उन्हें संभालना चाहिए ताकि क्लाइंट एप्लिकेशन प्रभावित न हों। इस लेख में, हम API ब्रेकिंग चेंजेस को रोकने के लिए कुछ सर्वोत्तम प्रथाओं और रणनीतियों का पता लगाएंगे और APISIX API गेटवे का उपयोग करके उन्हें कैसे संभालें।
API ब्रेकिंग चेंजेस क्या हैं?
सॉफ्टवेयर उत्पाद लगातार विकसित होते हैं, और उनके API भी इससे अछूते नहीं हैं। ये API आपके सिस्टम के साथ बाहरी API उपभोक्ताओं के जुड़ाव का प्राथमिक इंटरफेस होते हैं, जो किसी भी उत्पाद परिवर्तन को दर्शाते हैं। इन API परिवर्तनों के विभिन्न कारण हो सकते हैं, जैसे तकनीकी सुधार, व्यावसायिक दिशा में बदलाव, महत्वपूर्ण बग समाधान, और भी बहुत कुछ। सरल शब्दों में, एक ब्रेकिंग चेंज तब होता है जब आप अपने API को बदलते हैं और यह उसका उपयोग करने वाले क्लाइंट एप्लिकेशन के लिए समस्याएं पैदा कर सकता है। इनमें से कुछ परिवर्तनों को पहचानना दूसरों की तुलना में आसान होता है। यहां ब्रेकिंग चेंजेस के कुछ उदाहरण दिए गए हैं:
- एक एंडपॉइंट को हटाना: यदि आपके पास
GET /usersएंडपॉइंट है और आप इसे हटाने का निर्णय लेते हैं, तो इसे एक्सेस करने का प्रयास करने वाला कोई भी क्लाइंट त्रुटियां प्राप्त करेगा। - एंडपॉइंट का URL बदलना: यदि आप किसी एंडपॉइंट का URL
GET /usersसेGET /membersमें बदलते हैं, तो पुराने URL का उपयोग करने वाला कोई भी क्लाइंट समस्याओं का सामना करेगा। - रिक्वेस्ट पेलोड को संशोधित करना: यदि कोई एंडपॉइंट रिक्वेस्ट में विशिष्ट डेटा की अपेक्षा करता है, जैसे
POST /users{ "name": "John" }की अपेक्षा करता है, लेकिन आप आवश्यकता को{ "firstName": "John" }में बदल देते हैं, तो यह पुराने फॉर्मेट को भेजने वाले क्लाइंट्स को बाधित करेगा। - प्रतिक्रिया में फील्ड्स को हटाना या नाम बदलना: यदि क्लाइंट्स API प्रतिक्रिया में विशिष्ट फील्ड्स की अपेक्षा करते हैं, तो उन्हें हटाने या नाम बदलने से उन क्लाइंट्स में खराबी आ सकती है। उदाहरण के लिए,
{ "id": 1, "name": "John" }को{ "id": 1, "fullName": "John Doe" }में बदलना। - डेटा प्रकार बदलना: यदि किसी API फील्ड को स्ट्रिंग होने की अपेक्षा है और आप इसे इंटीजर या किसी अन्य प्रकार में बदल देते हैं, तो यह क्लाइंट्स को तोड़ सकता है। उदाहरण के लिए,
"age": "25"को"age": 25में बदलना। - प्रमाणीकरण तंत्र बदलना: यदि आप बेसिक प्रमाणीकरण से टोकन-आधारित प्रमाणीकरण में बदलते हैं और उचित संक्रमण नहीं करते हैं, तो मौजूदा क्लाइंट्स प्रमाणीकरण त्रुटियों का सामना करेंगे।
- अनिवार्य फील्ड्स को पेश करना: यदि आपके पास
POST /usersजैसा एंडपॉइंट है जो वैकल्पिक फील्ड्स लेता है, और आप अचानक उनमें से एक फील्ड को अनिवार्य बना देते हैं, तो मौजूदा क्लाइंट्स जो उस फील्ड को नहीं भेज रहे हैं, समस्याओं का सामना करेंगे। - त्रुटि प्रारूप बदलना: यदि क्लाइंट्स विशिष्ट त्रुटि प्रारूपों को समझने के लिए प्रोग्राम किए गए हैं, तो उन प्रारूपों को बदलने से क्लाइंट साइड पर अनुचित त्रुटि प्रबंधन हो सकता है।
- HTTP स्टेटस कोड संशोधित करना: कुछ ऑपरेशन्स के लिए स्टेटस कोड बदलना, जैसे संसाधन निर्माण के लिए
201 Createdके बजाय200 OKवापस करना, क्लाइंट्स को गुमराह कर सकता है। - पुराने API संस्करणों के समर्थन को हटाना: यदि आप उचित संक्रमण अवधि के बिना पुराने संस्करणों के समर्थन को समाप्त कर देते हैं, तो उन पुराने संस्करणों पर निर्भर क्लाइंट्स टूट जाएंगे।
API में हर परिवर्तन क्लाइंट एप्लिकेशन को तोड़ने की क्षमता रखता है। यदि आप API गेटवे का उपयोग सभी बैकएंड API के लिए एक फ्रंट डोर के रूप में करते हैं, तो गेटवे जानता है कि रूट कॉन्फ़िगरेशन में परिभाषित नियमों के आधार पर अनुरोध को कहां भेजना है और यह ब्रेकिंग API परिवर्तनों को संभालने के लिए सही जगह है। आइए देखें कि हम APISIX का उपयोग करके कुछ API परिवर्तनों को कैसे पहचान सकते हैं।
अनुरोध और प्रतिक्रिया स्कीमा सत्यापन
अपने रूट्स के लिए सख्त स्कीमा परिभाषित करने से आप यह सुनिश्चित कर सकते हैं कि अनुरोध और प्रतिक्रिया संरचनाएं अपेक्षित हैं। आने वाले अनुरोधों को सत्यापित करने के लिए request-validation प्लगइन का उपयोग करें और कुछ शर्तों के आधार पर API प्रतिक्रिया को फिर से लिखने के लिए response-rewrite प्लगइन का उपयोग करें।
लॉगिंग
APISIX विभिन्न लॉगिंग प्लगइन्स का समर्थन करता है, जैसे http-logger, elasticsearch-logger, file-logger, और भी बहुत कुछ। API अनुरोध और प्रतिक्रिया डेटा को स्टोर करने के लिए एक लॉगर सेट करें और अनुरोध/प्रतिक्रिया हेडर्स, पेलोड संरचनाओं, या किसी अन्य असामान्य पैटर्न में परिवर्तनों का पता लगाने के लिए लॉग्स का नियमित रूप से विश्लेषण करें।
रूट और अपस्ट्रीम मॉनिटरिंग
गेटवे से गुजरने वाले रूट्स की निगरानी करें। यदि पहले उपलब्ध रूट अचानक 404 त्रुटियां वापस करने लगता है, तो यह एक संकेत हो सकता है कि API में परिवर्तन हुआ है या एक एंडपॉइंट को हटा दिया गया है। API हेल्थ चेक सुविधा को सक्षम करें ताकि अपस्ट्रीम नोड्स के समग्र स्वास्थ्य की लगातार निगरानी की जा सके। यदि कोई नोड विफल होने लगता है, सामान्य से तेज या धीमी प्रतिक्रिया देता है, तो यह अंतर्निहित बैकएंड सेवा के प्रसंस्करण में परिवर्तन का संकेत हो सकता है। Prometheus जैसे मॉनिटरिंग टूल्स के साथ APISIX को prometheus प्लगइन का उपयोग करके एकीकृत करें। मेट्रिक्स के आधार पर अलर्ट सेट करें, जैसे 4xx या 5xx त्रुटियों की बढ़ती दर, जो आपके API में ब्रेकिंग चेंजेस का संकेत हो सकती है।
संस्करण का उपयोग करें
API संस्करण एक API में परिवर्तनों को प्रबंधित करने और यह सुनिश्चित करने का अभ्यास है कि ये परिवर्तन API उपभोक्ता एप्लिकेशन को बाधित किए बिना किए जाएं। APISIX के साथ संस्करण सेट करने के विभिन्न तरीके हैं, जैसे URI पथ, क्वेरी पैरामीटर्स, हेडर्स, या कंटेंट प्रकार चुनना। उदाहरण के लिए, आपके पास /v1/users या /v2/users जैसे वेब पते हो सकते हैं जो आपके API के संस्करण को दर्शाते हैं। इन संस्करणों को होने से, आप अपने API के एक से अधिक विकल्प प्रदान कर सकते हैं, API उपभोक्ताओं को अपनी गति से नवीनतम संस्करण में अपग्रेड करने का निर्णय लेने की अनुमति देते हैं। APISIX नए संस्करण में समस्याओं को संबोधित करने तक सभी ट्रैफ़िक को पुराने, स्थिर संस्करण पर वापस रीडायरेक्ट कर सकता है, जिससे आपके API पिछड़े संगत बन जाते हैं। यदि आप नए संस्करण में समस्याओं का पता लगाते हैं, तो APISIX का उपयोग करके पुरानी संगतता को बनाए रखते हुए नए परिवर्तनों को रोल आउट करें, traffic-split प्लगइन त्वरित रोलबैक की अनुमति देता है।
अप्रचलन सूचनाएं
सुविधाओं को हटाने या बदलने से पहले, उन्हें अप्रचलित के रूप में चिह्नित करें, जिससे उपभोक्ताओं को अनुकूलन के लिए पर्याप्त समय मिल सके। APISIX की मदद से, हम रूट को इसके भविष्य के अप्रचलन और इसके प्रतिस्थापन के बारे में संचार करने के लिए कॉन्फ़िगर कर सकते हैं। इसके लिए, APISIX response-rewrite प्लगइन प्रदान करता है।
संस्करण नियंत्रण के साथ एकीकरण
हालांकि आप चाह सकते हैं कि पुल रिक्वेस्ट रिव्यूअर्स किसी भी ब्रेकिंग चेंजेस को पहचान लें, केवल इस विधि पर भरोसा करना निश्चित नहीं है और अंततः विफलता का कारण बन सकता है। यदि आपके पास अपने API के लिए OpenAPI/Swagger दस्तावेज़ीकरण है, तो इन्हें संस्करण नियंत्रित किया जा सकता है और एक CI पाइपलाइन में शामिल किया जा सकता है। APISIX API स्पेसिफिकेशन परिवर्तनों के लिए Git जैसे संस्करण नियंत्रण प्रणालियों के साथ सीधे एकीकरण का समर्थन नहीं करता है। हालांकि, आप APISIX के बाहर एक प्रक्रिया सेट कर सकते हैं। Oasdiff या Bump जैसे टूल API स्पेक्स में परिवर्तनों की पहचान कर सकते हैं, और एक CI पाइपलाइन ट्रिगर कर सकते हैं (जोड़ें GitHub Action) जो APISIX में रूट एंडपॉइंट्स के खिलाफ टेस्ट चलाता है ताकि यह सुनिश्चित किया जा सके कि कोई ब्रेकिंग चेंजेस पेश नहीं किए गए हैं।

परिवर्तनों का पता लगाने के अन्य तरीके
Postman में एक टेम्पलेट है जो आपके API के वर्तमान संस्करण में ब्रेकिंग चेंजेस की स्वचालित रूप से जांच करता है और इस लेख में बताता है कि यह कैसे काम करता है। आप डिटेक्टर को CI पाइपलाइन में एक अतिरिक्त चरण के रूप में जोड़ सकते हैं। हर बार जब आपकी पाइपलाइन चलती है, तो ब्रेकिंग चेंज डिटेक्टर वर्तमान API स्पेक को पिछले एक के खिलाफ विश्लेषण करेगा और किसी भी अंतर के बारे में आपको सूचित करेगा। आपके विकास स्टैक के आधार पर, OpenAPI स्पेसिफिकेशन की तुलना करने के लिए अन्य लाइब्रेरीज़ हैं। यह लेख अच्छी तरह से समझाता है कि नए परिवर्तनों को प्रोडक्शन में ले जाने से पहले उन्हें परीक्षण किए गए डिप्लॉयमेंट स्ट्रैटेजीज़ का उपयोग करके व्यवहार में कैसे पकड़ा जाए।
सारांश
API ब्रेकिंग चेंजेस का पता लगाना और रोकना API उपभोक्ताओं के साथ विश्वास बनाए रखने और आपकी सेवा की सफलता सुनिश्चित करने के लिए महत्वपूर्ण है। APISIX की क्षमताओं जैसे अनुरोध सत्यापन, संस्करण, लॉगिंग, मॉनिटरिंग, और अलर्टिंग को स्वचालित API कॉन्ट्रैक्ट टेस्टिंग जैसी तकनीकों के साथ एकीकृत करके, आप यह सुनिश्चित कर सकते हैं कि आपके API आपके क्लाइंट्स को नकारात्मक रूप से प्रभावित किए बिना विकसित होते हैं।