2015-11-18 7 views
7

क्या रीस्ट आर्किटेक्चर बाधाओं का उपयोग करके एक शॉपिंग कार्ट लागू किया जा सकता है?REST शॉपिंग कार्ट

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

यह वही शॉपिंग कार्ट प्रबंधित किया जाएगा यदि एप्लिकेशन आरईएसटी आर्किटेक्चर का पालन करता है। आरईएसटी बाधाओं में से एक राज्य प्रबंधन ग्राहकों की ज़िम्मेदारी है।

क्या एक शॉपिंग कार्ट और इसकी प्रगति क्लाइंट द्वारा प्रबंधित की जानी चाहिए? कोई उदाहरण? एक साधारण शॉपिंग कार्ट या किसी अन्य एंटरप्राइज़ एप्लिकेशन के संबंध में ग्राहक में राज्य के प्रबंधन के किसी भी नुकसान?

+1

आपको रेफस्ट (हैलोबक्स कॉफी शॉप) के डिफैक्टो हैलो वर्ल्ड को देखना चाहिए। – Aron

+0

आप इस अवधि की HTTP समझ में सत्र की स्थिति को भंग कर रहे हैं, और एक "सत्र" वैश्विक वस्तु जो सर्वर-साइड फ्रेमवर्क द्वारा प्रदान की गई एक आर्टिफैक्ट है। – guillaume31

+0

मैं स्पष्टीकरण देना चाहता हूं ... शॉपिंग कार्ट, खरीदारी के पूरा होने के बाद डेटाबेस के लिए जारी रहेगा, प्रश्न मूल नहीं है। मेरा प्रश्न 4 वां आरईएसटी बाधा के संबंध में है जो स्टेटलेस को संचारित करता है या दूसरे शब्दों में सर्वर पर संग्रहीत कोई क्लाइंट सत्र डेटा नहीं होता है। और यह देखते हुए, शॉपिंग कार्ट स्टोर क्लाइंट कहां होगा? उस प्रश्न को उत्तर में नीचे स्पष्ट किया गया है। धन्यवाद। –

उत्तर

3

आरईएसटी अनुप्रयोगों में, सत्र स्थिति पूरी तरह से ग्राहक द्वारा प्रबंधित की जाती है और अनुरोध में सर्वर द्वारा समझा जाने वाली सभी आवश्यक जानकारी होनी चाहिए। अगर सर्वर को प्रमाणीकरण की आवश्यकता है, उदाहरण के लिए, प्रत्येक अनुरोध में प्रमाण-पत्र होना चाहिए।

5.1.3 स्टेटलेस

[...] क्लाइंट से सर्वर तक प्रत्येक अनुरोध आवश्यक जानकारी के सभी शामिल होना चाहिए समझने के लिए:

बाकी stateless constraint निम्नलिखित के रूप में परिभाषित किया गया है अनुरोध करें, और सर्वर पर किसी संग्रहीत संदर्भ का लाभ नहीं उठा सकते हैं। इसलिए सत्र राज्य पूरी तरह से ग्राहक पर रखा जाता है। [...]

हालांकि, राज्यविहीन बाधा सर्वर मतलब यह नहीं है किसी भी डेटा की दुकान नहीं करना चाहिए।

उन अनुप्रयोगों में जो सत्र स्थिति सर्वर द्वारा प्रबंधित किया जाता है, यह HTTP सत्र में शॉपिंग कार्ट डेटा संग्रहीत करने का एक आम तरीका है। लेकिन एक शॉपिंग कार्ट सत्र राज्य नहीं है। और, शायद, यह पूरी तरह से ग्राहक द्वारा प्रबंधित नहीं किया जाना चाहिए।

बाकी हिस्सों में, खरीदारी की टोकरी, एक संसाधन एक यूआरएल ऐसे /shopping-cart के रूप में और संचालन इस पर प्रदर्शन किया जा सकता द्वारा की पहचान हो सकती है। सभी शॉपिंग कार्ट डेटा सर्वर पर डेटाबेस के लिए जारी रखा जा सकता है।

Any information that can be named can be a REST resource, यहां तक ​​कि एक शॉपिंग कार्ट:

5.2.1.1 संसाधन और संसाधन पहचानकर्ता

बाकी हिस्सों में जानकारी के प्रमुख अमूर्त एक संसाधन है। नामित किया जा सकता है कि कोई भी जानकारी संसाधन हो सकती है: एक दस्तावेज़ या छवि, एक अस्थायी सेवा (उदाहरण के लिए "लॉस एंजिल्स में आज का मौसम"), अन्य संसाधनों का संग्रह, एक गैर-वर्चुअल ऑब्जेक्ट (उदाहरण के लिए एक व्यक्ति), और इसी तरह । दूसरे शब्दों में, किसी भी अवधारणा जो किसी लेखक के हाइपरटेक्स्ट संदर्भ का लक्ष्य हो सकती है उसे संसाधन की परिभाषा के भीतर फिट होना चाहिए। एक संसाधन संस्थाओं के एक समूह के लिए एक वैचारिक मानचित्रण है, न कि इकाई जो किसी भी विशेष बिंदु पर मैपिंग से मेल खाती है। [...]

