मैं रीस्ट एपीआई के लिए संस्करण रणनीतियों पर पढ़ रहा हूं, और उनमें से कुछ भी पता नहीं दिखाई देता है कि आप अंतर्निहित कोडबेस का प्रबंधन कैसे करते हैं।
मान लें कि हम API में परिवर्तन करने का एक गुच्छा बना रहे हैं - उदाहरण के लिए, हमारे ग्राहक संसाधन को बदलना ताकि यह एक फ़ील्ड के बजाय अलग forename
और surname
फ़ील्ड लौटाए name
। (इस उदाहरण के लिए, मैं URL संस्करण समाधान का उपयोग करूंगा क्योंकि इसमें शामिल अवधारणाओं को समझना आसान है, लेकिन यह प्रश्न सामग्री बातचीत या कस्टम HTTP हेडर पर समान रूप से लागू है)
अब हमारे पास एक समापन बिंदु है http://api.mycompany.com/v1/customers/{id}
, और एक और असंगत समापन बिंदु है http://api.mycompany.com/v2/customers/{id}
। हम अभी भी v1 एपीआई में बगफिक्स और सुरक्षा अपडेट जारी कर रहे हैं, लेकिन नई सुविधा विकास अब सभी v2 पर ध्यान केंद्रित कर रहा है। हम अपने एपीआई सर्वर में परिवर्तन कैसे लिखते हैं, परीक्षण और तैनाती करते हैं? मैं कम से कम दो समाधान देख सकता हूं:
V1 कोडबेस के लिए स्रोत नियंत्रण शाखा / टैग का उपयोग करें। v1 और v2 विकसित किए गए हैं, और स्वतंत्र रूप से तैनात किए गए हैं, संशोधन नियंत्रण मर्ज के रूप में दोनों संस्करणों के लिए एक ही बगफिक्स को लागू करने के लिए आवश्यक है - एक समान नए संस्करण को विकसित करने के दौरान आप मूल एप्लिकेशन के लिए कोडबेस का प्रबंधन कैसे करेंगे, जबकि पिछले संस्करण का समर्थन करते हुए।
कोडबेस को एपीआई संस्करणों से ही अवगत कराएं, इसलिए आप एक सिंगल कोडबेस के साथ समाप्त होते हैं जिसमें v1 ग्राहक प्रतिनिधित्व और वी 2 ग्राहक प्रतिनिधित्व शामिल है। वर्जनिंग को अपने सॉल्यूशन आर्किटेक्चर के हिस्से के रूप में तैनाती के मुद्दे के बजाय समझो - शायद नाम स्थान के कुछ संयोजन का उपयोग करना और सुनिश्चित करने के लिए राउटिंग सही संस्करण द्वारा नियंत्रित किया जाता है।
शाखा मॉडल का स्पष्ट लाभ यह है कि पुराने एपीआई संस्करणों को हटाने के लिए यह तुच्छ है - बस उपयुक्त शाखा / टैग को तैनात करना बंद करें - लेकिन यदि आप कई संस्करण चला रहे हैं, तो आप वास्तव में जटिल शाखा संरचना और तैनाती पाइपलाइन के साथ समाप्त हो सकते हैं। "यूनिफ़ाइड कोडबेस" मॉडल इस समस्या से बचा जाता है, लेकिन (मुझे लगता है?) कोडबेस से हटाए गए संसाधनों और समापन बिंदुओं को हटाने के लिए बहुत कठिन बना देगा जब उन्हें अब आवश्यकता नहीं होगी। मुझे पता है कि यह संभवतः व्यक्तिपरक है क्योंकि एक सरल सही उत्तर होने की संभावना नहीं है, लेकिन मैं यह समझने के लिए उत्सुक हूं कि विभिन्न संस्करणों में जटिल एपीआई बनाए रखने वाले संगठन इस समस्या को कैसे हल कर रहे हैं।