2009-12-18 15 views
18

मैं विश्वविद्यालय के शोध पत्रों के लिए एक आरईएसटी सेवा लागू करने के बारे में एक पेपर लिख रहा हूं और मुझे यूआरआई और संसाधनों के बीच संबंधों को समझने में एक छोटी सी समस्या है।REST - एक ही संसाधन के लिए एकाधिक यूआरआई (???)

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

तो मेरे सवाल है, तो निम्न यह है या उसका अनुसरण बाकी के अनुसार नहीं है:

मैं एक शोध प्रकाशन के बारे में जानकारी का खुलासा करना चाहते हैं (के एक सहकर्मी की समीक्षा मान लीजिए)।

इसे इस यूआरआई द्वारा उपयोग किया जा सकता है: यूनिवर्सिटी/प्रकाशन/{my_publication}

लेकिन चूंकि इस पत्र एक शोधकर्ता कि मान लीजिए कि सामाजिक विज्ञान संकाय जाने पर काम करता है ने लिखा है, यह भी समझ में प्रकाशन इस यूआरआई है कि कर देगा: विश्वविद्यालय/संकायों/social_science/प्रकाशन/{my_publication}

इसके अलावा अधिक,

सेवा भी विश्वविद्यालय में काम कर रहे सभी शोधकर्ताओं का पर्दाफाश के रूप में (जैसे विश्वविद्यालय/शोधकर्ताओं/{my_researcher}) यह भी है कि प्रकाशन के रूप में विश्वविद्यालय/शोधकर्ताओं/{my_researcher}/प्रकाशनों नामित किया जा सकता है समझ कर देगा/{my_publication}

यह एकाधिक उपयोगकेस के साथ चल सकता है, लेकिन आपको विचार मिलता है।

क्या यह आरईएसटी के अनुसार है या नहीं?

क्या मैं इसे कैनोनिकल यूआरआई (जो यूनिवर्सिटी/प्रकाशन/{my_publication} होगा) के साथ प्रतिक्रिया कोड 303 ("यह भी देखें") भेजकर दुविधा को हल कर सकता है।

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

उत्तर

0

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

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

उस ने कहा, मैं इस बात पर बहुत अधिक चिंतित नहीं होगा कि आपका एप्लिकेशन रीस्टफुल है या नहीं। यह सिर्फ एक डिजाइन सिद्धांत है। यहां एक ऐसे व्यक्ति द्वारा एक अच्छा लेख दिया गया है जो तर्क देता है कि आरईएसटी वास्तव में वेब ब्राउज़र वाले मनुष्यों के लिए वास्तव में इरादा नहीं है: http://starkravingcoder.blogspot.com/2009/01/where-are-rest-frameworks.html

6

जबकि प्रत्येक प्रकाशन संसाधन में एक और केवल एक संसाधन नाम होना चाहिए (आप) के लिए स्वतंत्र हैं क्वेरी और अन्य संसाधन नामों की वापसी सूची बनाने वाले संसाधन बनाएं।

आपके पास UNIVERSITY/publication/{publication} प्रकाशन संसाधनों के लिए संसाधन नाम पैटर्न के रूप में, और UNIVERSITY/faculties/{faculty}/publications संसाधनों के नामकरण के पैटर्न के रूप में हो सकता है जो विशेष संकाय के लिए प्रकाशनों की सूचियां हैं।इसी तरह UNIVERSITY/researchers/{researcher}/publications किसी विशेष व्यक्ति द्वारा लिखे गए प्रकाशनों की सूचियों के लिए संसाधन नाम पैटर्न हो सकता है।

+0

हाय जिम, यही वही है जो मैंने किया था। मैं आगे भी गया, लेकिन प्रत्येक संस्थान प्रकाशन (/ संकाय/संस्थान/प्रकाशन) और अन्य के लिए संसाधनों का नामकरण भी किया। यह मेरी दुविधा नहीं है, लेकिन तथ्य यह है कि मेरे पास यूआरआई के पास {my_publication} के सामने कोई फर्क नहीं पड़ता, यूआरआई एक पर एक ही बिंदु और एक ही संसाधन: प्रकाशन स्वयं, जो अद्वितीय है। –