आप अपने शॉपिंग कार्ट पर इन जैसे कार्य कर सकते हैं:

  • GET /shopping-cart: खरीदारी की टोकरी प्राप्त करें।

  • POST /shopping-cart: शॉपिंग कार्ट में कोई आइटम जोड़ें (उस आइटम के साथ कुछ डेटा भेजना जो आप जोड़ रहे हैं और अनुरोध निकाय में राशि)।

  • DELETE /shopping-cart/1: शॉपिंग कार्ट से आईडी 1 आईडी के साथ एक आइटम निकालें।

  • PATCH /shopping-cart: शॉपिंग कार्ट अपडेट करें (अनुरोध डेटा में अपडेट करने के लिए कुछ डेटा भेजना)।

  • PUT /shopping-cart: शॉपिंग कार्ट की पूरी सामग्री को बदलें (अनुरोध निकाय में अपने शॉपिंग कार्ट की सामग्री के साथ कुछ डेटा भेजना)।

  • DELETE /shopping-cart: खरीदारी की टोकरी

  • POST /shopping-cart/order निकालें: खरीदारी की टोकरी सामग्री

आदेश तो, ग्राहक का पालन किसी भी समय खरीदारी की टोकरी बारे में कोई जानकारी संग्रहीत नहीं करेगा। शॉपिंग कार्ट से संबंधित सभी जानकारी सर्वर में संग्रहीत की जाएगी।


बाकी के बारे में अधिक जानकारी के लिए मैं रॉय टी फील्डिंग की dissertation की chapter 5 पढ़ने की सिफारिश करते हैं।

+0

उपयोगकर्ता को खरीदारी करने में 30 मिनट लग सकते हैं, फिर खरीदारी की गाड़ी जमा कर सकते हैं, कुल कीमत देखकर, कार्ट से कुछ उत्पादों को हटाने का फैसला कर सकते हैं, और फिर फिर से सबमिट कर सकते हैं, ऐसे क्लाइंट सर्वर इंटरैक्शन में शॉपिंग कार्ट को प्रबंधित किया जा रहा है , ग्राहक कोड में? या यह आपके उपरोक्त स्पष्टीकरण के आधार पर डेटाबेस के लिए जारी है। –

+0

@SatBobbi सभी शॉपिंग कार्ट डेटा सर्वर में डेटाबेस के लिए जारी रहेगा। –

+0

प्रतिक्रिया के लिए धन्यवाद। मुझे असहमत होना पसंद है ... अगर हम डेटाबेस में राज्य की बचत कर रहे हैं, तो यह बाधा के उद्देश्य को हरा देता है। मुझे लगता है, हमें शॉपिंग कार्ट के लिए एक आरईएसटी आवेदन की आवश्यकता नहीं होगी, किसी भी अन्य वेब एप्लिकेशन ने डिजाइन को हल किया होगा। मैं एक उदाहरण की तलाश कर रहा था अगर राज्य पूरी तरह से ग्राहक में उलझा हुआ है या ग्राहक में राज्य में राज्य को पूरी तरह से प्रबंधित करने में क्या समस्याएं हो सकती हैं। –

2

आरईएसटी के बारे में बहुत भ्रम मौजूद है क्योंकि बहुत से लोग आरईएसटी बाधाओं के बारे में सुनते हैं और सोचते हैं कि वे ऐसे नियम हैं जो वास्तुकला का पालन करने के अलावा किसी भी कारण के लिए लागू नहीं हैं।

असली सवाल यह पूछना चाहिए कि क्यों स्टेटलेस बाधा आरईएसटी में मौजूद है, और इसके बाद से आपको क्या फायदे मिलते हैं। ध्यान रखें कि आरईएसटी एक वास्तुशिल्प शैली है जिसका उद्देश्य बड़े पैमाने पर वितरित सिस्टमों के दीर्घकालिक विकास के लिए है। आपको बस समस्याएं नहीं होंगी आरईएसटी को एक छोटे पैमाने पर आवेदन में हल करना है जहां एक डेटाबेस में आपकी सारी जानकारी होती है।

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

तो, स्टेटलेस होने का मतलब क्लाइंट अनुरोध को संसाधित करने के लिए आवश्यक सभी जानकारी होनी चाहिए।

