2013-04-23 11 views
6

मैं एक इवेंट मैनेजमेंट सिस्टम बना रहा हूं। स्कीमा नीचे वर्णित है। एपीआई इन संबंधों को समझता है और अनुरोध परिणामों में संबंधित संसाधनों के लिंक देता है। उदाहरण के लिए,REST - संबंधों का विस्तार

GET /Events/1 

    "links": { 
    "Venue": "/Venues/1", 
    "Tickets": "/Tickets?event_id=1", 
    "Teams": "/Teams?event_id=1", 
    "Registrations": "/Registrations?event_id=1" 
} 

मैं क्या बाकी के बारे में पढ़ा है और HATEOAS पता चलता है यह "सही" जिस तरह से यह करने के लिए है के अधिकांश लेकिन यह बहुत अक्षम है। उदाहरण के लिए, यदि मैं किसी ईवेंट में भाग लेने वाले उपयोगकर्ताओं और टीमों की एक रिपोर्ट जेनरेट करना चाहता हूं तो इसे कई अनुरोधों की आवश्यकता है। डीबी के खिलाफ एक भीड़ क्वेरी चलाने के बजाए यह कई चुनिंदा प्रश्नों को चलाने के समान है। तो मेरा सवाल यह है कि, क्या मुझे संसाधन अनुरोध के भीतर संबंधों का विस्तार करना चाहिए और संबंधित संसाधनों को एम्बेड करना चाहिए? यह एक समस्या उत्पन्न करता है बी/सी उपर्युक्त अनुरोध डेटा के बहुत सारे वापस लौटाएगा। उत्तर संबंध संबंधों के साथ रहना और उचित कैशिंग सेटअप करना हो सकता है। भले ही, मैं आपकी राय चाहूंगा।

Schema 

events 
    hasMany registrations 
    hasMany tickets 
    hasMany teams 

team 
    belongsTo event 

ticket 
    belongsTo event 
    hasMany registrations 

user 
    hasMany registrations 

registrations 
    belongsTo event 
    belongsTo ticket 
    belongsTo user 
    belongsTo team 

उत्तर

6

किसी अन्य अनुरोध के शरीर में संसाधनों का पूर्ण प्रतिनिधित्व लौटने में कुछ भी गलत नहीं है। जैसा कि आपने उल्लेख किया है, यह वर्बोज़ पक्ष पर हो सकता है।

यह देखते हुए कि सेवा के कुछ कॉलर केवल यूआरआई लौट सकते हैं लेकिन कभी-कभी आप नेटवर्क पर राउंड ट्रिप की संख्या को कम करना चाहते हैं, यानी, आप एक कॉल में सबकुछ चाहते हैं, तो आप जिस शब्द को खोज रहे हैं, अनुमान

ये आपके संसाधनों के ग्राहक के ज़रूरतों के अनुरूप विभिन्न संसाधन हैं।

आप एक URI पैरामीटर में इन निर्दिष्ट कर सकते हैं, उदाहरण के लिए, GET /Events/1?venueProjection=full,teamProjection=uri

और फिर क्या ग्राहक से पूछा के अनुसार प्रक्षेपण लौट आते हैं।

"links": { 
"Venue": { 
    "uri": "/Venues/1", 
    "attr1": "value1", 
    "attrN": "valueN" 
}, 
"Tickets": "/Tickets?event_id=1", 
"Teams": "/Teams?event_id=1", 
"Registrations": "/Registrations?event_id=1" 
} 

नोट: हमेशा अपने अनुमानों के साथ यूआरआई लौट ताकि, अगर वे पूरा नहीं कर रहे हैं, ग्राहक बाद में पूर्ण संसाधन के लिए आसान पहुँच है।

मेरा सुझाव है कि आप Google से "बाकी अनुमान" के आसपास कुछ पढ़ रहे हैं या रीस्टफुल कुकबुक देखें।

+0

धन्यवाद। मैं आपको नहीं बता सकता कि मैंने ऑनलाइन कितने गाइड/ट्यूटोरियल पढ़े हैं और इस शब्द या अवधारणा का सामना कभी नहीं किया। – newb1123

+0

इस शब्द के बारे में कुछ भी नहीं मिला ...: एस बीटीडब्ल्यू। टिकट, टीम, पंजीकरण तारों की बजाय एक एकल यूआरएल संपत्ति के साथ वस्तुओं होना चाहिए। क्लाइंट के साथ उन्हें संसाधित करना आसान है ... – inf3rno

+0

मुझे इसे रीस्टफुल कुकबुक से मिला। यह मूल सामग्री बातचीत या हजारों प्रतिनिधियों के उपयोग के बिना मूल रूप से "प्रतिनिधित्व" को ट्यून करने का एक और तरीका है। यह आपको आवश्यक प्रतिनिधित्व के लिए अनिवार्य रूप से एक विनिर्देश परिभाषित करने की अनुमति देता है। http://www.amazon.co.uk/RESTful-Services-Cookbook-Subbu-Allamaraju/dp/0596801688/ref=sr_1_1?ie=UTF8&qid=1378368152&sr=8-1&keywords=rest+cookbook – James

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