एक पुनरावर्ती संसाधन के लिए सबसे अच्छा RESTful URL संरचना क्या है?


10

मैं एक पेड़ जैसी संसाधन संरचना के लिए एक RESTfull सेवा बना रहा हूं और सोच रहा था कि सबसे अच्छा URL संरचना क्या होगी?

मेरी तीन आवश्यकताएं हैं:

  1. रूट संसाधनों का एक संग्रह प्राप्त करने में सक्षम हो
  2. एक व्यक्तिगत संसाधन प्राप्त करने में सक्षम हो
  3. बाल संसाधनों का एक संग्रह प्राप्त करने में सक्षम होना

मेरा वर्तमान विचार है:

/rest/documents
/rest/documents/{id}
/rest/documents/{id}/documents

मैं सूचियों या व्यक्तिगत तत्वों को निरूपित करने के लिए एकवचन / बहुवचन मार्गों पर जाने के बारे में भी सोच रहा था, लेकिन मुझे पता है कि मेरे पास एक संसाधन है जो एक ही बहुवचन है क्योंकि यह एकवचन है, इसलिए इसके खिलाफ निर्णय लिया गया।

क्या किसी के ऊपर कोई विचार है? या इसकी संरचना का एक अलग / बेहतर तरीका है?


मैं इस प्रश्न को गलत समझ सकता हूं लेकिन जैसा कि हम यूआरएल के बारे में बात कर रहे हैं एसईओ एक मुद्दा है?
जॉन हॉपकिंस

एसईओ एक मुद्दा नहीं है, नहीं। मैं मूल रूप से एक आत्म संदर्भित संसाधन के लिए सर्वश्रेष्ठ तार्किक URL संरचना पूछ रहा हूं।
मैट ब्रिल्सफोर्ड

यह मेरे लिए बहुत सीधा लगता है।
टिम पोस्ट

वह ढांचा कितना गहरा जा सकता है?
मार्टिज्न वर्बर्ग 13

@ मर्टिज़न गहराई अन-प्रतिबंधित है
मैट ब्रिल्सफ़ोर्ड

जवाबों:


12

मेरे दिमाग में क्या आता है: आप RESTful API को URL में पुनरावृत्ति को प्रतिबिंबित करने न दें। यह सोचने के लिए आओ, आपका संसाधन केवल दस्तावेज है।

यदि आपके पास अपने दस्तावेज़ों को पुनरावर्ती संरचना के अनुसार भौतिक रूप से संग्रहीत किया गया है, तो एक अद्वितीय आईडी के लिए एक मानचित्रण बनाएं, और URL में आईडी का उपयोग करें:

/rest/documents/{id}

अब, यदि आपके पास इस तरह से अपने दस्तावेज़ हैं:

| दस्तावेज़नाम | दस्तावेजपाठ | DocumentID |
--------------------------------------------
| एबीसी | / एबीसी | 1 |
| asd | / abc / asd | 2 |
| asd | / asd | 3 |
| बू | / abc / asd / boo | 4 |
| अरे | / abc / asd / हे | 5 |

अनुरोध इस /abc/asdदस्तावेज़ के लिए यूआरएल से परामर्श करेगा

GET /rest/documents/2

तो, अब आपको अपने एपीआई के उपयोगकर्ताओं को थोड़े प्रयास के साथ अपनी संरचना को पार करने का साधन प्रदान करना होगा। आपके प्रतिक्रिया पेलोड (दस्तावेज़) को एक वस्तु में लपेटकर किया जा सकता है, इस तरह के अतिरिक्त त्रैमासिक जानकारी युक्त:

{
   data: { /* your document goes here */ },
   parent: {"abc": 1 },
   children: [ { "boo": 4 }, { "hey": 5} ]
}

बशर्ते कि आप उपयोगकर्ताओं से एक ही स्तर में बहुत अधिक दस्तावेज़ नहीं बनाने की अपेक्षा करते हैं, आप प्रतिक्रिया में बच्चों की सूची शामिल कर सकते हैं। यदि ऐसा नहीं है तो आप उपयोगकर्ता को बाल दस्तावेज आईडी प्राप्त करने की पेशकश कर सकते हैं, उदाहरण के लिए, जैसे कि मानकों को पूरा करने के लिए अनुमति देना:

GET /rest/documents/2/children?page=2&size=50

अंत में, querystring मापदंडों की बात करते हुए, आप सीधे querystring पैरामीटर के माध्यम से पथ की जानकारी भी दे सकते हैं:

GET /rest/documents?path=somepath&page=1&size=42

उल्लिखित सभी दृष्टिकोणों से उम्मीद है कि सादे GET /rest/documentsकेवल मूल दस्तावेज लौटाते हैं।


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

2

कुछ इस तरह शायद:

/rest/{rootEntity}/Item/{leafEntity}/{id}
/rest/{entity}/ItemList
/rest/{entity}/ItemList/{leafEntity}

जहाँ {rootEntity} आपके संग्रह का प्रारंभिक बिंदु है, {leafEntity} आपके पेड़ के भीतर किसी भी नाम का लीफ नोड है।

आप नवीनतम या सभी या कुछ का चयन करने के लिए उपरोक्त में से कुछ मापदंडों को जोड़ सकते हैं।

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