2013-02-03 24 views
7

मैंने अपने आरईएसटी संसाधनों के लिए आशावादी लॉकिंग लागू की है जिसमें पीईटी कॉल के माध्यम से वापस प्राप्त करने वाले संस्करण संख्या को वापस पास करके डेटाबेस टेबल पर 1-से-1 मैपिंग है। यदि डेटा GET और PUT के बीच डेटाबेस में संस्करण संख्या बदल गई है, तो एक आशावादी लॉक अपवाद हुआ है। बहुत सरल डिजाइन।आप आरईएसटी में मोटे अनाज वाले आशावादी लॉक को कैसे कार्यान्वित करते हैं?

अब, मैं समग्र आरएसटी संसाधनों के लिए ऐसा कैसे करूं जो एकाधिक डेटाबेस टेबल पर मैप करते हैं? मैं एकाधिक संस्करण फ़ील्ड को वापस पास नहीं करना चाहता (एक समग्र डेटा से संबंधित प्रत्येक डेटा तालिका के लिए एक)। एक समग्र संसाधन का एक सरल उदाहरण/FooBar होगा जहां/Foo और/Bar गैर-समग्र संसाधन हैं।

मैं मूल रूप से फाउलर की स्थूल कणों का ताला लगा पैटर्न के बाकी implemetation का एक उदाहरण के लिए देख रहा हूँ: http://martinfowler.com/eaaCatalog/coarseGrainedLock.html

+0

आपकी आरईएसटी सेवा में आप केवल संस्करणों को इकट्ठा कर सकते हैं और उन्हें एक ऐसे मानचित्र में डाल सकते हैं जो विशिष्ट रूप से जेनरेट की गई आईडी द्वारा बनाई गई है जो संस्करण का प्रतिनिधित्व करता है? फिर उसे क्लाइंट को भेजें और उन्हें संपादित करने के बाद इसे वापस भेज दें? फिर आप इकाइयों के ग्राफ के संस्करण प्राप्त करने के लिए उस आईडी का उपयोग कर सकते हैं। –

उत्तर

5

यह वही है ETag header के लिए डिजाइन किया गया है। इसे लागू करने का एक बहुत ही आम तरीका है अपने प्रतिक्रिया पेलोड का उत्पादन करना, इसके एक हैश बनाना (इसे सुरक्षित होना जरूरी नहीं है, केवल कम टक्कर), और फिर उस हैश का उपयोग ईटीएजी के मूल्य के रूप में करें। ध्यान दें कि यह दृष्टिकोण अनजान है कि प्रतिक्रिया उत्पन्न करने में कितने स्रोत शामिल हैं।

क्लाइंट ETag को If-Match शीर्षलेख में वापस भेजता है, जिसे सर्वर अनुरोध की ताजगी की जांच करने के लिए उपयोग कर सकता है।

+0

और यदि यह पर्याप्त "ताजा" नहीं है, तो HTTP सर्वर एक [40 9 (संघर्ष) स्थिति कोड भेजता है] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.10)। –

+0

वास्तव में 412। Http://tools.ietf.org/html/draft-ietf-httpbis-p4-conditional-21#section-3.1 – fumanchu

+0

हम्म, दिलचस्प देखें। विनिर्देश तब लचीला है, क्योंकि 40 9 में उदाहरण काफी स्पष्ट है: "उदाहरण के लिए, यदि संस्करण का उपयोग किया जा रहा था और इकाई को PUT में संसाधन में परिवर्तन शामिल किया गया था जो पहले (तृतीय-पक्ष) अनुरोध द्वारा किए गए लोगों के साथ संघर्ष करता था, तो सर्वर 40 9 प्रतिक्रिया का उपयोग यह इंगित करने के लिए कर सकता है कि यह अनुरोध पूरा नहीं कर सकता "। –