2009-03-31 10 views
8

रीस्टफुल डिज़ाइन फ्लैट या उथले संरचित प्रस्तुतियों की वकालत करता है (कम से कम जब संसाधन एक्सएमएल के रूप में प्रदर्शित होते हैं)। संसाधन प्रतिनिधित्व में केवल संसाधन होना चाहिए, जिसे यूआरआई पहचानता है। मैं सोच रहा हूं कि संसाधन संसाधन के उप-संसाधनों को मूल संसाधन के भीतर पेश करना समझदार है?रीस्टफुल संसाधन प्रतिनिधित्व में उप-आइटम कब शामिल करना है?

विस्तृत करने के लिए, इस पर विचार करें: कंपनी के कई कर्मचारी हो सकते हैं। आम तौर पर इस स्थिति को दो अलग-अलग संसाधन, कंपनी और कर्मचारी के रूप में डिजाइन किया जाएगा, जहां कर्मचारी कंपनी के उप-संसाधन होंगे।

/company/acme/ 
/company/acme/employees/ 
/company/acme/employee/john 
इस URI डिजाइन के साथ

, कंपनी प्रतिनिधित्व अपने कर्मचारियों के लिंक शामिल करना चाहिए, लेकिन एक्सएमएल प्रतिनिधित्व शायद शामिल नहीं होगा emplyoyees से प्रति।

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

<company> 
<name>Acme</name> 
<employees> 
    <employee>John</employee> 
    <employee>Jack</employee> 
</employees> 
</company> 

यह एक संसाधन का उपयोग केवल एक ही विधि पेशकश करने के लिए समझदार है: एक माता पिता अपने उप-आइटम को उजागर करता है, वहाँ भी उप आइटम के लिए एक स्पष्ट यूआरआई हो सकता है? इसलिए, अगर कंपनी के एक्सएमएल में कंपनी के कर्मचारी शामिल हैं, तो क्या यह कंपनी के संसाधन के माध्यम से एक ही जानकारी प्राप्त कर सकता है इसके बावजूद कंपनी/एसीएम/कर्मचारियों को प्रदान करने के लिए यह समझदारी होगी?

+0

@ मासिव मैंने अपने उत्तर को संपादित करके थोक अपडेट में समवर्ती मुद्दों से निपटने के बारे में आपके प्रश्न का उत्तर दिया है। उम्मीद है की यह मदद करेगा! –

उत्तर

8

यदि उप-संसाधन केवल अपने माता-पिता के संदर्भ में समझ में आता है, तो हाँ, इसे अपने माता-पिता के भीतर घोंसला वापस किया जाना चाहिए। उदाहरण के लिए, एचटीएमएल में, <li> तत्व अपने उप-संसाधन के रूप में समझ में नहीं आता है।

हालांकि, यदि कोई संसाधन अकेले खड़ा हो सकता है, और आप किसी अन्य संसाधन से स्वतंत्र संसाधनों में हेरफेर करना चाहते हैं, तो इसका अपना यूआरआई होना चाहिए। इस तरह, आप अन्य संसाधनों को प्रभावित किए बिना उस संसाधन को पोस्ट या PUT कर सकते हैं, और उन्हें सर्वर पर वापस तोड़ने के बिना। अगर आपको माता-पिता से सब कुछ छेड़छाड़ करना पड़ता है, तो सोचें कि क्या होता है यदि कोई व्यक्ति जीईटी करता है, एक सब-आइटम संशोधित करता है, और उसके बाद उस सब-आइटम के साथ पूरी चीज का एक पुट बदल जाता है; क्या होगा अगर किसी और ने इस दौरान दूसरों में से एक को बदल दिया? फिर आपको ताले और लेनदेन संबंधी अर्थशास्त्र जोड़ने की जरूरत है, जो आरईएसटी की पूरी स्टेटलेसनेस को हरा देता है।

कम से कम अनुरोध प्राप्त करने के लिए, यह एक अच्छा विचार होने की संभावना है कि थोक क्वेरी इंटरफ़ेस का कुछ रूप हो, जिसके द्वारा ग्राहक एक बार में बड़ी संख्या में संसाधन प्राप्त कर सकता है; प्रत्येक संसाधन के लिए एक नया HTTP अनुरोध करने में काफी समय लग सकता है, क्योंकि इसका मतलब प्रत्येक जीईटी के लिए नेटवर्क पर एक नई राउंड ट्रिप है। यह भी थोक अद्यतन कार्यक्षमता होने के लिए समझ में आता है। लेकिन यदि आप एक समय में एक संसाधन में हेरफेर करने में सक्षम होना चाहते हैं, तो आपको उस संसाधन के लिए यूआरआई प्रदान करने की आवश्यकता है।

