2015-11-09 11 views
8

समस्या (या अनुपलब्ध सुविधा) विभिन्न क्वेरी पैरामीटर के बीच अभिव्यक्ति की संभावना की कमी है। जैसा कि मैंने इसे देखा है आप पैरामीटर के बीच केवल and निर्दिष्ट कर सकते हैं, लेकिन यदि आप not equal, or या xor रखना चाहते हैं तो आप इसे कैसे हल कर सकते हैं? ? नाम = Bosseएक आरईएसटी एपीआई में क्वेरी पैरामीटर के बीच उन्नत अभिव्यक्ति कैसे व्यक्त करें?

| 20 साल की उम्र या नाम Bosse

/उपयोगकर्ताओं उम्र = 22 के साथ

सभी उपयोगकर्ताओं:

मैं जैसी चीजों व्यक्त करने में सक्षम होना चाहते हैं

डेविड और लेनार्ट को छोड़कर सभी उपयोगकर्ता

?!

साथ वाले सभी उपयोगकर्ता:

/उपयोगकर्ताओं नाम = डेविड & नाम = Lennart

मेरा पहला विचार एक क्वेरी पैरामीटर बुलाया _filter का उपयोग करें और इस तरह मेरी अभिव्यक्ति के साथ एक स्ट्रिंग लेने के लिए है 22 साल की उम्र या एक ऐसा नाम है Bosse नहीं है

/उपयोगकर्ताओं? _filter = उम्र eq 22 या नाम neq Bosse

इस समस्या के लिए सबसे अच्छा समाधान क्या है?

मैं जावा और जर्सी के साथ अपना एपीआई लिख रहा हूं, इसलिए यदि जर्सी के लिए कोई विशेष समाधान है, तो मुझे बताएं। शामिल या बाहर करने, और

For excluding 
GET /users?name=-David,-Lennart 
For including 
GET /users?name=+Bossee 
For OR 
GET /users?name=+Bossee&age=22&inclusive=false 
For AND 
GET /users?name=+Bossee&age=22&inclusive=true 

और के लिए एक समावेशी फिल्टर कीवर्ड और या इस तरह एपीआई बहुत सहज ज्ञान युक्त, बहुत पठनीय भी करता हैं -

+0

जैसा कि मुझे पता है, इस उपयोग के लिए समाधान का उपयोग करने के लिए कोई तैयार नहीं है। क्वेरी को फ़िल्टर फ़िल्टर में ट्रांसफर करें जैसे कि आपने फ़िल्टर को पार्स करके और पार्स किए गए अभिव्यक्ति पर प्रतिक्रिया करके क्वेरी को कार्यान्वित किया है। – Simulant

+0

आप इन पात्रों को एन्कोड कर सकते हैं: https://en.wikipedia.org/wiki/Character_encodings_in_HTML – Thevenin

+0

@Thevenin: क्या आप इसका उदाहरण दे सकते हैं कि मैं इसका उपयोग कैसे कर सकता हूं? –

उत्तर

3

