प्रसंग
रेस्ट आर्किटेक्चरल स्टाइल के वैधानिकता के कारण जिसमें प्रत्येक अनुरोध पूरी तरह से अकेला होता है, अग्रणी सर्वर कभी भी क्लाइंट के बारे में कोई भी जानकारी संग्रहीत नहीं करता है।
इस प्रकार, निराशावादी संगामिति नियंत्रण उपयुक्त नहीं है क्योंकि इसके लिए उस सर्वर स्टोर की आवश्यकता होती है जो क्लाइंट को संसाधन पर लॉक मिलता है। आशावादी समवर्ती नियंत्रण का उपयोग तब Etagहेडर की सहायता से किया जाता है । (btw, जैसा कि मैंने वहां पूछा /programming/30080634/concurrency-in-a-rest-api )
मुसीबत
एक आशावादी संगोष्ठी नियंत्रण तंत्र के साथ मुख्य समस्या यह है कि आप किसी भी ऑपरेशन को करने के लिए हर समय, सभी ग्राहकों को अनुमति देते हैं।
और मैं इससे बचना चाहूंगा कि REST के आधारहीनता सिद्धांत को तोड़े बिना। मेरा मतलब है कि सभी क्लाइंट किसी भी समय कोई भी ऑपरेशन नहीं कर सकते हैं।
सवाल
मेरे दिमाग में, यह एक अर्ध-आशावादी संगामिति नियंत्रण तंत्र के साथ संभव होगा , जैसे:
- ग्राहक टोकन के लिए अनुरोध कर सकते हैं
- केवल एक टोकन उत्पन्न किया जा सकता है और इसकी वैधता की सीमित अवधि होती है
- संसाधनों (जैसे POST या PUT ) पर संचालन करने के लिए , क्लाइंट को अनुरोध के मुख्य भाग (या हेडर?) के हिस्से के रूप में यह टोकन देना होगा। जिस ग्राहक के पास टोकन नहीं है, वह इन कार्यों को नहीं कर सकता है।
यह आशावादी समवर्ती नियंत्रण के समान है, सिवाय इसके कि केवल एक ग्राहक कुछ ऑपरेशन कर सकता है (एक जो टोकन मिला है) ... "सभी क्लाइंट सभी ऑपरेशन कर सकते हैं" के विपरीत।
क्या यह तंत्र REST वास्तु शैली के अनुकूल है? क्या यह उसके किसी अवरोध को तोड़ता है? मैं SO पर पूछने के लिए सोच रहा था, लेकिन यह एक उच्च स्तरीय प्रश्न लगता है, जो सॉफ्टवेयर डिजाइन से संबंधित है।
Etag? आपके साथ Etagयह निश्चित नहीं है कि आपके ऑपरेशन पूरे हो जाएंगे, आपके पास ऐसी स्थिति हो सकती है जहां आप कभी भी कोई ऑपरेशन नहीं करेंगे। एक लॉक के साथ, आप कम से कम अपना ऑपरेशन करने के लिए सुनिश्चित हैं। इसलिए एक साधारण ताला एक ऐसे वातावरण के बीच का एक मध्य है जहां "उच्च संघर्ष" और "दुर्लभ संघर्ष" हो सकते हैं।
Transactionएक संसाधन के रूप में स्पष्ट रूप से मॉडल करना होगा ।