"फ़िल्टर के रूप में फ़िल्टर" इस के लिए एक आदर्श रणनीति है।
आप फ़िल्टर संसाधन को फ़िल्टर परिभाषा डाल सकते हैं, और यह फ़िल्टर आईडी वापस कर सकता है।
पुट idempotent है, तो अगर फ़िल्टर पहले से ही है, तो आपको बस यह पता लगाने की जरूरत है कि आपने पहले फ़िल्टर देखा है, ताकि आप फ़िल्टर के लिए उचित आईडी वापस कर सकें।
फिर, आप अपने अन्य अनुरोधों में फ़िल्टर पैरामीटर जोड़ सकते हैं, और वे क्वेरी के लिए उपयोग करने के लिए फ़िल्टर को पकड़ सकते हैं।
प्राप्त/दवाओं? फिल्टर = 1234 & पेज = 4 & pagesize = 20
मैं, कैनॉनिकलाइज़ेशन प्रक्रिया किसी तरह की कच्चे फिल्टर चल पाएंगे सिर्फ एक सामान्यीकृत सेट है, ताकि, उदा फ़िल्टर "firstname = बॉब lastname = Eubanks" "lastname = Eubanks firstname = Bob" के समान है। हालांकि यह सिर्फ मुझे है।
एकमात्र असली चिंता यह है कि, जैसे ही समय चल रहा है, आपको कुछ फ़िल्टर अप्रचलित करने की आवश्यकता हो सकती है। आप अनुरोध को गलती कर सकते हैं कि किसी को लापता या अप्रचलित फ़िल्टर के साथ अनुरोध करना चाहिए।
संपादित का जवाब सवाल ...
की बुनियादी बातों के साथ शुरू करते हैं।
बस, आप प्रश्नों में उपयोग के लिए एक फ़िल्टर निर्दिष्ट करना चाहते हैं, लेकिन ये फ़िल्टर (संभावित रूप से) शामिल और जटिल हैं। अगर यह सरल/दवाएं/1234 थी, तो यह कोई समस्या नहीं होगी।
प्रभावी रूप से, आपको हमेशा क्वेरी पर फ़िल्टर भेजने की आवश्यकता होती है। सवाल यह है कि उस फ़िल्टर का प्रतिनिधित्व कैसे करें।
आरईएसटी सिस्टम में सत्रों जैसी चीजों के साथ मौलिक मुद्दा यह है कि वे आम तौर पर "बैंड से बाहर" प्रबंधित होते हैं। जब आप कहते हैं, जाओ और दवा बनाएं, तो आप दवा संसाधनों को पुट या पोस्ट करें, और आपको उस दवा पर एक संदर्भ मिल जाएगा।
एक सत्र के साथ, आप (आमतौर पर) उस कुकी का प्रतिनिधित्व करने के लिए कुकी, या शायद कुछ अन्य टोकन वापस ले लेंगे। यदि दवा संसाधनों के लिए आपके पुट ने एक सत्र भी बनाया, तो सच में, आपके अनुरोध ने दो संसाधन बनाए: एक दवा, और एक सत्र।
दुर्भाग्य से, जब आप कुकी की तरह कुछ उपयोग करते हैं, और आपको अपने अनुरोध के लिए उस कुकी की आवश्यकता होती है, तो संसाधन का नाम अब संसाधन का सही प्रतिनिधित्व नहीं होता है। अब यह संसाधन नाम (यूआरएल), और कुकी है।
इसलिए, यदि मैं नाम/दवाओं/खोज संसाधन पर प्राप्त करता हूं, और कुकी एक सत्र का प्रतिनिधित्व करती है, और उस सत्र में एक फ़िल्टर होता है, तो आप देख सकते हैं कि कैसे, प्रभाव संसाधन,/दवाएं/खोज, वास्तव में बिल्कुल उपयोगी नहीं है। मेरे पास कुकी और सत्र के साइड इफेक्ट और उसमें फ़िल्टर के कारण प्रभावी उपयोग करने के लिए आवश्यक सभी जानकारी नहीं है।
अब, आप शायद नाम लिख सकते हैं:/दवाएं/खोज? सत्र = एबीसी 123, संसाधन नाम में कुकी को प्रभावी रूप से एम्बेड कर रहा है।
लेकिन अब आप सत्रों के ठेठ अनुबंध में भाग लेते हैं, विशेष रूप से कि वे कम रहते हैं। तो, नामित संसाधन कम उपयोगी, दीर्घकालिक, बेकार नहीं है, केवल कम उपयोगी है। अभी, यह क्वेरी मुझे दिलचस्प डेटा देता है। आने वाला कल? शायद ऩही। सत्र समाप्त होने के बारे में मुझे कुछ ग़लत त्रुटि मिलेगी।
दूसरी समस्या यह है कि सत्र आमतौर पर संसाधन के रूप में प्रबंधित नहीं होते हैं।उदाहरण के लिए, वे आम तौर पर एक दुष्प्रभाव होते हैं, बनाम स्पष्ट रूप से जीईटी/पुट/डिलीट के माध्यम से प्रबंधित होते हैं। सत्र वेब ऐप राज्य का "कचरा ढेर" भी हैं। इस मामले में, हम उम्मीद कर रहे हैं कि सत्र इस अनुरोध के लिए आवश्यकतानुसार उचित रूप से आबादी वाला है। हम वास्तव में वास्तव में नहीं जानते हैं। फिर, यह एक दुष्प्रभाव है।
अब, इसे अपने सिर पर थोड़ा सा चालू करें। आइए उपयोग/दवाएं/खोज करें? फ़िल्टर = एबीसी 123।
जाहिर है, आकस्मिक रूप से, यह समान दिखता है। हमने अभी 'सत्र' से 'फ़िल्टर' नाम बदल दिया है। लेकिन, जैसा कि चर्चा की गई है, फ़िल्टर, इस मामले में, "प्रथम श्रेणी संसाधन" हैं। उन्हें एक प्रणाली, एक जेपीईजी, या आपके सिस्टम में किसी भी अन्य संसाधन के रूप में बनाया, प्रबंधित, आदि की आवश्यकता है। यह मुख्य भेद है।
निश्चित रूप से, आप "सत्र" को प्रथम श्रेणी संसाधन के रूप में पेश कर सकते हैं, उन्हें बना सकते हैं, उन्हें सीधे सामान डाल सकते हैं, लेकिन आप देख सकते हैं कि कम से कम स्पष्टता से, "प्रथम श्रेणी" सत्र इस मामले के लिए वास्तव में एक अच्छा अमूर्त नहीं है। एक सत्र का उपयोग करके, यह क्लीनर पर जाकर और अपने पूरे पर्स या ब्रीफ़केस को सौंपने जैसा है। "हाँ, टिकट वहां कहीं है, जो आप चाहते हैं उसे खोदें, मुझे अपने कपड़े दें", विशेष रूप से फ़िल्टर की तरह स्पष्ट कुछ की तुलना में।
तो, आप देख सकते हैं कि, 30,000 फीट पर, फ़िल्टर और सत्र के बीच मामले में बहुत अंतर नहीं है। लेकिन जब आप ज़ूम इन करते हैं, तो वे काफी अलग होते हैं।
फ़िल्टर संसाधन के साथ, आप उन्हें हमेशा के लिए एक सतत चीज़ बनाने के लिए चुन सकते हैं। आप उन्हें समाप्त कर सकते हैं, आप जो चाहें कर सकते हैं। सत्रों में पूर्व-अनुमानित अर्थशास्त्र होते हैं: लघु जीवन, कनेक्शन की अवधि इत्यादि। फ़िल्टर में कोई भी अर्थशास्त्र हो सकता है जो आप चाहते हैं। वे एक सत्र के साथ आता है से पूरी तरह से अलग हैं।
यदि मैं ऐसा कर रहा था, तो मैं फ़िल्टर के साथ कैसे काम करूंगा?
मुझे लगता है कि मुझे वास्तव में फ़िल्टर की सामग्री की परवाह नहीं है। विशेष रूप से, मुझे संदेह है कि मैं कभी भी "पहले नाम से खोजे जाने वाले सभी फ़िल्टर" के लिए पूछताछ करूंगा। इस समय, यह अनिच्छुक जानकारी की तरह लगता है, इसलिए मैं इसके चारों ओर डिजाइन नहीं करूंगा।
अगला, मैं उपरोक्त वर्णित फ़िल्टर को सामान्यीकृत करता हूं। सुनिश्चित करें कि समकक्ष फ़िल्टर वास्तव में समकक्ष हैं। आप अभिव्यक्तियों को सॉर्ट करके ऐसा कर सकते हैं, फ़ील्ड नाम सभी अपरकेस सुनिश्चित कर सकते हैं, या जो भी हो।
फिर, मैं फ़िल्टर को एक्सएमएल या जेएसओएन दस्तावेज़ के रूप में स्टोर करता हूं, जो भी एप्लिकेशन के लिए अधिक आरामदायक/उपयुक्त है। मैं प्रत्येक फिल्टर को एक अनूठी कुंजी (स्वाभाविक रूप से) देता हूं, लेकिन मैं फ़िल्टर के साथ वास्तविक दस्तावेज़ के लिए हैश स्टोर भी करता हूं।
मैं यह पहले से ही फ़िल्टर कर रहा हूं कि फ़िल्टर पहले से संग्रहीत करने में सक्षम होने के लिए ऐसा करेगा। चूंकि मैं इसे सामान्य कर रहा हूं, मैं "जानता हूं" कि तर्कसंगत समकक्ष फ़िल्टर के लिए एक्सएमएल (कहना) समान होगा। इसलिए, जब कोई पुट पर जाता है, या कोई नया फ़िल्टर डाला जाता है, तो मैं हैश पर एक चेक करता हूं यह देखने के लिए कि क्या यह पहले संग्रहीत किया गया है या नहीं। मैं अच्छी तरह से एक से अधिक वापस प्राप्त कर सकता हूं (हैश निश्चित रूप से टकरा सकता है), इसलिए मुझे यह देखने के लिए वास्तविक एक्सएमएल पेलोड की जांच करनी होगी कि वे मेल खाते हैं या नहीं।
यदि फ़िल्टर मिलान करते हैं, तो मैं मौजूदा फ़िल्टर का संदर्भ देता हूं। यदि नहीं, तो मैं एक नया बनाउंगा और उसे वापस कर दूंगा।
मैं फ़िल्टर अद्यतन/पोस्ट की अनुमति भी नहीं दूंगा। चूंकि मैं इन फ़िल्टरों के संदर्भों को सौंप रहा हूं, इसलिए मैं उन्हें अपरिवर्तनीय बना दूंगा ताकि संदर्भ मान्य रह सकें। अगर मैं "रोल" द्वारा फ़िल्टर चाहता था, तो कहें, "सभी समाप्त दवा फ़िल्टर प्राप्त करें", तो मैं एक "नामित फ़िल्टर" संसाधन तैयार करूंगा जो एक फ़िल्टर उदाहरण के साथ एक नाम को जोड़ता है, ताकि वास्तविक फ़िल्टर डेटा बदल सके लेकिन नाम वही रहता है।
माइंड, यह भी कि सृजन के दौरान, आप दौड़ की स्थिति में हैं (दो अनुरोध एक ही फ़िल्टर बनाने की कोशिश कर रहे हैं), इसलिए आपको इसके लिए जिम्मेदार होना होगा। यदि आपके सिस्टम में उच्च फ़िल्टर वॉल्यूम है, तो यह एक संभावित बाधा हो सकती है।
आशा है कि यह आपके लिए इस मुद्दे को स्पष्ट करे।
यह सबसे अच्छा स्पष्टीकरण है जो मैंने देखा है कि क्यों सत्र एक आरईएसटी स्टाइल आर्किटेक्चर में फिट नहीं होते हैं। –
+1: बढ़िया जवाब, विल! –
अच्छी व्याख्या @Will – jayraynet