+0

@jan, सुनिश्चित नहीं है कि यह आपकी टिप्पणी को संबोधित करता है, लेकिन प्रत्येक क्वेरी एक प्रकाशन संसाधन हो सकती है जैसे प्रत्येक प्रकाशन है। एक प्रश्न में सही ढंग से प्रकाशन * नाम * की एक सूची होनी चाहिए। तो आपकी वेब सेवा के ग्राहक को पहले यूएससी सूचना विज्ञान संस्थान से सभी प्रकाशनों की सूची मिल सकती है, और फिर उस सूची में प्रत्येक प्रकाशन प्राप्त करें। –

0

जिम फेरन्स में +1।

इसके अलावा, प्रति संसाधन वास्तव में एक यूआरआई होने से आपकी साइट के भीतर लिंक बनाना आसान हो जाएगा। मैंने पढ़ा है कि सर्च इंजन अलग-अलग यूआरआई में भी दोहराने की सामग्री पसंद नहीं करते हैं।

+0

यह सच है, और दूसरा फायदा यह है कि यदि आपके पास प्रति संसाधन केवल एक ही नाम है, तो आपके समानार्थी शब्द का समूह होने की तुलना में यह अधिक कैच करने योग्य है। –

22

यह कहता है कि एक संसाधन में एक यूआरआई या कई हो सकते हैं। तो यहाँ मेरी समस्या है। मैं इस सेवा का उपयोग करने के लिए और जानकारी के चारों ओर पाने के लिए बहुत आसान बनाना चाहते हैं: एक संसाधन अलग entrypoints से पहुँचा जा चाहिए, लेकिन इस अवधारणा के खिलाफ जाना होगा, कि हर

नहीं "यूआरआई ठीक एक संसाधन निर्दिष्ट करता है जिनकी" यह नहीं करता है "हर उंगली बिल्कुल एक हाथ से संबंधित है" का मतलब यह नहीं है कि "हर हाथ में बिल्कुल एक उंगली होती है"। "प्रत्येक यूआरआई वास्तव में एक संसाधन को निर्दिष्ट करता है" का अर्थ यह नहीं है कि "हर संसाधन को एक यूआरआई द्वारा नामित किया जाता है"।

उस ने कहा, एक कैननिकल यूआरआई के लिए एक रीडायरेक्ट कुछ उपयोग मामलों में सुधार करेगा (ऐसे दो उपयोगकर्ता स्वादिष्ट पर एक ही पेपर को बुकमार्क करते हैं, विभिन्न प्रश्नों से वहां पहुंचे हैं)।

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

एक REST API निश्चित संसाधन नाम या पदानुक्रम (क्लाइंट और सर्वर का एक स्पष्ट युग्मन) को परिभाषित नहीं कर सकते: फील्डिंग एक विरोधी पैटर्न क्लाइंट और सर्वर के बीच युग्मन के कारण के रूप में अपने ब्लॉग REST APIs must be hypertext-driven में यह स्पष्ट करता है।

+1

लड़का मैं आपको उस अंतिम पैराग्राफ पर विस्तार करने के लिए पसंद करूंगा। – ScottCher

+3

@ स्कॉटशेर एक आरईएसटी आवेदन में, एप्लिकेशन की स्थिति यूआरएल के माध्यम से संसाधनों को लाने वाले उपयोगकर्ता एजेंट द्वारा दर्शायी जाती है। आरईएसटी एक राज्य मशीन के रूप में एक आवेदन के बारे में सोच रहा है जहां प्रत्येक राज्य संसाधन प्राप्त करने के लिए यूआरएल को हल करने का नतीजा है; संसाधन में लिंक अगले संभावित राज्यों में संक्रमण हैं। लिंक होने के बाद एक विशेष मानव पठनीय पैटर्न स्वयं आरईएसटी के लिए प्रासंगिक नहीं है, केवल आवेदन की अगली स्थिति के लिंक वर्तमान स्थिति के लिए संसाधन के अंदर हैं। एक ही यूआरएल द्वारा प्रदर्शित एक ही राज्य को सुविधाजनक बनाने के लिए ... –

