मैं वर्तमान में एक मौजूदा PHP अनुप्रयोग के लिए एपीआई डिजाइन कर रहा हूं, और अंत में एक समझदार वास्तुकला दृष्टिकोण के रूप में आरईएसटी की जांच कर रहा हूं।रीस्टफुल एपीआई में ऑब्जेक्ट पदानुक्रमों से मुझे कैसे निपटना चाहिए?
मेरा मानना है कि मेरे पास महत्वपूर्ण अवधारणाओं का उचित ज्ञान है, लेकिन मैं ऑब्जेक्ट पदानुक्रमों और आरईएसटी से निपटने वाले किसी भी व्यक्ति को ढूंढने के लिए संघर्ष कर रहा हूं।
Users
L which have one-to-many Channel objects
L which have one-to-many Member objects
आवेदन ही हम की सरणियों के साथ उपयोगकर्ता वस्तु को भरने के लिए एक आलसी लोड दृष्टिकोण का उपयोग में:
यहाँ समस्या ...
[आवेदन] व्यापार वस्तु पदानुक्रम में हमारे पास है आवश्यकतानुसार इन वस्तुओं। मैं ओओ शब्दों में विश्वास करता हूं कि यह ऑब्जेक्ट एकत्रीकरण है, लेकिन मैंने विभिन्न नामकरण विसंगतियों को देखा है और सटीक नामकरण सम्मेलन के बारे में युद्ध शुरू करने की परवाह नहीं है।
अभी के लिए, मान लीजिए कि मेरे पास कुछ कमजोर युग्मित वस्तुएं हैं जिन्हें मैं आवेदन आवश्यकता के आधार पर पॉप्युलेट नहीं कर सकता/सकती हूं।
एक आरईएसटी परिप्रेक्ष्य से, मैं यह पता लगाने की कोशिश कर रहा हूं कि दृष्टिकोण क्या होना चाहिए। पूरी तरह से पॉप्युलेट वस्तुओं -
विकल्प 1::
GET api.example.com/user/{user_id}
उपयोगकर्ता ऑब्जेक्ट (संसाधन) पढ़ें और सभी के साथ उपयोगकर्ता ऑब्जेक्ट प्रदान यहाँ मेरी वर्तमान सोच है (कुछ समय के लिए ही प्राप्त पर विचार) संभावित चैनल और सदस्य ऑब्जेक्ट्स प्री-लोडेड और एन्कोडेड (जेएसओएन या एक्सएमएल)।
पेशेवरों: वस्तुओं की संख्या को कम करने, वस्तु पदानुक्रम का कोई ट्रेवर्सल आवश्यक
कान्स: वस्तुओं को पूरी तरह से आबादी वाले किया जाना चाहिए (महंगा)
विकल्प 2 - प्राथमिक वस्तु को पॉप्युलेट और अन्य वस्तु संसाधनों के लिए लिंक शामिल हैं:
GET api.example.com/user/{user_id}
उपयोगकर्ता ऑब्जेक्ट (संसाधन) पढ़ें और उपयोगकर्ता वस्तु उपयोगकर्ता डेटा आबादी वाले और दो सूचियों लौट आते हैं।
प्रत्येक सूची का संदर्भ उचित (उप) संसाधन यानी
api.example.com/channel/{channel_id}
api.example.com/member/{member_id}
मुझे लगता है कि इस के पास (या वास्तव में) हाइपरमीडिया के निहितार्थ है - जब तक ग्राहक अन्य संसाधनों प्राप्त कर सकते हैं अगर यह चाहता है (मैं उन्हें समझदारी से टैग)।
पेशेवरों: ग्राहक मातहत या अन्यथा, बाकी संसाधनों के रूप में वस्तुओं की बेहतर जुदाई लोड करने के लिए चुन सकते हैं
कान्स: आगे माध्यमिक संसाधनों
विकल्प 3 प्राप्त करने के लिए आवश्यक यात्रा - सक्षम पुनरावर्ती retrieves
GET api.example.com/user/{user_id}
उपयोगकर्ता ऑब्जेक्ट पढ़ें और उप-ऑब्जेक्ट्स की सूचियों के लिंक शामिल करें यानी
api.example.com/user/{user_id}/channels
api.example.com/user/{user_id}/members
/चैनलों कॉल के रूप में चैनल संसाधनों की एक सूची वापस होगा (ऊपर के रूप में):
api.example.com/channel/{channel_id}
पेशेवरों: प्राथमिक संसाधनों का पर्दाफाश जहां subodinates प्राप्त करने के लिए, लेकिन वे क्या नहीं कर रहे हैं जाने के लिए (अधिक विश्वसनीय?), अधीनस्थों को आगे बढ़ाने के लिए कोई आवश्यकता नहीं है, अधीनस्थ सूची जनरेटर (/ चैनल और/सदस्य) इंटरफेस प्रदान करते हैं (जैसे विधि) प्रतिक्रिया को और अधिक सेवा प्रदान करते हैं।
कान्स: तीन कॉल अब पूरी तरह से वस्तु को भरने के लिए आवश्यक
विकल्प 4 - (पुनः) बाकी
मैं कर रहा हूँ [मौजूदा] आवेदन वस्तु पदानुक्रम फिर से उपयोग करने और करने की कोशिश कर के लिए वस्तु डिजाइन पर विचार इसे आरईएसटी पर लागू करें - या शायद अधिक सीधे, इसे एपीआई इंटरफ़ेस प्रदान करें।
शायद आरईएसटी ऑब्जेक्ट पदानुक्रम अलग होना चाहिए, या शायद नई रीस्टफुल सोच मौजूदा ऑब्जेक्ट डिज़ाइन की सीमाओं को उजागर कर रही है।
उपर्युक्त पर किसी भी विचार का स्वागत है।
बहुत धन्यवाद
पॉल
मेरी खोज में मुझे लेखों का यह सेट भी मिला है जो मुझे बहुत उपयोगी और सुलभ पाया गया: http://www.infoq.com/minibooks/emag-03-2010-rest – paulkmoore
यदि आप एक की तलाश में हैं उन सभी शैलियों के लिए JSON- आधारित मीडिया प्रकार, शोजी पर विचार करें: http://www.aminus.org/rbre/shoji/shoji-draft-02.txt – fumanchu