आपके लिए दृश्यता कितनी महत्वपूर्ण है? जब आप कुछ डिबग कर रहे हों, तो क्या आप ग्राहक अनुरोध से शॉपिंग कार्ट की संपूर्ण सामग्री को देखने में सक्षम होना चाहते हैं, या डेटाबेस से उस जानकारी को प्राप्त करने के साथ आप ठीक हैं?

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

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

तो, क्या आपके पास महत्वाकांक्षी दीर्घकालिक लक्ष्य हैं या आपका आवेदन इतना बड़ा होगा कि आप समस्याओं का सामना करेंगे REST प्रयासों को हल करने का प्रयास? यदि आपके पास हमेशा कुछ सर्वर और एक डेटाबेस होगा, और आप इसे प्रत्येक अनुरोध के लिए उपयोग करेंगे, तो इससे कोई फर्क नहीं पड़ता कि आप स्टेटलेस हैं या नहीं। आपके पास /shopping_cart संसाधन या कुछ ऐसा हो सकता है, POST अनुरोधों के साथ इसमें सामान जोड़ें, और जब आप पूरा कर लें तो इसे बंद या हटा दें।

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

+0

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

6

शॉपिंग कार्ट को सर्वर पर संसाधन के रूप में संग्रहीत करने में कुछ भी गलत नहीं है। यह सत्र स्थिति है जो क्लाइंट पर संग्रहीत किया जाना चाहिए। https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_1_3

स्टेटलेस होने के लिए, आपकी शॉपिंग-कार्ट यूआरआई किसी भी सत्र की जानकारी पर भरोसा करने के बिना एक अद्वितीय कार्ट की पहचान करने में सक्षम होना चाहिए।

उदाहरण के लिए, /shopping-cart शायद तब तक पर्याप्त नहीं है जब तक कि आपके एप्लिकेशन में केवल एक शॉपिंग कार्ट न हो।

संभावना है कि प्रति उपयोगकर्ता कम से कम एक कार्ट होगा। तो, आप /user/1234/shopping-cart या /shopping-cart?userID=1234 जैसे कुछ का उपयोग कर सकते हैं।

और भी अधिक संभावना है, आपको शायद प्रति उपयोगकर्ता कई शॉपिंग कार्ट की आवश्यकता होगी। इसलिए, आप अपने कार्ट को /user/1234/shopping-cart/5678 या सिर्फ /shopping-cart/5678 जैसे अद्वितीय आईडी देना चाहेंगे।

बिंदु यह है कि अनुरोध को संसाधित करने के लिए आवश्यक सब कुछ अनुरोध में होना चाहिए।

+0

धन्यवाद, हाँ, शॉपिंग कार्ट को सर्वर पर एक एड्रेसेबल संसाधन बनाने की समझ में आता है, संभवतः/खरीद-ऑर्डर/शॉपिंग-कार्ट –

+1

की लाइनों के साथ मुझे कोई जानकारी नहीं है कि किसी ने इसे क्यों कम किया है। आईएमओ अब तक का सबसे सटीक उत्तर है। कभी भी न भूलें कि आरईएसटी बताता है कि वेब स्पेस में क्या होता है, न कि एप्लिकेशन के दायरे में। – guillaume31

+0

मैं सर्वर पर शॉपिंग कार्ट की पता-क्षमता के संबंध में आपके उत्तर से सहमत हूं, क्लाइंट पर राज्य छोड़ रहा हूं। आपके उत्तर को टक्कर देने के लिए पर्याप्त प्रतिष्ठा नहीं है। जवाब के लिए धन्यवाद। सुनिश्चित नहीं है कि आपका क्या मतलब है "आरईएसटी बताता है कि वेब स्पेस में क्या होता है, न कि एप्लिकेशन के दायरे में"। धन्यवाद। –

0

हाँ तुम,

शॉपिंग कार्ट डेटा (वर्धित उत्पादों) ग्राहकों सत्र पर बचाया जा सकता है सकते हैं, कि एक समस्या नहीं है।

फिर उपयोगकर्ता द्वारा/चेकआउट करने के बाद, शॉपिंग कार्ट को सर्वर पर डीबी पर रखा जाना चाहिए। बाकी के बारे में कुंजी यह है कि क्लाइंट को हर याचिका में खुद को पहचानने के लिए सभी डेटा शामिल करना पड़ता है, मैं जेडब्ल्यूटी या ओथ के बारे में कुछ पढ़ने का सुझाव देता हूं।

ऐप स्वयं आपके द्वारा देखे गए किसी अन्य शॉपिंग कार्ट ऐप के रूप में काम करेगा, उनमें से अधिकतर डीबी में शॉपिंग कार्ट नहीं बने हैं, बस इसे क्लाइंट सत्र स्टोर करें।

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