+2

... बुकमार्किंग, लेकिन एक पैटर्न है जो उपयोगकर्ता अनुमान लगा सकते हैं कुछ हद तक विरोधी है - इसका मतलब है कि कोई उपयोगकर्ता एक यूआरएल अनुमान लगा सकता है, इसे टाइप कर सकता है और एप्लिकेशन में कूद सकता है राज्य जो उनके वर्कफ़्लो का हिस्सा नहीं था। कई मामलों के लिए, यह कोई समस्या नहीं है, जहां राज्य किसी दिए गए मार्ग से पहुंचने पर निर्भर नहीं है, इसलिए बहुत से आरईएसटी अनुप्रयोग इसे अनुमति देते हैं। एक अच्छा मानव पठनीय पैटर्न होने के फायदे हैं, लेकिन आरईएसटी की आवश्यकता नहीं है। –

9

यह अक्सर बहस वाला विषय है और मेरा मानना ​​है कि भ्रम यह समझने की कोशिश करने पर आधारित है कि एक HTTP यूआरआई वास्तव में क्या इंगित करता है। मेरे रीडिंग के आधार पर यह वास्तव में एक बालों वाला विषय बन जाता है और इस विषय पर कई सालों से लोगों ने खुद से बहस की है।

Here http-range-14 मुद्दे पर सभी चर्चाओं का सारांश पृष्ठ है।

इस मुद्दे के अंतिम निष्कर्ष की मेरी निष्पक्ष व्याख्या यह है कि केवल एक ही यूआरआई होना चाहिए जो 200 के साथ भौतिक "सूचना संसाधन" लौटाता है। हालांकि, कई यूआरआई हो सकते हैं जो संसाधन को शुद्ध के रूप में संदर्भित करते हैं अवधारणा। रिटर्निंग 303 आपको अवधारणा को "सूचना संसाधन" से जोड़ने की अनुमति देता है।

तो उत्तर हाँ है और नहीं, एक ही संसाधन के लिए कई यूआरआई हो सकते हैं और सभी अवधारणा का प्रतिनिधित्व करने के लिए मान्य हैं, लेकिन केवल एक को वास्तव में भौतिक प्रतिनिधित्व वापस करना चाहिए।

यह यूआरआई में ".xml" और ".json" का उपयोग करने के बारे में बात करते समय रॉय फील्डिंग की हालिया टिप्पणी के अनुरूप है। उन्होंने स्पष्ट रूप से कहा कि http://www.example.org/myresource.xml और http://www.example.org/myresource.json दो अलग-अलग संसाधनों के प्रति प्रतिक्रिया दे रहे हैं क्योंकि वे दोनों 200 लौट रहे हैं। हालांकि, जब आप http://www.example.org/myresource पर सामग्री वार्ता का उपयोग करते हैं तो आप उसी संसाधन के दो अलग-अलग प्रस्तुतिकरण पुनर्प्राप्त कर सकते हैं।

0

आपको संसाधन और उस इकाई के बीच का अंतर देखने की आवश्यकता है जो इसे दर्शाती है। रॉय फील्डिंग उसकी dissertation, section 5.2.1.1 में लिखते हैं:

एक संसाधन संस्थाओं का एक सेट करने के लिए एक वैचारिक मानचित्रण है, नहीं इकाई है कि समय में किसी खास बिंदु पर मानचित्रण से मेल खाती है।

चूंकि आपके सभी संसाधन थोड़ा अलग अर्थशास्त्र लेते हैं, इसलिए इसे मेरी राय माना जा सकता है। अपने मीडिया प्रकार की संरचना के आधार पर आप "पसंदीदा यूरी" को इंगित करने के लिए canonical link relation का उपयोग कर सकते हैं।

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