2010-04-10 10 views
6

मुझे सही जवाब देने में कुछ कठिनाई आ रही है, इसलिए मैं यहां अपनी समस्या का अनुरोध करूंगा। मैं एक RESTFUL एपीआई पर काम कर रहा हूँ। स्वाभाविक रूप से, मेरे पास कई संसाधन हैं, जिनमें से कुछ माता-पिता के संबंध में माता-पिता से जुड़े हैं, जिनमें से कुछ अकेले खड़े संसाधन हैं। जहां मुझे कुछ कठिनाई हो रही है, यह पता लगाना है कि लोगों को मेरे एपीआई के खिलाफ क्लाइंट बनाने वाले लोगों के लिए चीजों को आसान कैसे बनाया जाए।रेल यूआरएल (रीस्टफुल एपीआई) पर रूबी में संसाधन मैपिंग

स्थिति यह है। Hypothetically मेरे पास एक 'स्ट्रीट' संसाधन है। प्रत्येक सड़क में कई घर हैं। तो स्ट्रीट: घरों और घरों के लिए है: स्ट्रीट। एक उपयोगकर्ता एक HTTP एक विशिष्ट घर संसाधन पर प्राप्त अनुरोध करने के लिए चाहता है, निम्नलिखित काम करना चाहिए:

http://mymap/streets/5/homes/10

एक उपयोगकर्ता सीधे आगे आईडी से 10 के साथ एक घर के लिए जानकारी प्राप्त करने के लिए अनुमति देता है कि। मेरा प्रश्न है, मैं करने के लिए उपयोगकर्ता का उपयोग देकर पुस्तक के नियमों को तोड़ने रहा है:

http://mymap/homes/10

तकनीकी तौर पर यह है कि घर संसाधन सड़क के बिना अपने आप ही मौजूद है। यह भावना बनाता है कि यह बिना किसी समाप्ति वाली सड़क के अपनी इकाई के रूप में मौजूद है, भले ही व्यापार तर्क अन्यथा कहता है।

इसे संभालने का सबसे अच्छा तरीका क्या है?

संपादित करें! एक अच्छा स्टैक ओवरफ्लो नागरिक बनने की भावना में, मैं ऊपर दिए गए कार्यान्वयन के लिए एक समर्थित कोड ब्लॉक के साथ वापस आ गया हूं।

map.resources :streets, 
       :has_many => :homes 
       :shallow => true 

इस मार्गों के दोनों प्रकार है कि मैं के लिए देख रहा था पैदा करेगा।

+0

वह उथला विकल्प दिलचस्प है। – tadman

उत्तर

5

यदि आपके होम रिकॉर्ड केवल एक स्ट्रीट से संबंधित हो सकते हैं, तो जब आप घर पर व्यक्तिगत रूप से जांच कर रहे हों तो रिश्ते भ्रमित नहीं होंगे। आप अभी भी किसी भी कारण से संबंधित स्ट्रीट रिकॉर्ड पर बैक-ट्रैक करने में सक्षम होंगे।

यह ऐसी परिस्थितियों में है जहां आपके पास कई रिश्तों की संरचना है जो आपकी आरईएसटी संरचना को कम करने में आपको परेशानी हो सकती है। यदि कोई विशेष रिकॉर्ड केवल किसी विशेष संदर्भ में समझ में आता है, और आप उस संदर्भ को हटा देते हैं, तो स्पष्ट रूप से भ्रम होता है।

मुझे लगता है कि आपके विशेष मामले में आपको दोनों दृष्टिकोणों को लागू करने की आवश्यकता नहीं हो सकती है, बल्कि इसके बजाय "चापलूसी" दृष्टिकोण के साथ जाना जो यूआरएल की जटिलता को कम करता है।

+3

यदि आप दोनों विकल्पों को _do_ प्रदान करते हैं, तो आप दूसरे से लिंक करने के लिए उनमें से एक पर 'rel = "canonical" 'का उपयोग करना सुनिश्चित करना चाहेंगे। (शायद गहरा _to_ उथले संस्करण _from_ लिंक करें।) –

0

नहीं, इस तरह उथले मार्ग काम करते हैं और बहुत उपयोग किए जाते हैं।

0

मुझे वास्तव में this दृष्टिकोण पसंद है। मैं इसे पढ़ने की सिफारिश करता हूं। संक्षेप में यह आलेख कहता है कि आपको अपने संसाधनों को 1 स्तर से अधिक घोंसला नहीं करना चाहिए। और यदि यह संभव है कि नेस्टेड संसाधन को उजागर किया जा सके, तो इसे करें।

मेरे अनुप्रयोगों में से एक में मैंने वास्तव में नेस्टेड संसाधनों के साथ चीजों को गड़बड़ कर दिया। मैं 3 या 4 गहराई तक जाता हूं और यह एक दुःस्वप्न बन जाता है ...

अगर यह चीजों को आसान बनाता है तो Nesting वास्तव में अच्छा है। यदि नहीं, तो इसे दे दो!

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