REST parlance में संसाधन और प्रतिनिधित्व के बीच क्या अंतर है?


9

REST की मेरी समझ जो मॉडलिंग सेवा संचालन को राज्य के प्रतिनिधित्व और एक राज्य से दूसरे राज्य में HTTP के उपयोग के रूप में परिवर्तित करने में सक्षम बनाती है। मैंने हमेशा ही साइड साइड स्टेटस के निरूपण के रूप में संसाधनों को समझा है जब तक कि हाल ही में जब मैंने जिमी बोगर्ड के इस लेख को पढ़ा, जिसे मैं एक स्मार्ट डेवलपर / वास्तुकार के रूप में जानता हूं जो समुदाय द्वारा अच्छी तरह से सम्मानित हैं। उस पोस्ट से एक विशिष्ट कथन को उद्धृत करने के लिए

प्रतिनिधित्व थोड़ा अलग है - यह संसाधन की वर्तमान स्थिति (जब अनुरोध किया गया) का वर्णन करता है ।

इसने मुझे उलझन में डाल दिया है। विषय पर आम तौर पर स्वीकृत राय क्या है?


1
आप यह देखना चाहेंगे: मैं यहाँ किन विषयों के बारे में पूछ सकता हूँ? । ओपिनियन पोल प्रोग्रामर्स के लिए विषय पर नहीं हैं।
एडम जुकरमैन

2
खैर, उस पेज पर सूचीबद्ध सभी चीजों का काले और सफेद लेकिन सभी राय में कोई जवाब नहीं है। इसके अलावा, मुझे यकीन नहीं है कि यह सवाल राय के बारे में कैसे है। क्या यह सिर्फ इसलिए है क्योंकि मैंने अपने प्रश्न में "राय" शब्द का इस्तेमाल किया है?
सुहास

मुख्य रूप से, हाँ। दुर्भाग्य से (या शायद सौभाग्य से), शब्द "राय," "सबसे अच्छा अभ्यास" और जैसे "एक खाली गुंजयमान गुहा जहां एक मस्तिष्क होना चाहिए," के साथ दृढ़ता से जुड़ा हुआ है, क्योंकि ऐसे शब्दों का उपयोग करने वाले अधिकांश लोग केवल एक झुंड को स्पॉट करना चाहते हैं की दूरी पर है और इसके बाद अलग हो जाते हैं। शब्द की परिभाषा चाहने वाले लोग अक्सर सबसे खराब अपराधी होते हैं। आप किस विशिष्ट समस्या को हल करने की कोशिश कर रहे हैं?
रॉबर्ट हार्वे

1
आपके प्रश्न के अनुसार, एक संसाधन केवल "एक पते के साथ इंटरनेट पर कुछ बाहर है," जबकि एक प्रतिनिधित्व है "जिस तरह से इंटरनेट पर बात फिर से प्रस्तुत की जाती है।" यह एक फ़ाइल, एक वेब पेज या एक JSON दस्तावेज़ हो सकता है। यह एक विशिष्ट प्रकार की फ़ाइल हो सकती है, जैसे वर्ड डॉक्यूमेंट या स्प्रेडशीट। इन सभी मामलों में, प्रतिनिधित्व वह चीज है जिसे आप पुनर्प्राप्त कर रहे हैं। "संसाधन की वर्तमान स्थिति" एक मान्यता है कि पिछली बार जब आपने इसे पुनर्प्राप्त किया था तब से यह चीज़ बदल गई है।
रॉबर्ट हार्वे

जवाबों:


14

संक्षिप्त जवाब

नक्शा क्षेत्र नहीं है।

लंबे समय तक जवाब - आरईएस के साथ कुछ भी शुरू करने के लिए जगह रॉय फील्डिंग की थीसिस के साथ है ; विशेष अध्याय 5 में । अपने वर्तमान प्रश्न के लिए, आप खंड 5.2.1 चाहते हैं।

REST को चार इंटरफ़ेस बाधाओं द्वारा परिभाषित किया गया है: संसाधनों की पहचान; अभ्यावेदन के माध्यम से संसाधनों का हेरफेर; स्व-वर्णनात्मक संदेश; और, हाइपरमीडिया अनुप्रयोग राज्य के इंजन के रूप में।

संसाधन

REST में सूचना का मुख्य अमूर्त संसाधन है। कोई भी जानकारी जिसे नाम दिया जा सकता है वह एक संसाधन हो सकता है: एक दस्तावेज या छवि, एक अस्थायी सेवा (जैसे "लॉस एंजिल्स में आज का मौसम"), अन्य संसाधनों का संग्रह, एक गैर-आभासी वस्तु (जैसे एक व्यक्ति), और इसी तरह । दूसरे शब्दों में, किसी भी अवधारणा जो एक लेखक के हाइपरटेक्स्ट संदर्भ का लक्ष्य हो सकती है, उसे एक संसाधन की परिभाषा में फिट होना चाहिए। संसाधन संस्थाओं के एक समूह के लिए एक वैचारिक मानचित्रण है, न कि वह इकाई जो किसी विशेष बिंदु पर मानचित्रण से मेल खाती है।

प्रतिनिधित्व