मुझे लगता है कि प्राप्त करने के लिए दो समाधान देख सकते हैं:

  • अभिव्यक्ति युक्त जब एक GET विधि को क्रियान्वित करने के लिए एक विशेष क्वेरी पैरामीटर का उपयोग करना। यह तरीका है ओडाटा इसके $filter पैरामीटर के साथ करता है (यह लिंक देखें: https://msdn.microsoft.com/fr-fr/library/gg309461.aspx#BKMK_filter)।

    /AccountSet?$filter=AccountCategoryCode/Value eq 2 or AccountRatingCode/Value eq 1 
    

    Parse.com भी अपने where पैरामीटर के साथ इस तरह के दृष्टिकोण का उपयोग करता है, लेकिन क्वेरी एक JSON संरचना (इस लिंक को देख: https://parse.com/docs/rest/guide#queries) का उपयोग वर्णित है: यहाँ एक नमूना है।

    curl -X GET \ 
        -H "X-Parse-Application-Id: ${APPLICATION_ID}" \ 
        -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \ 
        -G \ 
        --data-urlencode 'where={"score":{"$gte":1000,"$lte":3000}}' \ 
        https://api.parse.com/1/classes/GameScore 
    
  • अगर यह कुछ भी वर्णन करने के लिए मुश्किल है, तो आप भी एक POST विधि का उपयोग करें और अनुरोध पेलोड में क्वेरी निर्दिष्ट कर सकते हैं: यहाँ एक नमूना है। लोचदार खोज अपने क्वेरी समर्थन के लिए इस तरह के दृष्टिकोण का उपयोग करता है (यह लिंक देखें: https://www.elastic.co/guide/en/elasticsearch/reference/current/search.html)। यहाँ एक नमूना है:

    $ curl -XGET 'http://localhost:9200/twitter/tweet/_search?routing=kimchy' -d '{ 
        "query": { 
         "bool" : { 
          "must" : { 
           "query_string" : { 
            "query" : "some query string here" 
           } 
          }, 
          "filter" : { 
           "term" : { "user" : "kimchy" } 
          } 
         } 
        } 
    } 
    ' 
    

आशा है कि यह आप में मदद करता है, थियरी

+0

आपके उत्तर के लिए धन्यवाद। मुझे वास्तव में parse.com का समाधान पसंद आया, इसलिए मुझे लगता है कि मैं इसे लागू करने की कोशिश करूंगा। यदि कुछ भी बेहतर नहीं होता है तो मैं कुछ दिनों में आपका जवाब स्वीकार करूंगा (जब मैं परीक्षण कार्यान्वयन करता हूं)। –

+0

आपका स्वागत है! यह स्पष्ट है कि प्रश्नों का वर्णन करने के लिए JSON का उपयोग विशेष रूप से नोड अनुप्रयोगों के लिए फायदे हैं ;-) –

2

इसलिए यहाँ ठीक यह आप + जोड़ सकता है या है वह काम जो आप करना चाहते हैं।

संपादित करें - बहुत बहुत मुश्किल सवाल है, तथापि मैं इसे इस तरह से

GET /users?name=+Bossee&age=22&place=NewYork&inclusive=false,true 

पहले संबंध जिसका मतलब है क्या करना होगा समावेशी नहीं है - या दूसरे शब्दों में यह है या दूसरा संबंध समावेशी है - या अन्य में यह शब्द है और

समाधान इस विचार के साथ है कि मूल्यांकन बाएं से दाएं है।

+0

मुझे यह समाधान पसंद नहीं है। डिफ़ॉल्ट व्यवहार होने पर मुझे '+' क्यों जोड़ना चाहिए? 'अपमानजनक = सत्य' का क्या अर्थ है? मेरा अनुमान है कि इसका मतलब है कि मैं पहले पूछताछ पैरामीटर के बीच 'या' चाहता हूं। क्या होगा यदि मैं एक ही कथन में 'और' और' या 'दोनों को व्यक्त करना चाहता हूं? मैं आपके जवाब को गलत समझ सकता हूं, उस मामले में कृपया स्पष्ट करें। –

+0

'+' प्रतीक (कभी-कभी) किसी स्थान को एन्कोड करने के लिए उपयोग किया जाता है, इसलिए मैं इसे एक अर्थ नहीं दूंगा। यह भी देखें [यह प्रश्न] (http://stackoverflow.com/questions/1634271)। – lefloh

+0

यदि मैं डिफ़ॉल्ट व्यवहार के रूप में '+' पर विचार करता हूं और केवल '=' का उपयोग करता हूं तो यह ठीक होगा। शेष प्रश्न अभी भी है कि मैं इस समाधान के साथ '(x == 1 || x == 2) && y == GURP' जैसे कुछ कैसे व्यक्त करता हूं। –

0

अरे यह असंभव लगता है अगर आप queryparams के लिए जाना ... यदि यह उन्नत भाव के लिए जाने के लिए मामला है PathParams ताकि आप फ़िल्टर करने के लिए नियमित अभिव्यक्तियाँ हो।

लेकिन केवल एक विशेष नाम = "बोस" को अनुमति देने के लिए आपको एक कड़े रेगेक्स लिखने की आवश्यकता है।

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

+0

मुझे नहीं लगता कि मुझे आपका क्या मतलब है। क्या आप एक उदाहरण दिखा सकते हैं? –

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