कहाँ और क्या संसाधन हैं?
REST संसाधनों के बारे में सभी को एक सांविधिक, खोजनीय तरीके से संबोधित करता है। इसे HTTP पर लागू नहीं किया जाना है, न ही इसे JSON या XML पर निर्भर करना है, हालांकि यह दृढ़ता से अनुशंसा की जाती है कि लिंक और आईडी वांछनीय होने के बाद से एक हाइपरमीडिया डेटा प्रारूप ( HATEOAS सिद्धांत देखें ) का उपयोग किया जाता है।
तो, यह सवाल बनता है: संसाधनों के संदर्भ में सिंक्रनाइज़ेशन के बारे में कोई कैसे सोचता है?
द्वि-दिशात्मक सिंक क्या है? **
द्वि-दिशात्मक सिंक नोड्स के ग्राफ पर मौजूद संसाधनों को अपडेट करने की प्रक्रिया है ताकि, प्रक्रिया के अंत में, सभी नोड्स ने उन संसाधनों को नियंत्रित करने वाले नियमों के अनुसार अपने संसाधनों को अपडेट किया हो। आमतौर पर, यह समझा जाता है कि सभी नोड्स में ग्राफ के भीतर मौजूद संसाधनों का नवीनतम संस्करण होगा। सरलतम मामले में ग्राफ में दो नोड होते हैं: स्थानीय और दूरस्थ। स्थानीय सिंक को आरंभ करता है।
इसलिए जिस प्रमुख संसाधन की आवश्यकता है, वह एक लेन-देन लॉग है और इसलिए, एक सिंक प्रक्रिया इस तरह दिख सकती है: "नीचे दिए गए" आइटम ":
चरण 1 - स्थानीय लेन-देन लॉग को पुनर्प्राप्त करता है
स्थानीय: GET /remotehost/items/transactions?earliest=2000-01-01T12:34:56.789Z
रिमोट: 200 ओके बॉडी वाले ट्रांजेक्शन लॉग वाले फ़ील्ड इसी तरह के होते हैं।
itemId
- एक साझा प्राथमिक कुंजी प्रदान करने के लिए एक UUID
updatedAt
- डेटा को अंतिम बार अपडेट किए जाने पर एक समन्वित बिंदु प्रदान करने के लिए टाइमस्टैम्प (यह मानते हुए कि संशोधन इतिहास की आवश्यकता नहीं है)
fingerprint
- updateAt
कुछ सेकंड बाहर है तो तेजी से तुलना के लिए डेटा की सामग्री का एक SHA1 हैश
itemURI
- बाद में पुनर्प्राप्ति की अनुमति देने के लिए आइटम के लिए एक पूर्ण यूआरआई
चरण 2 - स्थानीय दूरस्थ लेनदेन लॉग की अपनी तुलना करता है
यह सिंक करने के तरीके के व्यापार नियमों का अनुप्रयोग है। आमतौर पर, itemId
स्थानीय संसाधन की पहचान करेगा, फिर फिंगरप्रिंट की तुलना करें। यदि अंतर है तो तुलना की updatedAt
जाती है। यदि ये कॉल करने के बहुत करीब हैं, तो दूसरे नोड के आधार पर खींचने के लिए एक निर्णय लेने की आवश्यकता होगी (शायद यह अधिक महत्वपूर्ण है), या दूसरे नोड पर पुश करने के लिए (यह नोड अधिक महत्वपूर्ण है)। यदि दूरस्थ संसाधन स्थानीय रूप से मौजूद नहीं है, तो एक पुश प्रविष्टि की जाती है (इसमें सम्मिलित / अद्यतन के लिए वास्तविक डेटा होता है)। दूरस्थ लेन-देन लॉग में मौजूद कोई भी स्थानीय संसाधन अपरिवर्तित नहीं माने जाते हैं।
दूरस्थ नोड के खिलाफ पुल अनुरोध किए जाते हैं ताकि डेटा स्थानीय रूप से मौजूद हो itemURI
। उन्हें स्थानीय स्तर पर बाद में लागू नहीं किया जाता है।
चरण 3 - दूरस्थ में स्थानीय सिंक लेनदेन लॉग पुश करें
स्थानीय: PUT /remotehost/items/transactions
शरीर के साथ स्थानीय सिंक लेनदेन लॉग युक्त।
दूरस्थ नोड इस प्रक्रिया को सिंक्रोनाइज़ कर सकता है (यदि यह छोटा और त्वरित है) या एसिंक्रोनस रूप से (सोचें 202 स्वीकृत ) यदि यह बहुत अधिक ओवरहेड होने की संभावना है। एक समकालिक ऑपरेशन की मानें, तो परिणाम सफलता या असफलता के आधार पर या तो 200 ठीक या 409 CONFLICT होगा । 409 CONFLICT के मामले में , फिर प्रक्रिया को फिर से शुरू करना होगा क्योंकि दूरस्थ नोड पर एक आशावादी लॉकिंग विफलता हुई है (किसी ने सिंक के दौरान डेटा बदल दिया है)। रिमोट अपडेट को अपने स्वयं के एप्लिकेशन लेनदेन के तहत संसाधित किया जाता है।
चरण 4 - स्थानीय रूप से अपडेट करें
चरण 2 में खींचा गया डेटा स्थानीय रूप से एक एप्लिकेशन लेनदेन के तहत लागू किया जाता है।
जबकि ऊपर सही नहीं है (ऐसी कई स्थितियाँ हैं जहाँ स्थानीय और दूरस्थ परेशानी में पड़ सकते हैं और स्थानीय से दूरस्थ पुल डेटा संभवतः इसे एक बड़े PUT में भरने से अधिक कुशल है) यह प्रदर्शित करता है कि एक द्वि के दौरान REST का उपयोग कैसे किया जा सकता है। दिशात्मक तुल्यकालन प्रक्रिया।