2009-02-13 16 views
7

यह सवाल मेरे मन को पार करने के बाद मैं इस पोस्ट पढ़ें: “Common REST Mistakes: Sessions are irrelevant”लाइसेंस और सत्र RESTful रास्ता

सत्र वास्तव में एक RESTful आवेदन में हतोत्साहित कर रहे हैं। आप इस तरह के आवेदन में लाइसेंस कैसे संभालेंगे। मैं विशेष रूप से समवर्ती लाइसेंस मॉडल का जिक्र कर रहा हूं और लाइसेंस नाम नहीं रखता हूं। यानी ग्राहक एक्स लाइसेंस खरीदता है जिसका अर्थ यह है कि एप्लिकेशन एक्स उपयोगकर्ताओं को एक साथ लॉग इन करने की अनुमति दे सकता है। जिसका अर्थ यह है कि एप्लिकेशन को मौजूदा लॉग इन उपयोगकर्ताओं के लिए एक राज्य होना चाहिए।

मैं जानता हूँ कि मैं एक संसाधन, लाइसेंस कहा जाता है जो एक कुकी सेट या एक अद्वितीय ID उत्पन्न होगा, और फिर ग्राहक प्रत्येक अनुरोध के साथ इसे भेजने के लिए होगा बना सकते हैं। लेकिन यह एक सत्र बनाने के समान है, है ना?

अगर मैं राज्यविहीन दृष्टिकोण अपनाने के लिए और प्रत्येक अनुरोध के लिए एक प्रमाणीकरण टोकन बनाने के लिए ग्राहक पूछेंगे कैसे आवेदन जब उपभोग करते हैं और है कि ग्राहक के लिए जारी लाइसेंस के लिए पता चलेगा?

क्या कोई विकल्प है? विशेष रूप से एक और अधिक विश्वसनीय विकल्प?

उत्तर

4

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

कुकी इनपुट किसी भी महत्वपूर्ण जानकारी के लिए विश्वसनीय होना चाहिए कभी नहीं किया है, लेकिन एक सुरक्षा टोकन की तरह अतिरिक्त सत्यापन के लिए बहुत उपयोगी हो सकता है। मुझे लगता है कि आपके ऑन-साइट लिंक पर एक यादृच्छिक सुरक्षा टोकन फ़ील्ड जोड़ना उस के लिए आरामपूर्ण दृष्टिकोण होगा। यह निश्चित रूप से 'सत्र' के साथ समाप्त हो जाना चाहिए।

+1

मैं रिलीज लाइसेंस कब दूंगा? किसी अन्य उपयोगकर्ता को लॉग इन करने की अनुमति देने के लिए। मैं नहीं चाहता कि लाइसेंस केवल मिलीसेकंड के लिए उपभोग किया जाए, अनुरोध वास्तव में सर्वर में संसाधित किया जा रहा है, लेकिन पूरे समय उपयोगकर्ता सक्रिय है। – LiorH

+0

यही कारण है कि आपको राज्य को बचाया जाना चाहिए। जब उपयोगकर्ता लॉगआउट लिंक पर क्लिक करता है, या टाइमआउट के बाद सत्र/लाइसेंस नष्ट किया जाना चाहिए। (जो डाटाबेस टेबल में एक फ़ील्ड हो सकता है, जैसे टाइमस्टैम्प last_login जो वैध अनुरोधों के लिए वर्तमान टाइमस्टैम्प में अपडेट हो जाएगा।) –

+0

@Aram Verstegen, आपने कहा कि यही कारण है कि उसे राज्य को बचाया जाना चाहिए, लेकिन यदि वह राज्य को बचाता है, क्या वह आरईएसटी सिद्धांतों का उल्लंघन नहीं करता है? –

1

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

अपने बुनियादी ढांचे के विवरण जानने के बिना, एक विशिष्ट सिफारिश देना मुश्किल है। उदाहरण के रूप में * निक्स प्लेटफ़ॉर्म का उपयोग करके, लाइसेंस हैंडलिंग तर्क को अपाचे HTTP सर्वर के लिए मॉड्यूल के रूप में कार्यान्वित किया जा सकता है।

यह दृष्टिकोण आपके बुनियादी ढांचे के ढेर में चिंताओं को अलग करने को बढ़ावा देता है। यह प्रत्येक परत को इस बात पर ध्यान केंद्रित करने की अनुमति देता है कि इसका क्या अर्थ है। एप्लिकेशन लेयर को लाइसेंसिंग के बारे में चिंता करने की आवश्यकता नहीं है, जिससे इसे कड़ाई से सामग्री पर ध्यान केंद्रित करने की इजाजत मिलती है, जो बदले में यूआरएल को साफ और "रीस्टफुल" रखता है।

1

अपने लाइसेंस समवर्ती उपयोगकर्ताओं के आधार पर किया जाता है, को लागू करने के लिए HTTP डाइजेस्ट तुच्छ है, और आप समवर्ती लॉगिन के केवल अधिकतम संख्या को सक्षम करने देगा। डाइजेस्ट में समाप्ति डेटा पास करने के प्रावधान हैं, इसलिए आपका सत्र समय-समय पर समाप्त हो सकता है। beause यह पारदर्शी और ubiquituous है

प्रमाणीकरण राज्य, http authetnication द्वारा पकड़ है और कहीं नहीं।

0

हो सकता है कि लाइसेंस कर दर, जिस पर अनुरोध नियंत्रित किया जाता है, न कि समवर्ती सत्र की संख्या की तुलना में सीमित करने के लिए किया जाएगा का एक और अधिक RESTful रास्ता। पिछले घंटों में अनुरोधों की संख्या का ट्रैक रखें, और यदि ग्राहक द्वारा भुगतान की गई संख्या से अधिक है, तो 503 Service Unavailable प्रतिक्रिया दें, साथ ही कुछ पाठ के साथ उपयोगकर्ता बाद में पुनः प्रयास करें।

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