REST घटक उस संसाधन की वर्तमान या इच्छित स्थिति पर कब्जा करने और घटकों के बीच उस प्रतिनिधित्व को स्थानांतरित करने के लिए एक प्रतिनिधित्व का उपयोग करके संसाधन पर कार्य करते हैं। एक प्रतिनिधित्व बाइट्स का एक क्रम है, और उन बाइट्स का वर्णन करने के लिए मेटाडेटा का प्रतिनिधित्व करता है। एक प्रतिनिधित्व के लिए आमतौर पर उपयोग किए जाने वाले लेकिन कम सटीक नामों में शामिल हैं: दस्तावेज़, फ़ाइल और HTTP संदेश इकाई, उदाहरण, या संस्करण।

एक प्रतिनिधित्व में डेटा होता है, मेटाडेटा डेटा का वर्णन करता है, और, अवसर पर, मेटाडेटा का वर्णन मेटाडेटा (आमतौर पर संदेश अखंडता का सत्यापन करने के उद्देश्य से) के लिए होता है।

तो: "लॉस एंजिल्स में आज का मौसम" एक संसाधन है। उम्मीदवार अभ्यावेदन में शामिल होंगे: राष्ट्रीय मौसम सेवा के नवीनतम पूर्वानुमान के साथ एक पाठ दस्तावेज़; मौसम रडार, और पूर्वानुमान की ऑडियो रिकॉर्डिंग का एक दृश्य प्रतिनिधित्व।


2

एक संसाधन वह चीज है जिसके साथ आप काम कर रहे हैं। उदाहरण के लिए, यदि आपके पास एक निश्चित दीपक स्विच करने के लिए एपीआई है, तो संसाधन स्वयं दीपक है। एक संसाधन भौतिक हो सकता है (जैसे दीपक, व्यक्ति) या गैर भौतिक (जैसे लेख, भूमिका, डेटाबेस में एक पंक्ति), एक संसाधन प्राथमिक हो सकता है (उदा। शेष) या व्युत्पन्न (जैसे लेनदेन)। एक संसाधन एक विशिष्ट इकाई (उदाहरण के लिए इस लैंप सॉकेट में स्थापित पांचवें दीपक) का उल्लेख कर सकता है, या यह एक भूमिका का उल्लेख कर सकता है जो अलग-अलग समय में अलग-अलग इकाई में मैप करता है (उदाहरण के लिए वर्तमान में स्थापित दीपक, 5 अगस्त 2008 को स्थापित दीपक) या यह कई संस्थाओं के लिए मैप कर सकता है (उदाहरण के लिए घर के सभी लैंप)।

एक संसाधन का प्रतिनिधित्व वह तरीका है जिससे आपकी सेवा संसाधन की स्थिति को बताती है, जैसे XML, JSON जो दीपक की स्थिति का प्रतिनिधित्व करता है।

REST API में, एक संसाधन की पहचान एक समान पहचानकर्ता (जैसे URI) द्वारा की जाती है। एक एकल संसाधन में कई प्रतिनिधित्व हो सकते हैं, HTTP REST API में आप सामान्य रूप से उस प्रतिनिधित्व को इंगित करेंगे जिसका उपयोग आप HTTP सामग्री-प्रकार और स्वीकारकर्ताओं में करना चाहते हैं।

क्लाइंट सर्वर आर्किटेक्चर में एक प्रमुख वास्तविकता यह है कि आप ग्राहक को संसाधन नहीं ला सकते हैं, और आपको इसे वैसा बनाने की कोशिश नहीं करनी चाहिए जैसी आप करते हैं। इसके बजाय, REST API में, आप संसाधन के अभ्यावेदन को स्थानांतरित करके किसी संसाधन को दूरस्थ रूप से हेरफेर करते हैं। इस तरह से सोचें, आप दीपक को FedEx नहीं करते हैं ताकि ग्राहक सीधे दीपक को हेरफेर कर सके, बल्कि सेवा एक XML / JSON / protobuf / CSV का प्रतिनिधित्व करता है जो दीपक का प्रतिनिधित्व करता है और ग्राहक इच्छित जोड़तोड़ों का प्रतिनिधित्व करता है। सेवा तब क्लाइंट की ओर से दीपक की वास्तविक स्थिति में हेरफेर करती है, या अनुरोध को अस्वीकार करती है, कहती है कि क्या क्लाइंट दीपक पर संचालन करने के लिए अधिकृत नहीं है। यह स्पष्ट / विभाजित बाल लग सकता है, लेकिन ध्यान देने योग्य बात यह है कि चूंकि प्रतिनिधित्व स्वयं संसाधन नहीं है,


1

एक संसाधन एक चालान हो सकता है।

एक प्रतिनिधित्व JSON प्रारूप में, या XML प्रारूप में एक विशिष्ट बिंदु पर एक चालान है। हो सकता है कि आपको बाद की तारीख में ठीक वैसा ही चालान मिले, यह एक ही संसाधन होगा, लेकिन संभावित रूप से अलग राज्य में (रद्द, भुगतान, आदि)।

आप इनवॉइस की वर्तमान स्थिति लेते हैं (उदाहरण के लिए: डेटाबेस में सभी इनवॉइस डेटा) और इसे किसी अन्य डिवाइस पर स्थानांतरण के लिए एक विशिष्ट बिंदु पर एक विशिष्ट प्रतिनिधित्व (जैसे: html, xml, json) देते हैं। एक ब्राउज़र)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.