2008-11-10 13 views
9

मेरे पास http://example.com/v1/SomeResource पर तैनात एक शानदार वेब सेवा है। एक दिन, एक नया प्रोटोकॉल संस्करण (जो पिछड़ा संगत नहीं है) http://example.com/v2/SomeResource पर तैनात किया गया है। ग्राहक के दृष्टिकोण से, यह अपग्रेड किसी भी समय दो HTTP अनुरोधों के बीच हो सकता है।रीस्टफुल सेवाओं का संस्करण?

सर्वर क्लाइंट को कैसे इंगित करता है कि यह अब v1 कॉल का समर्थन नहीं करता है और क्लाइंट को v2 में अपग्रेड करने की उम्मीद है? क्या कोई उपयुक्त प्रतिक्रिया कोड है जिसका मैं उपयोग कर सकता हूं?

मैं निम्नलिखित जानकारी के साथ ग्राहक प्रदान करने के लिए चाहते हो जाएगा:

  1. असंगत उन्नयन ले लिया है जगह। क्लाइंट के लिए नई सेवा का उपयोग करने का कोई तरीका नहीं है क्योंकि प्रोटोकॉल पूरी तरह से अलग हो सकता है।
  2. नए क्लाइंट सॉफ्टवेयर का यूआरएल।
  3. उपयोगकर्ताओं को यह बताते हुए एक संदेश कि उन्हें अपग्रेड करना होगा।
+2

क्या इसके लायक है के लिए, मैं डेरेल की पोस्ट मिलती है (एक अलग सवाल में) शिक्षाप्रद होने के लिए: http://stackoverflow.com/प्रश्न/972226/कैसे-टू-वर्जन-रेस्ट-यूरिस/975394 # 975394 – Gili

+0

[एपीआई संस्करण के लिए सर्वोत्तम प्रथाओं] के संभावित डुप्लिकेट? (https://stackoverflow.com/questions/389169/best-practices-for-api -वर्तन) – Helen

उत्तर

8

सर्वश्रेष्ठ अभ्यास:

यह शायद URL से संस्करण रखने के लिए और नए संसाधनों पीछे की ओर पुराने के साथ संगत बनाने के लिए बेहतर है।

पिछड़ों संगत:

आप URL में v1 रखना चाहिए, और v2 यूआरएल बना रहे हैं, तो आप आप दोनों स्वरूपों का समर्थन, या पुराने v1 अप्रचलित बनाना चाहते तय करना पड़ता है। यदि आप पुराने v1 अप्रचलित बनाने का निर्णय लेते हैं तो मैं v1 यूआरएल का अनुरोध करने वाले किसी के लिए 303 या 401 वापस करने की सलाह दूंगा।

बनाना पुराने URL अप्रचलित:

मैं का उपयोग कर 303 अन्य देखें सिफारिश करेंगे। या यदि कोई संबंधित रीडायरेक्ट नहीं है, तो 410 गोन का उपयोग करें।

Source

303 अन्य देखें

अनुरोध के जवाब जा एक अलग URI में मिल सकता है और कि संसाधन पर एक GET विधि के उपयोग पुनः प्राप्त किया जा चाहिए। यह विधि मुख्य रूप से POST- सक्रिय स्क्रिप्ट के आउटपुट को उपयोगकर्ता एजेंट को किसी चयनित संसाधन पर रीडायरेक्ट करने की अनुमति देने के लिए मौजूद है। मूल रूप से अनुरोधित संसाधन के लिए नया यूआरआई एक विकल्प संदर्भ नहीं है। 303 प्रतिक्रिया कैश नहीं की जानी चाहिए, लेकिन दूसरे (पुनर्निर्देशित) अनुरोध की प्रतिक्रिया कैशेबल हो सकती है।

विभिन्न यूआरआई को जवाब में स्थान क्षेत्र द्वारा दिया जाना चाहिए। जब तक अनुरोध विधि HEAD नहीं थी, प्रतिक्रिया की इकाई SHOULD में नए यूआरआई के लिए हाइपरलिंक के साथ एक संक्षिप्त हाइपरटेक्स्ट नोट होता है।

नोट: कई प्री-HTTP/1।1 उपयोगकर्ता एजेंट 303 स्थिति को समझ नहीं पाते हैं। जब इस तरह के ग्राहकों के साथ अंतर चिंता का विषय है, 302 स्थिति कोड बजाय प्रयोग किया जा सकता है, के बाद से सबसे अधिक उपयोगकर्ता एजेंट एक 302 जवाबी कार्रवाई के लिए प्रतिक्रिया के रूप में यहाँ 303.

दस्तावेज़ सब कुछ के लिए वर्णित:

जो भी आप वापस लौटने के लिए चुना है, उसके बारे में चिंतित होने वाली मुख्य बात, बस इसे अपने दस्तावेज़ में दस्तावेज करें। आप तय कर सकते हैं कि आप अपनी सेवा कैसे काम करना चाहते हैं, अन्य जो इसे उपभोग करना चाहते हैं, वे दस्तावेज़ीकरण का पालन करेंगे।

0

मैं इसके बजाय 301 (301 स्थायी रूप से स्थानांतरित) के उपयोग की सिफारिश करता हूं। why पढ़ें।

आशा है कि यह मदद करता है, ब्रूनो Figueiredo

+1

मुझे यकीन नहीं है कि एसईओ रीस्टफुल सेवाओं के लिए प्रासंगिक है (मशीनों द्वारा उपभोग, लोगों को नहीं)। – Gili

4

मुझे लगता है कि आप पहली जगह में ऐसा नहीं करना चाहिए, लेकिन शायद बहुत देर हो चुकी है।

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

लेख RESTful Web services: The basics से लेख।

+0

हां, एक आदर्श दुनिया में आप सही होंगे, लेकिन मैं इस बारे में बात कर रहा हूं कि आपको पिछली संगतता को तोड़ने के दौरान क्या करना है। यदि मैं पिछली संगतता को बनाए रख सकता हूं तो मैं आपके द्वारा सुझाए गए समान यूआरआई को रखने की कोशिश करता हूं। – Gili

10

मैं पीटर विलियम्स द्वारा निम्न आलेख की सिफारिश

+3

अपनी पूरी लेख श्रृंखला भी देखें: http://barelyenough.org/blog/tag/rest-versioning/ – serverhorror

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