2012-03-27 18 views
9

मैं वर्तमान में कुछ संसाधनों तक पहुंच प्रदान करने वाली एक webservice लिख रहा हूं। मैं आरईएसटी का पालन करने की कोशिश करता हूं लेकिन मुझे अपने एपीआई के कुछ हिस्सों से संबंधित समस्या का सामना करना पड़ रहा है।आरईएसटी एपीआई, पथ चर बनाम अनुरोध पैराम

मैं follwing यूआरआई:

  • /MyService/उपयोगकर्ताओं/: सभी उपयोगकर्ताओं को पाने के लिए
  • /MyService/उपयोगकर्ताओं/{userId}: किसी विशिष्ट उपयोगकर्ता पाने के लिए
  • /MyService/बैज/: एक विशिष्ट बा पाने के लिए: सभी बैज
  • /MyService/बैज/{badgeId} पाने के लिए डीजी

अब, मेरी समस्या यह है कि, मुझे एक विशेष बैज रखने वाले सभी उपयोगकर्ताओं को प्राप्त करने का एक तरीका लागू करना होगा। मैं विचार कर सकते हैं कि यह सिर्फ एक फिल्टर मैं उपयोगकर्ताओं की सूची पर लागू होते हैं, इसलिए निम्नलिखित uri है:

  • /MyService/उपयोगकर्ताओं/फिल्टर = बिल्ला: {} badgeId

या मैं विचार कर सकते हैं कि यह एक बिल्ला की बस एक उप-संसाधनों, इसलिए निम्नलिखित uri है:

  • /MyService/बैज/{badgeId}/उपयोगकर्ताओं/

कौन सा 'रीस्ट-अनुरूप' होना चाहिए?

मुझे कहना होगा कि मैंने इस विषय पर विशेष रूप से यह एक पोस्ट पढ़ा है: Rest Standard: Path parameters or Request parameters लेकिन वे मेरी समस्या को कवर नहीं करते हैं।

+2

आरईएसटी के बारे में कोई राय नहीं है कि आपका यूआरआई कैसा दिखता है। या तो एक "रीस्ट अनुपालन" –

+0

एफवाईआई जैसा है, मैंने आपके द्वारा उल्लिखित प्रश्न पर एक शॉट लिया, आपको [उत्तर] (http://stackoverflow.com/a/31118242) में रुचि हो सकती है। – tne

उत्तर

0

मैं /myservice/users/?filter=badge:{badgeId} पसंद करता हूं और मुझे लगता है कि अधिक एपीआई इस प्रारूप का उपयोग करते हैं।

5

यदि आप रीस्टफुल करना चाहते हैं, तो HATEOAS (भयानक संक्षिप्त नाम, लेकिन वास्तव में सही होने की कुंजी) का उपयोग करने पर विचार करें।

HATEOAS का उपयोग करना, अपना बैज प्रतिनिधित्व कुछ इस तरह दिखाई दे सकता है:

<badge> 
    <id>1234</id> 
    <name>Admin</name> 
    <link rel = "/rel/users" 
     href = "/myservice/users?badge=1234" /> 
    <link rel = "self" 
     href = "/myservice/badges/1234" /> 
</badge> 

यह अनुमति देता है अपने ग्राहकों को अपने सर्वर की URI योजना से decoupled किया जा के रूप में वे बस जो कुछ भी href/rel/उन लिंक प्रदान करता है पर मिलता है। अनुमोदित है कि आपके सर्वर को अभी भी एक यूआरआई योजना को आंतरिक रूप से परिभाषित करने की आवश्यकता है, लेकिन यदि सड़क पर किसी बिंदु पर आप निर्णय लेते हैं कि आप इसकी परवाह नहीं करते हैं, तो आप आसानी से इसे अपने ग्राहकों को तोड़ने के बिना बदल सकते हैं। यूआरआई से प्रभावित नहीं हैं/उन संबंध लिंक/rel का उपयोग कर

<badge> 
    <id>1234</id> 
    <name>Admin</name> 
    <link rel = "/rel/users" 
     href = "/myservice/badges/1234/users" /> 
    <link rel = "self" 
     href = "/myservice/badges/1234" /> 
</badge> 

ग्राहक: उदाहरण के लिए, यदि आप अपने दूसरा विकल्प है, जो आपके बिल्ला प्रतिनिधित्व का कारण होता है करने के लिए अपने URI योजना बदलने के लिए यह करने के लिए बदलने के लिए चाहते हो सकता है परिवर्तन। यह क्या उबलता है ... हैटोस का उपयोग करें, और यूआरआई योजना वास्तव में पर कोई फर्क नहीं पड़ता।

चीयर्स!

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