2012-01-25 23 views
5

मैं Django के लिए एक आरईएसटी ढांचा चुनने की कोशिश कर रहा हूं जो मुझे आशावादी लॉकिंग के लिए आसानी से ईटैग का उपयोग करने की अनुमति देगा। मैं Django-पिस्टन और Django रेस्ट फ्रेमवर्क पुस्तकालयों की जांच करने की योजना बना रहा हूं, लेकिन मैं किसी भी गैर-जीपीएल समाधान के लिए खुला हूं (कॉर्पोरेट लाइसेंसिंग आवश्यकताओं को उन लोगों का उपयोग करने से रोकें)।एक Django REST अनुप्रयोग में आशावादी लॉकिंग के लिए ईटाग का उपयोग

मेरा आवेदन जेएसओएन/वाईएएमएल फॉर्म में एक एसक्लाक्लेमी मॉडल (एक Django मॉडल नहीं) से डेटा वेंडिंग कर रहा है, और मॉड्यूलो इटाग मुद्दा Django Rest Framework के साथ ठीक काम कर रहा है। हालांकि, मैं अपने विचारों पर ईटाग शीर्षकों को लागू करने का एक आसान तरीका नहीं देख सकता हूं।

अपने विचार के लिए, मैं ऐसा करना चाहते हैं:

  1. एक प्रतिक्रिया को देखते हुए, आसानी से प्रतिक्रिया हेडर मैं सफलता पर बाहर भेज रहा करने के लिए एक ETag जोड़ें। इसकी गणना मेरे द्वारा की जानी चाहिए, क्योंकि यह मॉडल निर्भर होगा; प्रतिक्रिया मूल्य या उसके जैसा कुछ भी हैश करने के लिए पर्याप्त नहीं है।

  2. पोस्ट/पुट पर, सुनिश्चित करें कि मैं जिस ईटीएजी को प्राप्त कर रहा हूं उससे मेल खाता हूं, या अनुरोध को अस्वीकार करता हूं।

यह चरण 1 है जो मुझे कुछ परेशानी दे रहा है; मुझे यकीन नहीं है कि कौन सी आरईएसटी ढांचा यह आसान बना देगा, और न ही मुझे यकीन है कि सर्वोत्तम इसे पूरा करने का तरीका है।

उत्तर

0

ढांचे का विकल्प कोई फर्क नहीं पड़ता। किसी भी मामले में, आपको संसाधन की स्थिति का प्रतिनिधित्व करने वाले कैश (memcache या redis) में एक etag बनाए रखना होगा। आप जेनरेशनल कैशिंग एल्गोरिदम (https://signalvnoise.com/posts/3113-how-key-based-cache-expiration-works) का उपयोग कर सकते हैं। फिर आप आसानी से एक मिश्रण लिख सकते हैं जो हर संसाधन के etag निष्कर्ष निकालता है और भेजता है। मेरे व्यक्तिगत अनुभव में, इसके भारी लचीलापन और अच्छी तरह लिखित कोड के कारण, Django Rest Framework इसके लिए निष्क्रिय होगा।