2011-10-10 11 views
9

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

क्या मैं समझता हूँ कि बाकी के अनुसार अवधारणाओं एक) सर्वर scalability और कुछ अन्य कारणों से सुधार करने के लिए सत्र नहीं बनाए रख सकते ख) ग्राहक से प्रत्येक अनुरोध

आत्म निहित किया जाना चाहिए अब, मैं वास्तव में उलझन में हूँ है इसे कैसे प्राप्त करें। मान लीजिए कि हम एक साधारण शॉपिंग कार्ट एप्लिकेशन लेते हैं।

चरण 1) ग्राहक प्रमाणीकरण अनुरोध भेजता है, सर्वर प्रमाणित करता है और सर्वर ठीक प्रतिक्रिया देता है।

चरण 2) ग्राहक शॉपिंग कार्ट में कोई आइटम जोड़ने का अनुरोध भेजता है। सर्वर ठीक जवाब देता है।

चरण 3) ग्राहक दूसरे आइटम को शॉपिंग कार्ड में जोड़ने का दूसरा अनुरोध भेजता है। सर्वर ठीक जवाब देता है।

आम तौर पर, सामान्य रूप से वेब ऐप में, सर्वर पर चरण 1 में एक सत्र बनाया जाता है और उस बिंदु से उस क्लाइंट से संबंधित सभी अनुरोध स्वचालित रूप से उसी सत्र से जुड़े होते हैं और हम सत्र स्थिति संग्रहीत करते हैं (इसमें शॉपिंग कार्ट केस) सत्र ऑब्जेक्ट में और क्लाइंट से बाद के अनुरोधों के साथ इसे पुनर्प्राप्त/अपडेट करें।

अब, उपरोक्त परिदृश्य में:

1) हम कैसे प्रमाणित करने और चरण 2 और 3 में ग्राहक को प्राधिकृत अगर कोई सर्वर पर बनाए रखा सत्र है?

2) क्या ग्राहक को प्रत्येक अनुरोध के साथ कुछ अतिरिक्त जानकारी भेजने की आवश्यकता है?

3) हम चरण 3 में क्लाइंट विशिष्ट शॉपिंग कार्ट को कैसे पुनर्प्राप्त करते हैं?

4) क्या ग्राहक को अपनी शॉपिंग कार्ट भेजने की आवश्यकता है जिसे चरण 2 में चरण 2 में सर्वर द्वारा बनाया/वापस किया गया था?

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

अग्रिम धन्यवाद, दीप

उत्तर

15

1) हम कैसे प्रमाणित करने और यदि कोई सत्र सर्वर पर बनाए रखा है चरण 2 और 3 में ग्राहक को अधिकृत करते हैं?

2) क्या ग्राहक को प्रत्येक अनुरोध के साथ कुछ अतिरिक्त जानकारी भेजने की आवश्यकता है?

हां। आपको प्रत्येक अनुरोध के साथ प्रमाणीकरण/प्रमाणीकरण डेटा भेजना होगा। यही कारण है कि सर्वर को 'याद रखने' से रोकें जो आप हैं (यानी।, स्टेटलेस सर्वर, कोई सत्र नहीं)

3) हम चरण 3 में क्लाइंट विशिष्ट शॉपिंग कार्ट को कैसे पुनर्प्राप्त करते हैं?

चलो एक अलग सवाल पूछें: क्या होता है यदि सर्वर पुनरारंभ होता है? क्या आप सभी शॉपिंग कार्ट डेटा खोना चाहते हैं? शायद ऩही। आपको इसे कहीं भी स्टोर करना होगा कि यह पुनरारंभ करने में जीवित रह सकता है। लगातार भंडारण लागू करना। सर्वर या क्लाइंट पर हो सकता है ...

... अब, यदि आपका ग्राहक पुनरारंभ होता है तो क्या होगा? आप POST अनुरोध (जब उपयोगकर्ता पहली वस्तु जोड़ता है) का उपयोग कर उस उपयोगकर्ता के लिए एक शॉपिंग कार्ट 'संसाधन' बनाना चुन सकता है या जिसने ग्राहक को लॉग इन किया है (अपमानजनक)। फिर आप PUT/DELETE का उपयोग करके शॉपिंग कार्ट को अपडेट करना जारी रखते हैं और इसे GET का उपयोग करके लाते हैं।

