2010-02-22 10 views
11

प्राप्त करने के लिए आरईएसटी सर्वोत्तम अभ्यास REST - complex applications पर आलेख पढ़ता है और यह मेरे कुछ प्रश्नों का उत्तर देता है, लेकिन सभी नहीं।एक सबसेट सूची

मैं अपना पहला आरईएसटी एप्लीकेशन डिजाइन कर रहा हूं और अनुरोधों को प्राप्त करने के लिए "सबसेट" सूचियों को वापस करने की आवश्यकता है। निम्नलिखित में से कौन सा "रीस्टफुल" है?

/patients;listType=appointments;date=2010-02-22;user_id=1234 

या

/patients/appointments-list;date=2010-02-22;user_id=1234 

या यहाँ तक कि

/appointments/2010-02-22/patients;user_id=1234 

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

/patients;rounds=true;specific_id=xxxx;covering_id=yyyy;primary_id=zzzz 

साथ चुन सकते हैं, लेकिन यह तर्क शाखाओं में सही सूची है, जहां एक विशिष्ट सबसेट (राउंड-सूची) के लिए पूछ रहा है कि एक ही बात को प्राप्त होगा प्राप्त करने के लिए जटिल की आवश्यकता होगी।

ध्यान दें कि मुझे क्वेरी पैरामीटर के बजाय मैट्रिक्स पैरामीटर का उपयोग करने की आवश्यकता है क्योंकि मुझे URL के कई स्तरों पर फ़िल्टरिंग करने की आवश्यकता है। मैं जिस फ्रेमवर्क का उपयोग कर रहा हूं (RestEasy), पूरी तरह से मैट्रिक्स पैरामीटर का समर्थन करता है।

+0

मुझे लगता है कि उनमें से सभी को पुनः स्थापित किया जा सकता है, लेकिन यूआरएल रीस्टिश होने का केवल एक हिस्सा है। मेरी पसंद/अपॉइंटमेंट/मरीज़/user_id = 1234/date = 2010-02-22 के साथ जाएगी, जो आपको उस तारीख को छोड़ने और उस उपयोगकर्ता आईडी के लिए सभी रोगी नियुक्तियों को प्राप्त करने की अनुमति देगी। – kenny

उत्तर

4

राल्फ,

विशेष यूआरआई पैटर्न सवाल यह है कि RESTful आपके आवेदन किया जाएगा करने के लिए ओर्थोगोनल हैं।

क्या restfulness के संबंध में मायने रखती है कि ग्राहक को पता चलता है कि कैसे क्रम पर यूआरआई निर्माण करने के लिए है। इसे या तो फॉर्म या यूआरआई टेम्पलेट्स के साथ हासिल किया जा सकता है। हाइपर्मियाडिया दोनों नियंत्रण क्लाइंट को बताते हैं कि पैरामीटर का उपयोग किया जा सकता है और उन्हें यूआरआई में कहां रखा जाए।

इसके लिए काम करने के लिए, क्लाइंट और सर्वर को डिजाइन समय पर संभावित पैरामीटर पता होना चाहिए। यह आमतौर पर उन्हें लिंक रिश्ते के विनिर्देश का हिस्सा बनाकर हासिल किया जाता है।

उदाहरण के लिए संग्रह के सबसेट को जोड़ने का अर्थ है करने के लिए एक 'मेरी-सबसेट' क्लिक संबंध परिभाषित कर सकता है और इसके साथ आप निम्नलिखित मानकों निर्धारित करना होगा:

listType, तिथि, userID।

एक लिंक टेम्पलेट में

< लिंक rel = "मेरी-सबसेट 'टेम्पलेट ="/{listType}/{तिथि}/रोगियों के रूप में इस्तेमाल किया जा सकता कल्पना; user_id = {userID} "/ >

नोट कैसे यूआरआई में वास्तविक पैरामीटर का नाम निर्दिष्ट पैरामीटर नाम से decoupled है। userID के लिए मूल्य देर बाध्य यूआरआई पैरामीटर user_id है।

यह क्लाइंट को प्रभावित किए बिना यूआरआई पैरामीटर नाम बदलने के लिए संभव बनाता है।

आप अभ्यास में यह कैसे किया जाता है यह देखने के लिए ओपनशर्च विवरण दस्तावेज़ (http://www.opensearch.org) देख सकते हैं।

असल में, आप अपने उपयोग के मामले में ओपनशर्च का लाभ उठाने में सक्षम होना चाहिए। विशेष रूप से प्रश्नों को पूर्वनिर्धारित करने की क्षमता आपको अपने 'रूपों' में विशेष सबसेट का वर्णन करने की अनुमति देगी।

लेकिन खुद के लिए देखते हैं और फिर वापस फिर से पूछना :-)

जनवरी

+0

मैं opensearch दस्तावेजों के माध्यम से अपना रास्ता बना रहा हूँ। क्या आप सुझाव दे रहे हैं कि एक आरईएसटी सर्वर पर हर संसाधन सर्वर पर कुछ अन्य यूआरएल कॉल करके "खोजने योग्य" होना चाहिए? मैं सिर्फ एक दस्तावेज़ प्रकाशित नहीं कर सकता जो कुछ कहता है "यदि आपको सभी नीले विजेट प्राप्त करने की आवश्यकता है, तो यूआरएल '/ विजेट्स, रंग = नीला' का उपयोग करें? – Ralph

+0

यह सही है। –

+0

हां, जैसा कि डैरल ने कहा था। एक अर्थ में मोटे तौर पर इस तरह से सोच सकते हैं: रनटाइम पर मशीन पठनीय रूप (मीडिया प्रकार) में आपके दिमाग में दस्तावेज़ प्रदान करें और क्लाइंट को इस पर प्रतिक्रिया दें। जनवरी –

2

है कि आप इस URL संरचना का उपयोग मैं सिफारिश करेंगे:

/appointments;user_id=1234;date=2010-02-22 

क्यों? मैंने /appointments चुना क्योंकि यह सरल और स्पष्ट है। (यदि आपके पास एक से अधिक प्रकार की नियुक्ति है, तो मुझे टिप्पणियों में बताएं और मैं अपना उत्तर समायोजित कर सकता हूं।) मैंने सेमीकॉलन चुना क्योंकि वे user_id और दिनांक के बीच पदानुक्रम का संकेत नहीं देते हैं।

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

/users/1234/appointments;date=2010-02-22 

इसी तरह के परिणाम को वापस करने के लिए।

उसने कहा, मैं /dates/2010-02-22/appointments;user_id=1234 का उपयोग करने की अनुशंसा नहीं करता। क्यूं कर? मुझे नहीं लगता कि, व्यावहारिक रूप से, /dates एक संसाधन को संदर्भित करता है। तिथि एक नियुक्ति की विशेषता है लेकिन अपने आप पर एक संज्ञा नहीं है (यानी यह पहली श्रेणी की बात नहीं है)।

+0

मुझे लगता है/नियुक्तियां/user_id = 1234; दिनांक = 2010-02-22 थोड़ा बेहतर है/अपॉइंटमेंट/पदानुक्रम में एक बिंदु परिभाषित करता है। – ocharles

-1

मैं डेविड जेम्स ने जो जवाब दिया उससे संबंधित हो सकता है। (

/appointments;user_id=1234;date=2010-02-22

और/या

/users/1234/appointments;date=2010-02-22

जबकि अभी भी खोज क्षमता को बनाए रखने के क्रम में:
अपने यूआरआई के प्रारूप की तरह उन्होंने सुझाव दिया जा सकता है) आपके संसाधन के यूआरआई (जैसे जॉन अल्गम जारी किया जारी)।

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