विभिन्न एपीआई संस्करणों का समर्थन कैसे करें


15

मैं एक रेस्ट एपीआई लिख रहा हूं और सोच रहा हूं कि विभिन्न संस्करणों का समर्थन करने के लिए सबसे अच्छा कैसे हो। इसका मतलब यह नहीं है कि URI को V2 या V3 के रूप में कैसे परिभाषित किया जाए, बल्कि इसे दिए गए कोड को कैसे संरचित किया जाए:

  • एक ही समय में कई संस्करणों का समर्थन करें, जैसे। V1 और V2 और V3 URI को एक ही समय में रहना चाहिए। जब वी 4 आता है तो मैं किसी भी एक समय में सहायता राशि को बाधित करने के लिए वी 1 को रिटायर करूंगा।
  • जितना संभव हो उतना कोड दोहराव से बचें
  • एक संस्करण में गैर-ब्रेकिंग परिवर्तन जोड़ना आसान है, बिना अन्य संस्करणों पर प्रभाव डाले

ऐसा लगता है कि कुछ दृष्टिकोण हैं जिन्हें लिया जा सकता है:

  • विभिन्न संस्करणों के लिए एक शाखा के साथ (और पुराने संस्करणों को अनिवार्य रूप से उस पर कोई नया विकास कार्य नहीं करने के लिए), संस्करणों को नियंत्रित करने के लिए Git का उपयोग करें। इसका मतलब कोई कोड दोहराव नहीं होगा क्योंकि केवल नवीनतम संस्करण कोड में है, लेकिन पिछले संस्करणों को DB के नए संस्करण के साथ काम करना होगा जब तक कि वे सेवानिवृत्त नहीं हो जाते।

  • डुप्लिकेट कोड ताकि प्रत्येक संस्करण को एक ही एप्लिकेशन में संभाला जाए और एक पूरी तरह से अलग कोड पाथ हो, लेकिन इसका अर्थ बहुत अधिक दोहराव होगा

  • संस्करणों में बहुत सारे कोड का पुन: उपयोग करें, लेकिन इससे एक संस्करण को बनाए रखना कठिन हो जाएगा क्योंकि पिछले संस्करण को प्रभावित करने की अधिक संभावना है

क्या इस समस्या से निपटने के लिए कोई सर्वोत्तम अभ्यास है क्योंकि सभी विकल्पों में अपनी समस्याएं हैं?


1
यदि आप URL में संस्करण संख्या निर्दिष्ट करते हैं (जैसे myserver / api / 3.1.4 / user / get), तो आप संस्करण संख्या को उस फ़ंक्शन में पास कर सकते हैं जिसे आप कॉल करते हैं ताकि आप बहुत अधिक कोड साझा किए बिना संस्करण-विशिष्ट व्यवहार को स्थानीय कर सकें।
जेम्स मैकलियोड

जवाबों:


5

यह करो:

संस्करणों में बहुत सारे कोड का पुन: उपयोग करें, लेकिन इससे एक संस्करण को बनाए रखना कठिन हो जाएगा क्योंकि पिछले संस्करण को प्रभावित करने की अधिक संभावना है

लेकिन पिछले संस्करणों को तोड़ना नहीं है।

आपके पास ऐसे परीक्षण होने चाहिए जो यह सत्यापित करें कि सभी समर्थित संस्करण सही तरीके से काम कर रहे हैं। यदि आपके पास वे परीक्षण नहीं हैं, तो आपको पहले किसी भी कोड को बदलने के लिए उन्हें बनाना चाहिए।


2

पुराने एपीआई संस्करणों का समर्थन करने और बनाए रखने के लिए जीआईटी रिलीज शाखाओं (या प्रत्येक संस्करण को एक अलग भंडार में) का उपयोग करने का एक संयोजन है और संभवत: कुछ पुन: प्रयोज्य कोड हैं जो एक कॉमन्स लाइब्रेरी की तरह एक निर्भरता के रूप में साझा किए जा सकते हैं, सबसे अधिक संभावना है जाना। इसलिए प्रत्येक एपीआई संस्करण एक अलग रूप से तैनात करने योग्य विरूपण साक्ष्य होगा। यह लचीलेपन की अनुमति देता है ताकि, उदाहरण के लिए, एपीआई वी 1 कॉमन्स वी 1 पर निर्भर कर सकता है, जबकि एपीआई वी 2, वी 3, वी 4 कॉमन्स वी 2 पर निर्भर कर सकते हैं। यह एक विकास के दृष्टिकोण से सबसे आसान और सबसे साफ होगा क्योंकि आपका कोड आधार प्रत्येक नए संस्करण के साथ गुणा नहीं करता है, इसके बजाय प्रत्येक संस्करण को स्वयं के प्रोजेक्ट / कोड आधार में अलग किया जाता है और केवल स्वयं के साथ संबंध है।

अलग-अलग कलाकृतियों को तैनात करने का एक और कारण यह है कि सुरक्षा तंत्र की तरह क्रॉस कटिंग चिंताएं हो सकती हैं, या आपके निर्भरता इंजेक्शन ढांचे की तरह फ्रेमवर्क / लाइब्रेरी जो एपीआई के नए संस्करणों में बदल सकते हैं और पुराने एपीआई का समर्थन करने में बहुत कठिनाई पैदा करेंगे यदि वे सभी एक ही कोड बेस में रहते हैं (और रनटाइम पर क्लास लोडर, अगर यह जावा है)।

प्रत्येक दृष्टिकोण, चाहे इसकी शाखा प्रति संस्करण या अखंड डुप्लिकेट कोड आधार, हमेशा एक सामान्य एकीकरण बिंदु (जैसे डीबी, या एक वितरित कैश स्कीमा) के मुद्दे को बदलने की आवश्यकता होती है। पुराने संस्करण APIs को उन परिवर्तनों के साथ काम करने के लिए किसी प्रकार के रखरखाव की आवश्यकता हो सकती है, या संगतता की सहायता के लिए कुछ अन्य टूल (जैसे डेटाबेस दृश्य) की शुरूआत। यह आपके परिवर्तनों की प्रकृति के आधार पर एक अपरिहार्य कठिनाई हो सकती है।


0

मुझे नहीं पता कि आपके एपीआई संस्करणों के परिणाम कितने अलग हैं, लेकिन आपके बीच में एक संगतता परत हो सकती है जो संस्करणों के बीच टॉगल कर सकती है और अंतराल या अनुवाद डेटा भर सकती है।

कहा जा रहा है - यह आम तौर पर एक से एक काम नहीं करता है - इसलिए एक स्विच या राज्य मशीन प्रकार के डिजाइन ने मुझे इस समस्या से मदद की है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.