क्या यह डीबी में होना चाहिए? हो सकता है, निर्भर करता है कि अगर आप इसे कैसे चाहते हैं। अगर इसे लगातार रखना है, तो इसे रखने के लिए यह एक अच्छी जगह है ताकि यह पुनरारंभ हो सके।

तो क्लाइंट विशिष्ट शॉपिंग कार्ट कैसे प्राप्त करें? वैसे आप बस संसाधन के लिए एक जीईटी अनुरोध भेजें !!! बस! पहला पोस्ट एक उपयुक्त यूआरएल पर संसाधन बनाएगा और फिर आप इसका इस्तेमाल कर सकते हैं।

आराम से वेब सेवाओं में भी आरामदायक यूआरएल हैं ताकि यह डिजाइन का एक प्रमुख हिस्सा हो।

4) क्या ग्राहक को अपनी शॉपिंग कार्ट भेजने की आवश्यकता है जो चरण 2 में चरण 2 में सर्वर द्वारा बनाए/वापस लौटाया गया था?

नहीं जैसा ऊपर बताया गया है। लेकिन यदि आप कुकीज या लोकलस्टॉरेज या क्लाइंट साइड पर कुछ अन्य जानकारी का उपयोग कर रहे हैं, तो हो सकता है कि आप ऐसा करें।

जाहिर है, यह सबसे सरल उपयोग केस है और इसलिए प्रत्येक विकसित करने के लिए रीस्टफुल वेब सेवाओं को अपने ऐप को इसे संभालने के लिए डिज़ाइन करना होगा। क्या सत्र प्रबंधन को संभालने का सबसे अच्छा और सबसे आम तरीका है, प्रमाणीकरण, रीस्टलेट का उपयोग कर रीस्टफुल वेब सेवाओं में प्रमाणीकरण?

हां। यह आसान है लेकिन 'सेवाओं' की बजाय 'संसाधन' के संदर्भ में सोचने में कुछ समय लगता है। आराम से डिजाइन में सबकुछ (या हो सकता है) लेनदेन, शॉपिंग कार्ट आदि सहित संसाधन,

हालांकि, प्राधिकरण/प्रमाणीकरण http अनुरोध पैकेट का हिस्सा हैं और प्रत्येक अनुरोध के साथ भेजा जाता है। मेरा सुझाव है कि आप उन पर पढ़ लें।

हम ग्राहक के डेटा साथ सर्वर साइड पर कैश बनाए रखने के लिए है तो कैसे इस सर्वर हमारे ओर से सत्र को बनाए रखने से अलग है?

बड़ा अंतर! क्या आप प्रदर्शन के लिए कैशिंग कर रहे हैं या सत्र बनाए रखते हैं? अगर सिस्टम पुनरारंभ होता है तो क्या आपका सिस्टम एक खाली कैश पर निर्बाध रूप से काम करेगा? यदि हां आप प्रदर्शन के लिए कैशिंग कर रहे हैं तो आप राज्य को बनाए रख रहे हैं।

मैं दृढ़ता से आप रिचर्डसन & रूबी द्वारा RESTful वेब सेवाओं को पढ़ने के ऊपर अवधारणाओं को उपदेश देना और कैसे शोकहारा सेवाओं तैयार कर रहे हैं में और अधिक जानकारी एकत्रित करने के लिए सुझाव है ... यह कुछ करने के लिए इस्तेमाल हो रही लेता है।

+0

लेकिन अगर सर्वर याद करता है कि आप कौन हैं (और बस यही) तो यह बुरा क्यों है। यदि आप कुत्ते के रूप में आरईएसटी स्पेक का पालन नहीं करते हैं, तो आप प्रत्येक अनुरोध के प्रमाणीकरण जमा करने से समझौता कर सकते हैं और खुद को बचा सकते हैं। – amphibient

+0

क्या आपका डिज़ाइन पुनरारंभ हो सकता है? इसके अलावा यह सुनिश्चित करने के लिए हमेशा कुछ जांच होती है कि यह वही व्यक्ति है, न कि चोरी का सत्र। – PhD

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