तो, एक RESTful सेवा की शब्दावली में क्रियाओं का एक निश्चित समूह होता है। Restful वेब सेवा इन HTTP तरीकों से लेती है। एक निश्चित शब्दावली को परिभाषित करने के कुछ कथित फायदे हैं, लेकिन मैं वास्तव में इस बात को समझ नहीं पाता हूं। शायद कोई इसे समझा सकता है।
प्रत्येक राज्य के लिए एक शब्दावली को परिभाषित करने की तुलना में REST द्वारा निर्धारित एक निश्चित शब्दावली बेहतर क्यों है? उदाहरण के लिए, ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग एक लोकप्रिय प्रतिमान है। आरपीसी को निश्चित इंटरफेस को परिभाषित करने के लिए वर्णित किया गया है, लेकिन मुझे नहीं पता कि लोग क्यों मानते हैं कि आरपीसी इन संदर्भों से सीमित है। हम गतिशील रूप से इंटरफ़ेस निर्दिष्ट कर सकते हैं जैसे एक RESTful सेवा गतिशील रूप से इसकी सामग्री संरचना का वर्णन करती है।
REST को इस दृष्टि से लाभप्रद माना जाता है कि यह शब्दावली का विस्तार किए बिना विकसित हो सकता है। अन्य संसाधनों को जोड़कर गतिशील सेवाएं गतिशील रूप से बढ़ती हैं। एक वस्तु-वस्तु शब्दावली को गतिशील रूप से निर्दिष्ट करके एक सेवा का विस्तार करने में क्या गलत है? हम केवल उन वस्तुओं का उपयोग क्यों नहीं करते हैं जो शब्दावली के रूप में हमारी वस्तुओं पर परिभाषित हैं और हमारी सेवाएं क्लाइंट को बताती हैं कि ये विधियां क्या हैं और क्या उनके दुष्प्रभाव हैं या नहीं?
अनिवार्य रूप से मुझे यह महसूस होता है कि सर्वर साइड संसाधन संरचना का वर्णन एक शब्दावली की परिभाषा के बराबर है, लेकिन फिर हमें सीमित शब्दावली का उपयोग करने के लिए मजबूर किया जाता है जिसमें इन संसाधनों के साथ बातचीत की जा सके।
क्या एक निश्चित शब्दावली वास्तव में सर्वर की चिंताओं से ग्राहक की चिंताओं को कम करती है? मुझे निश्चित रूप से सर्वर के कुछ कॉन्फ़िगरेशन से संबंधित होना चाहिए, यह सामान्य रूप से Restful सेवाओं में संसाधन स्थान है। एक गतिशील शब्दावली के उपयोग पर शिकायत करना अनुचित लगता है क्योंकि हमें गतिशील रूप से इस कॉन्फ़िगरेशन को किसी भी तरह से कैसे समझना है। रेस्टफुल सेवा हाइपरमीडिया के माध्यम से ऑब्जेक्ट संरचना की पहचान करके आपके द्वारा किए जाने वाले बदलावों का वर्णन करती है।
मुझे अभी समझ नहीं आया कि किसी निश्चित शब्दावली को किसी भी आत्म-गतिशील डायनेमिक शब्दावली से बेहतर क्या कहा जा सकता है, जो आरपीसी जैसी सेवा में आसानी से काम कर सकती है। क्या यह HTTP प्रोटोकॉल की सीमित शब्दावली के लिए सिर्फ एक घटिया तर्क है?
प्रतिबिंब
बस अपने विचारों को स्पष्ट करने के लिए जितना मैंने किया है उससे बेहतर है। मान लीजिए कि आप किसी भी सामान्य प्रयोजन एपीआई को डिजाइन कर रहे हैं, शायद वेब फेसिंग भी नहीं। क्या आप खुश होंगे यदि कोई कहे कि आप केवल अपनी वस्तुओं पर इन विधियों के नाम का उपयोग कर सकते हैं? REST HTTP तक ही सीमित नहीं है, लेकिन उस स्थिति पर विचार करें जहां आप प्रत्येक एपीआई लिखते हैं, वेब का सामना करना पड़ रहा है या अन्यथा बस GET POST PUT और DELETE विधियों वाली वस्तुओं से मिलकर बना है। तो उस ऑब्जेक्ट .foo विधि को आप परिभाषित करना चाहते थे संभव नहीं है। आपको फू नामक एक नई वस्तु को परिभाषित करना होगा, और इसकी GET विधि को कॉल करना होगा। यह अनिवार्य रूप से है कि REST कैसे काम करता है, और यह मुझे इसके बारे में सोचने में थोड़ा असहज करता है। आपको इस बात की कोई बेहतर समझ नहीं है कि फू क्या करता है, आपको मूल वस्तु पर एक विधि के लिए एक नई वस्तु बनाने के लिए मजबूर किया गया था। इसके अलावा आपका एपीआई कोई कम जटिल नहीं है, आपके पास अधिक ऑब्जेक्ट्स बनाकर केवल इंटरफ़ेस जटिलता छिपी है। रेस्टफुल वेब सेवाएं हमें एक ऐसे इंटरफ़ेस को अपनाने के लिए मजबूर करती हैं, जो हमारे द्वारा उजागर किए जा रहे एपीआई के संदर्भ में पर्याप्त हो सकता है या नहीं। शायद वेब का सामना करने वाले एपीआई के साथ ऐसा करने का एक अच्छा कारण है, लेकिन प्रत्येक अतिरिक्त कंप्यूटर एपीआई में हर वस्तु के लिए मानक इंटरफेस न अपनाने का एक अच्छा कारण है। एक व्यावहारिक उदाहरण की सराहना की जाएगी।