और हां, संसाधनों तक पहुंचने के एक से अधिक तरीकों के लिए यह बिल्कुल ठीक है। आप इसे ब्लॉग की तरह सोच सकते हैं; आप मुख्य पृष्ठ, या संग्रह पृष्ठों पर, या उनके परमालिंक पर जाकर कहानियां प्राप्त कर सकते हैं।

संपादित:

  1. Locking: यदि आप एक क्लाइंट सर्वर को पुराना डेटा देने के लिए होने की समस्या में चलने के बिना एक बहु-अपडेट करने के लिए चाहते हैं, आप मूल रूप से दो विकल्प हैं।एक क्लाइंट सर्वर को बताता है "मैं डेटा के इस पूरे सेट पर लॉक चाहता हूं", वह डेटा लाता है जो वह संशोधित करना चाहता है, डेटा को संशोधित करता है, इसे सर्वर पर वापस भेजता है, और इसे अनलॉक करता है।
  2. Optimistic concurrency: क्लाइंट डेटा के सेट को डाउनलोड करता है, जिसे कुछ प्रकार के संशोधन टैग के साथ चिह्नित किया जाता है, जब सर्वर हर बार नया डेटा बदलता है। ग्राहक इसे संशोधित करता है, और इसे सर्वर पर वापस भेजता है। यदि सेट में मौजूद किसी अन्य डेटा को संशोधित किया गया है, तो संशोधन टैग डेटा से बाहर हो जाएगा, और सर्वर "क्षमा करें, आपका डेटा पुराना है, पुनः प्रयास करें" के साथ जवाब देगा।

इन दोनों के पास फायदे और नुकसान हैं। लॉकिंग के साथ समस्या यह है कि यह राज्यपूर्ण है, और इसलिए एक आरईएसटी आर्किटेक्चर में फिट नहीं है। यदि क्लाइंट प्रोग्राम लॉक होने पर क्रैश हो जाता है या अन्यथा मर जाता है, तो उस डेटा को स्थायी रूप से लॉक कर दिया जाएगा जब तक कि आपके पास कुछ प्रकार का लॉक टाइमआउट न हो, जो मुश्किल हो सकता है। लॉकिंग भी डेडलॉक का कारण बन सकती है यदि ग्राहक कुछ प्रकार के फैंसी लेन-देन कर रहे हैं जिनमें एकाधिक ताले शामिल हैं।

आशावादी समेकन के साथ समस्या यह है कि यदि डेटा सेट पर उच्च भार होता है, तो बहुत से ग्राहक इसे एक साथ बदलते हैं, यह कई ग्राहक ले सकते हैं, इससे पहले कि कोई ग्राहक अपना डेटा पोस्ट कर सके; वास्तव में, एक धीमी ग्राहक अद्यतन पोस्टिंग से पूरी तरह से कट ऑफ हो सकता है क्योंकि अन्य क्लाइंट लगातार डेटा को बदलते हैं जिसका मतलब है कि धीमी क्लाइंट हमेशा बदलते हैं।

आपको अपने लिए यह तय करना होगा कि इनमें से कौन सा विकल्प आपको अनुकूल बनाता है। ये समस्याएं तब भी आती हैं जब एक संसाधन को बदलते हैं (एक अपडेट दूसरे को पकड़ सकता है), लेकिन जब आप थोक इंटरफ़ेस में संसाधन एकत्र करते हैं, तो वे बहुत अधिक बार आते हैं। यही कारण है कि यदि आप संसाधनों को एकत्रित करने जा रहे हैं, तो मैं दो इंटरफेस रखने की अनुशंसा करता हूं; एक जिसमें संसाधनों को व्यक्तिगत रूप से एक्सेस किया जा सकता है, और वैकल्पिक थोक इंटरफ़ेस जहां कई संसाधनों को एक बार में पढ़ और लिखा जा सकता है।

+0

उत्तर के लिए धन्यवाद। थोक अपडेट के बारे में, आप डेटा के अखंडता के समझौता किए बिना इस सुविधा को कैसे कार्यान्वित कर सकते हैं जैसा कि आप अपने उत्तर के दूसरे पैराग्राफ में बताते हैं? – massive

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