2012-09-25 13 views
5

हमारे पास एक वेब वेब ऐप है जो एक हाइबरनेट बैकएंड है जो आरईएसटी संसाधन प्रदान करता है। अब हम अपने सामान्य अनुरोध में क्वेरी पैरामीटर द्वारा नियंत्रित एक सामान्य खोज को लागू करने के लिए कार्य का सामना कर रहे हैं:HTTP जीईटी अनुरोध पैरामीटर से खोज एसक्यूएल जेनरेट करें

some/rest/resource?name_like=foo&created_on>=2012-09-12&sort_by_asc=something 

या इसी तरह के।

  • हम सब संभव मानकों (नाम, created_on, कुछ)
  • हम नहीं करना चाहते पूर्वपरिभाषित करने का अनुरोध स्ट्रिंग विश्लेषण करने के लिए नियंत्रण वर्ण (> =) की तरह लेने के लिए नहीं करना चाहती
  • है और न ही है हम अपने ही व्याकरण लागू करने के लिए _eq _like _goe और इतने पर तरह बातें

(एक विकल्प या इसके पात्रों को नियंत्रित करने के रूप में) को प्रतिबिंबित नहीं करना चाहती वहाँ ढांचे में प्रावधान है कि किसी तरह का है के साथ मदद यह डेटाबेस पैरामीटर पर अनुरोध पैरामीटर से मैपिंग?

चूंकि हम जानते हैं कि हम कौन सी आरईएसटी संसाधन प्राप्त कर रहे हैं, हमारे पास इकाई/तालिका (चयन) है। संभवतः उन खोजों को पूर्वनिर्धारित करना भी आवश्यक होगा जिन्हें खोज की गहराई को सीमित करने के लिए निष्पादित किया जाएगा।

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


अभी मैं Mysemas QueryDSL पर कुछ अर्द्ध स्वचालित समाधान इमारत कोशिश कर रहा हूँ। यह मुझे कॉलम और सॉर्ट कॉलम को पूर्वनिर्धारित करने की अनुमति देता है और मैं पैरामीटर में '_like', '_loe', ... जैसी चीजों का पता लगाने के लिए एक सरल स्ट्रिंग तुलना पर काम कर रहा हूं और फिर खोज के संबंधित पूर्वनिर्धारित भाग को सक्रिय करता हूं। एक एसक्यूएल स्ट्रिंग से बहुत अलग नहीं है सिवाय इसके कि यह एसक्यूएल इंजेक्शन सबूत एक प्रकार बचा है।

हालांकि मुझे अभी भी अपनी खोज वस्तु बताना है कि यह संभावित रूप से एक प्रश्न को संभालने में सक्षम होना चाहिए "नाम वाले व्यक्ति की तलाश करें ??? ???"। अभी यह ठीक है क्योंकि हम केवल आंतरिक संसाधनों का आंतरिक रूप से उपभोग करते हैं और वास्तविक खोज निर्माण को अच्छी तरह से अलग करते हैं। अगर हमें एक खोज करने की ज़रूरत है तो हम अभी और अधिक predininitions जोड़ सकते हैं। लेकिन क्या हमें भविष्य में कुछ समय में हमारे आरईएसटी संसाधनों को सार्वजनिक करना चाहिए जो इतना अच्छा नहीं होगा।


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

जैसा कि मैंने कहा, हम हाइबरनेट का उपयोग कर रहे हैं, इसलिए एक एसक्यूएल या एचक्यूएल समाधान ठीक होगा या कुछ भी जो QueryDsl जैसी इकाइयों पर बनाता है। (एसक्यूएल इंजेक्शन से संबंधित सुरक्षा समस्या भी है)

कोई सुझाव? विचार? क्या हमें बस यह सब करना होगा?

उत्तर

1

एक .NET परिप्रेक्ष्य से सबसे नज़दीकी चीज जो मैं सोच सकता हूं वह एक डब्ल्यूसीएफ डेटा सेवा होगी।

ओडाटा वेबसाइट पर निर्दिष्ट the uri-conventions पर एक नज़र डालें। 4.5 Filter System Query Option पर अनुभाग पर कुछ अच्छी जानकारी है। आप देखेंगे कि इस साइट पर कई उदाहरण .NET से संबंधित हैं, लेकिन जावा के साथ काम करने के लिए othersuggestions हैं।

+0

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

+0

कोई जांच नहीं। यह लंबे समय से रहा है क्योंकि मैंने जावा और/या हाइबरनेट का उपयोग किया था और मुझे यकीन नहीं है कि यह सब हाइबरनेट के साथ कैसे फिट होगा। काफी हद तक पर्याप्त है हालांकि मैं [यह पोस्ट] (http://raibledesigns.com/rd/entry/appfuse_news_github_hibernate_search) मैट रायबल के ब्लॉग पर [ऐपफ्यूज] (http://appfuse.org/) में कुछ बदलावों के बारे में बताता हूं। पद में उन्होंने [हाइबरनेट खोज] का उल्लेख किया है (http://docs.jboss.org/hibernate/search/4.1/reference/en-US/html_single/), और इससे मुझे आपके प्रश्न के बारे में सोचा गया। हो सकता है कि आप देख सकें कि क्या आपकी स्थिति में भी इसका उपयोग किया जा सकता है। –

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