मुझे एक विश्वसनीय एपीआई डिजाइन और कार्यान्वित करने के लिए कहा गया है, और सर्वोत्तम प्रथाओं का शोध कर रहा है, लेकिन अभी तक संसाधन प्रस्तुतियों के बारे में केवल एक ऊनी अवधारणा है। मुझे मिले अधिकांश उपलब्ध उदाहरण एपीआई ग्राहकों पर भारी ध्यान केंद्रित करते हैं जो जीईटी की श्रृंखला का उपयोग करके जुड़े ढांचे को चलते हैं।लिंक के साथ आरईएसटी संसाधन प्रतिनिधित्व, पीयूटी के साथ संगत और
मैं पर ध्यान दिया है:
http://www.restapitutorial.com/media/RESTful_Best_Practices-v1_1.pdf
http://www.youtube.com/watch?v=HW9wWZHWhnI
अन्य ऑनलाइन संसाधनों के बीच(मैं माफी उन सब को सूचीबद्ध नहीं कर सकता 2 लिंक करने के लिए सीमित कर रहा हूँ)। वे सभी महान हैं, लेकिन वास्तव में मेरे डिजाइन प्रश्न को संबोधित नहीं करते हैं।
सबसे अच्छा अभ्यास दस्तावेजों में से अधिकांश दो बातें बताते हैं कि मेरे लिए संघर्ष में थोड़ा देखो:
1) बाकी सेवा संसाधनों के बीच लिंक के रूप में डेटा रिश्तों का प्रतिनिधित्व करना चाहिए
2) एक एक से अनुरोध "डाल" क्लाइंट को पूर्ण प्रतिनिधित्व होना चाहिए, जो सर्वर पर दिखाई देने वाले प्रस्तुति के समान है।
मेरे दृष्टिकोण से परेशानी यह है कि लिंक, और शायद एक विशिष्ट संसाधन में कुछ अन्य गुण केवल पढ़ने के लिए हैं, इसलिए अपडेट नहीं किया जा सकता है। सर्वर स्पष्ट रूप से shoudl उन्हें उम्मीद करता है, और अगर यह सोचता है कि क्लाइंट उन्हें अद्यतन करने का प्रयास कर रहा है तो एक त्रुटि लौटाएं। वास्तव में, जब मैं JSON में प्रतिनिधित्व किए गए एक विशिष्ट संसाधन को देखता हूं, तो इसका अधिकांश डेटा वह डेटा होता है जो तर्कसंगत रूप से प्रतिस्थापित नहीं किया जा सकता/नहीं। जैसे
{
"link": { "rel":"self", "href":"http://example/project/12345" },
"team": {
"link": { "rel":"self", "href":"http://example/project/12345/team" },
"title": "The project team"
},
"title": "The Big Project"
}
यहाँ सबसे अच्छे रूप में केवल दो शीर्षक ग्रंथों इस संसाधन पर एक ग्राहक के लिए लिखने योग्य होना (टीम सदस्यता टीम लिंक के माध्यम से परिवर्तन के योग्य हो सकता है) होगा।
तो मुझे यह आवश्यक होना चाहिए कि एक पुट में सभी "लिंक" तत्वों को बिल्कुल समान रूप से शामिल किया जाए, जो पूरी तरह तार्किक और केवल पढ़ने योग्य हैं (उदाहरण में नोट करें, टीम को फिर से लिंक नहीं किया जा सकता है, क्योंकि संसाधन परिभाषित करता है यह परियोजना के लिए टीम के रूप में - इस मामले में इसे बदला जा सकता है, लेकिन कई संसाधन प्रकारों के लिए कठोर कंटेनरशिप के साथ, यह लागू नहीं होता है)?
क्या कई लिंक के साथ आरईएसटी में संसाधनों का प्रतिनिधित्व करने के लिए मानक पैटर्न या विरोधी पैटर्न हैं? मुझे एक विशिष्ट आरईएसटी संस्करण, जैसे हैटियोस के लिए नहीं कहा जा रहा है, हालांकि मेरा झुकाव सैद्धांतिक "शुद्धता" पर संभव है जहां संभव हो। दूसरे शब्दों में, यदि "आधिकारिक" आरईएसटी ग्राहकों को पूरे संसाधन, लिंक और सभी को पुट करने की अपेक्षा करेगा, तो शायद यही होगा कि मैं क्या करूँगा।
असली दुनिया जटिल गैर-पत्ती आरईएसटी संसाधनों के कुछ उदाहरण जो जीईटी और पीयूटी का समर्थन करते हैं, और इस प्रकार इस मुद्दे के साथ काम करना है, वास्तव में सराहना की जाएगी। जब मैं खोज करता हूं तो मुझे बहुत सारी राय मिलती है, और कई उदाहरण दिखाते हैं कि कैसे अच्छी तरह से काम करता है। । । लेकिन अब तक मैंने एक अच्छी तरह से प्रलेखित उदाहरण नहीं देखा है, लेकिन एक छोटे से पत्ते संसाधन (यानी एक जिसमें कोई लिंक नहीं है, शायद एक आत्म संदर्भ को छोड़कर) को PUT दिखा रहा है।
धन्यवाद। मेरे पेंसिल-इन डिज़ाइन में "गुण" अनुभाग शामिल है जो "बॉडी" सदस्य के विचार के समान दिखता है। मैं अपने स्वयं के पत्ते संसाधनों में ऐसी चीजों को तोड़ने पर भी विचार कर रहा हूं, जो मेरे डिजाइन (खराब) में 5 या 6 संसाधन प्रकार जोड़ देगा, लेकिन पुट विधियों को काफी सरल (अच्छा) –