2012-01-16 14 views
8

वर्तमान में मेरे पास एक डब्ल्यूसीएफ वेब एपीआई है जिसे मैंने दो संस्करणों में विभाजित किया है। पहला संस्करण api.mysite.com पर चलता है। दूसरा वर्तमान में उत्पादन के लिए प्रकाशित नहीं है।डब्ल्यूसीएफ वेब एपीआई संस्करण का सबसे अच्छा तरीका क्या है?

मैं दूसरी एपीआई प्रकाशित करने का एक तरीका चाहूंगा जैसे कि पहले संस्करण के लिए अनुरोध गैर-बाधित हैं। मेरे विचार x-api-version शीर्षलेख जोड़ना होगा और आंतरिक रूप से निर्दिष्ट API को अनुरोध रूट करना होगा। अगर कोई शीर्ष लेख है, तो संस्करण 1. मैं संस्करण परिसीमित करने के लिए पथ की शुरुआत करने के लिए /v1 या /v2 जोड़ने पर विचार के लिए डिफ़ॉल्ट ऐसे V1 या V2 के लिए एक अनुरोध की तरह लग रहे हो सकता है कि:

http://api.mysite.com/v1/authentication/login 
http://api.mysite.com/v2/auth/login 

केवल चेतावनी यह है कि संस्करण के बिना अनुरोधों को वर्जन 1 (या जो संस्करण मैं निर्दिष्ट करता हूं) पर काम करना और डिफ़ॉल्ट होना चाहिए।

हालांकि यह अच्छा लगता है (कम से कम मेरे लिए), मुझे यकीन नहीं है कि यह लागू करने का अनुशंसित तरीका क्या होगा। मुझे पता है कि मैं हमेशा कुछ प्रकार की रिवर्स प्रॉक्सी कर सकता हूं, लेकिन मुझे आशा है कि मेरे समाधान एक प्रोग्रामिक हो सकते हैं। सर्वर के हिस्से पर आवश्यक कम विन्यास, बेहतर। अगर किसी के पास ब्लॉग/ट्यूटोरियल के लिए कोई विचार या लिंक है, तो यह शानदार होगा!

अग्रिम धन्यवाद!

+0

यह है कि Google कैसे करता है ** v = 1.0 ** 'http: //ajax.googleapis.com/ajax/services/search/web? V = 1.0 और rsz = 8 और q = stackoverflow' –

+0

मुझे लगता है कि 'वर्जन हेडर' और 'संस्करण यूआरआई' समान दृष्टिकोण के रूप में, और मैं दोनों का समर्थन करता हूं। यूआरआई में इसे डेवलपर्स के लिए बहुत उपयोगी है - यह ब्राउज़र के माध्यम से सेवाओं के साथ प्रयोग करना आसान बनाता है। मैं एक 'वर्जनलेस यूआरआई' का भी समर्थन करता हूं जो वर्तमान 'सक्रिय' संस्करण पर रीडायरेक्ट करता है (यह आमतौर पर नवीनतम संस्करण होगा, लेकिन आपके पास ऐसे परिदृश्य हो सकते हैं जहां आप नए संस्करणों को लेते हैं लेकिन उन्हें सार्वजनिक रूप से सक्रिय नहीं करते हैं)। यह वास्तव में आपके मानदंडों पर निर्भर करता है। – Adam

+0

कार्यान्वयन के विवरण देखने के बाद, मेरा मानना ​​है कि तकनीकी आसानी से मुझे यूआरआई दृष्टिकोण की ओर अधिक झुकाव करना होगा।हालांकि, मेरा मानना ​​है कि मैं वर्तमान एपीआई के ग्राहकों को तोड़ने की अपनी मूल आवश्यकता को पूरा करते हुए भी इस दृष्टिकोण को ले सकता हूं। –

उत्तर

1

ठीक है के साथ वर्ज़निंग पर एक सभ्य लेख है, मैं जवाब है कि मैं अब तक मिला है मज़ा आया (आप दोनों को धन्यवाद), लेकिन, यह काफी का समाधान नहीं मेरी समस्या की कमी और लक्ष्यों को देखते हुए मेरे पास मेरे एपीआई के साथ है। इसलिए, मैं उस समाधान का विस्तार करना चाहता था जिसे मैंने पाया है और उपयोग करने की योजना है।

शुरू करने के लिए, मैं यूआरआई के माध्यम से अपने एपीआई का संस्करण बना रहा हूं।

http://api.mysite.com/authentication/login 
http://api.mysite.com/v1/authentication/login 
http://api.mysite.com/v2/auth/login 
http://api.mysite.com/v3/auth/letmeinplease 
... you get the point ... 

यहाँ नोट करना महत्वपूर्ण बात यह है कि अगर मैं एक संस्करण संख्या शामिल नहीं है, तो मैं संस्करण 1. के लिए डिफ़ॉल्ट यह मेरे वर्तमान होगा: इसका मतलब यह करने के लिए एपीआई के विभिन्न संस्करणों दिखेगा कि तरह है सेटअप हालांकि, यह नवीनतम संस्करण, नवीनतम स्थिर, आदि के लिए आसानी से डिफ़ॉल्ट हो सकता है

यहां हम जाते हैं। मैंने एक फ़ोल्डर बनाया जिसमें एप्लिकेशन लाइव रहेगा (wwroot/api)। उस फ़ोल्डर के अंदर मैंने सभी संस्करणों के लिए फ़ोल्डर बनाए: v1, v2, आदि। अब, आईआईएस (मेरे लिए 7.5) में मैंने एक नई परियोजना बनाई जिसमें का अनुप्रयोग रूट था। फिर मैंने उप-एप्लिकेशन के रूप में प्रत्येक संस्करण फ़ोल्डर (v1 सहित) जोड़ा। यह मुझे यूआरआई (जैसा ऊपर देखा गया है) के माध्यम से एपीआई संस्करण करने की अनुमति देता है, हालांकि, एक चेतावनी है।

वेब.कॉन्फिग विरासत वास्तव में दर्द हो सकता है। इसलिए, मैंने इसे अपने सभी एपीआई संस्करणों के लिए अक्षम करना सुनिश्चित किया है। इसे कैसे करें इस पर एक संदर्भ here पाया जा सकता है। उस अपवाद के साथ, सबकुछ एक आकर्षण की तरह काम करता है! :-)

5

माइक्रोसॉफ्ट WCF here

+0

यह संस्करण के लिए एक महान लेख है। हालांकि, मेरा मानना ​​है कि यह मेरे एपीआई के लक्ष्यों को पूरा करने में विफल रहता है। जैसा कि मैंने एर्नो के जवाब पर एक टिप्पणी में उल्लेख किया है, मैं चाहता हूं कि एपीआई अंतर्ज्ञानी हो। मैं क्लाइंट को दिखाई देने वाली किसी भी तरह से विशिष्ट सेवाओं और/या अनुबंधों को संस्करणित करना चाहता हूं। मैं चाहता हूं कि क्लाइंट पूरी तरह से एपीआई के वर्जनिंग को देख सके –

संबंधित मुद्दे