मैंने पिछले सप्ताह बिताया है या फिर आरईएसटी पर एक उचित बिट पढ़ा है, और मेरी समझ के अनुसार, इन समाधानों में से किसी एक को 'रीस्टफुल' के रूप में वर्णित करना गलत होगा, बल्कि आपको यह कहना चाहिए कि 'न तो समाधान आरईएसटी का मतलब क्या है '।
संक्षिप्त उत्तर यह है कि आरईएसटी, जैसा कि Roy Fielding's dissertation में देखा गया है (अध्याय 5 देखें), आरईएसटी मैनेजर में संसाधनों, एकवचन या एकाधिक को हटाने के विषय को शामिल नहीं करता है। यह सही है, संसाधन को हटाने के लिए कोई सही सही तरीका नहीं है ... अच्छा, बिल्कुल नहीं।
आरईएसटी खुद को परिभाषित नहीं करता है कि संसाधन को कैसे हटाया जाए, लेकिन यह परिभाषित करता है कि आप किस प्रोटोकॉल का उपयोग कर रहे हैं (याद रखें कि आरईएसटी प्रोटोकॉल नहीं है) यह क्रियाओं को कैसे कार्यान्वित करेगा। प्रोटोकॉल आमतौर पर HTTP हो जाएगा; फ़ील्डिंग will point out, आरईएसटी के रूप में मुख्य शब्द होने पर 'आमतौर पर' HTTP का पर्याय नहीं है।
तो हम यह कहने के लिए HTTP देखें कि कौन सी विधि 'सही' है। अफसोस की बात है, जहां तक HTTP का संबंध है, दोनों दृष्टिकोण व्यवहार्य हैं। हां 'व्यवहार्य'। HTTP क्लाइंट को एक पेलोड (संग्रह संसाधन बनाने के लिए) के साथ एक POST अनुरोध भेजने की अनुमति देगा, और उसके बाद संसाधनों को हटाने के लिए इस नए संग्रह पर एक DELETE विधि कॉल करें; यह संसाधनों की सूची को हटाने के लिए आपको एक एकल DELETE विधि के पेलोड के भीतर डेटा भेजने की अनुमति देगा।HTTP केवल वह माध्यम है जिसके द्वारा आप सर्वर को अनुरोध भेजते हैं, यह उचित रूप से प्रतिक्रिया देने के लिए सर्वर पर होगा। मेरे लिए, HTTP प्रोटोकॉल स्थानों में व्याख्या के लिए खुले प्रतीत होता है, लेकिन ऐसा लगता है कि क्रियाओं का क्या अर्थ है, उन्हें किस तरह से निपटाया जाना चाहिए और किस प्रतिक्रिया को दी जानी चाहिए; यह सिर्फ 'आपको यह करना चाहिए' की बजाय 'आपको यह करना चाहिए', लेकिन शायद मैं इस शब्द पर थोड़ा पैडेंटिक हूं।
कुछ लोग तर्क देंगे कि 'दो चरण' दृष्टिकोण संभवतः 'आरईएसटी' नहीं हो सकता है क्योंकि सर्वर को दूसरी कार्रवाई करने के लिए क्लाइंट के लिए 'राज्य' स्टोर करना होता है। यह बस कुछ हिस्से की गलतफहमी है। यह समझा जाना चाहिए कि न तो ग्राहक और न ही सर्वर पोस्ट किए जा रहे सूची के बीच किसी अन्य के बारे में 'राज्य' जानकारी संग्रहीत कर रहा है और उसके बाद DELETED हो रहा है। हां, सूची को हटाए जाने से पहले बनाया जाना चाहिए, लेकिन सर्वर को याद नहीं है कि यह क्लाइंट अल्फा था जिसने यह सूची बनाई थी (इस तरह का एक दृष्टिकोण क्लाइंट को अगले अनुरोध के रूप में 'DELETE' को कॉल करने की अनुमति देगा और सर्वर याद करता है उस सूची का उपयोग करने के लिए, यह बिल्कुल स्टेटलेस नहीं होगा) इस प्रकार, क्लाइंट को उस विशिष्ट सूची को हटाने के लिए सर्वर को बताना होगा, जिस सूची को इसे एक विशिष्ट यूआरआई दिया गया था। यदि ग्राहक ने एक संग्रह सूची को हटाने का प्रयास किया जो पहले से मौजूद नहीं था, तो उसे केवल 'संसाधन नहीं मिला' (क्लासिक 404 त्रुटि सबसे अधिक संभावना) बताया जाएगा। यदि आप दावा करना चाहते हैं कि यह दो कदम दृष्टिकोण एक राज्य को बनाए रखता है, तो आपको यह भी दावा करना होगा कि एक यूआरआई प्राप्त करने के लिए एक राज्य की आवश्यकता है, क्योंकि यूआरआई पहले मौजूद होना चाहिए। यह दावा करने के लिए कि 'राज्य' का अर्थ यह है कि 'राज्य' का क्या अर्थ है गलतफहमी है। और आगे 'सबूत' के रूप में कि इस तरह के दो चरण दृष्टिकोण वास्तव में स्टेटलेस है, आप आसानी से ग्राहक अल्फा पोस्ट सूची और बाद में ग्राहक बीटा (अन्य क्लाइंट के साथ कोई संचार किए बिना) सूची संसाधनों पर DELETE कॉल कर सकते हैं।
मुझे लगता है कि यह स्पष्ट रूप से स्पष्ट हो सकता है कि दूसरा विकल्प, DELETE अनुरोध के पेलोड में सूची भेजने का दूसरा विकल्प स्टेटलेस है। अनुरोध को पूरा करने के लिए आवश्यक सभी जानकारी पूरी तरह से एक अनुरोध के भीतर संग्रहीत की जाती है।
यह तर्क दिया जा सकता है कि DELETE कार्रवाई को केवल 'मूर्त' संसाधन पर ही बुलाया जाना चाहिए, लेकिन ऐसा करने में आप आरईएसटी के प्रतिनिधि भाग को स्पष्ट रूप से अनदेखा कर रहे हैं; यह नाम में है! यह प्रतिनिधित्व करने वाला पहलू है जो http://example.com/myService/timeNow
जैसे यूआरआई को अनुमति देता है, एक यूआरआई कि जब 'मिल' वापस आ जाएगा, गतिशील रूप से, वर्तमान समय, कुछ फाइल लोड करने या कुछ डेटाबेस से पढ़ने के साथ। यह एक महत्वपूर्ण अवधारणा है कि यूआरआई डेटा के कुछ 'मूर्त' टुकड़े पर सीधे मानचित्रण नहीं कर रहे हैं।
हालांकि उस स्टेटलेस प्रकृति का एक पहलू है जिस पर सवाल किया जाना चाहिए। फील्डिंग का वर्णन अनुभाग 5.1.3 में 'क्लाइंट-राज्यविहीन-सर्वर' के रूप में, वह कहता है:
We next add a constraint to the client-server interaction: communication must
be stateless in nature, as in the client-stateless-server (CSS) style of
Section 3.4.3 (Figure 5-3), such that each request from client to server must
contain all of the information necessary to understand the request, and
cannot take advantage of any stored context on the server. Session state is
therefore kept entirely on the client.
यहाँ महत्वपूर्ण हिस्सा मेरी आँखों में है "सर्वर पर किसी भी संग्रहीत संदर्भ का लाभ नहीं ले जा सकते हैं"। अब मैं आपको बता दूंगा कि 'संदर्भ' व्याख्या के लिए कुछ हद तक खुला है। लेकिन मुझे यह देखना मुश्किल लगता है कि आप एक सूची (या तो स्मृति या डिस्क में) को संग्रहीत करने पर विचार कर सकते हैं जिसका उपयोग वास्तविक उपयोगी अर्थ देने के लिए किया जाएगा, इस 'नियम' का उल्लंघन नहीं करेगा। इस 'सूची संदर्भ' के साथ DELETE ऑपरेशन का कोई मतलब नहीं है। इस प्रकार, मैं केवल यह निष्कर्ष निकाल सकता हूं कि कई संसाधनों को हटाने जैसे क्रिया को करने के लिए दो चरण दृष्टिकोण का उपयोग करना 'RESTfull' नहीं माना जा सकता है।
मैं कुछ हद तक प्रयास भी करता हूं जिसे तर्क के लिए किसी भी तरह से खोजना पड़ता है। ऐसा लगता है कि इंटरनेट इस विचार के साथ आगे बढ़ गया है कि दो कदम दृष्टिकोण 'रीस्टफुल' तरीका है जो इस तरह के कार्यों को कर रहा है, तर्क के साथ 'यह करने का सबसे अच्छा तरीका है'। यदि आप एक पल के लिए पीछे हटते हैं जो हर कोई कर रहा है, तो आप देखेंगे कि या तो दृष्टिकोण को एक ही सूची भेजने की आवश्यकता है, इसलिए इसे तर्क से अनदेखा किया जा सकता है। दोनों दृष्टिकोण 'प्रतिनिधित्ववादी' और 'स्टेटलेस' हैं। एकमात्र वास्तविक अंतर यह है कि किसी कारण से एक दृष्टिकोण ने दो अनुरोधों की आवश्यकता का निर्णय लिया है।ये दो अनुरोध तब अनुवर्ती प्रश्नों के साथ आते हैं, जैसे कि आप 'उस डेटा को कितना समय तक रखते हैं' और 'क्लाइंट एक सर्वर को कैसे बताता है कि यह अब यह संग्रह नहीं चाहता है, लेकिन वास्तविक संसाधनों को संदर्भित करना चाहता है '।
तो मैं एक प्रश्न पर, एक ही प्रश्न के साथ अपने प्रश्न का उत्तर दे रहा हूं, 'आप दो कदम दृष्टिकोण क्यों मानेंगे?'
मुझे नहीं लगता कि आरईएसटी का बिंदु यह है कि सर्वर के पास ** कोई ** राज्य नहीं हो सकता है (उदाहरण के लिए, सर्वर पर * कुछ * सर्वर पर आईडी को मैप करने के लिए राज्य की आवश्यकता है), लेकिन वह इसमें कोई * प्रति सत्र * राज्य नहीं है। इस प्रकार, या तो विधि शायद योग्यता प्राप्त करती है, हालांकि मैं मानता हूं कि एक कदम दृष्टिकोण अभी भी बेहतर है। –
आप निष्कर्ष पर कैसे आते हैं कि एक चरण दृष्टिकोण में प्रति सत्र राज्य शामिल है? मैंने सोचा कि मैंने यह स्पष्ट कर दिया है कि न तो दृष्टिकोण को एक सत्र सत्र की आवश्यकता होगी, जैसे शॉपिंग कार्ट की तरह कुछ अक्सर उपयोग किया जाता है। – thecoshman
मैं इस तरह के किसी निष्कर्ष पर नहीं आया - मैंने अभी निष्कर्ष निकाला है कि दो-चरणीय दृष्टिकोण में शामिल "राज्य" आरईएसटी के विचारों का उल्लंघन नहीं करता है। –