RESTful खोज / फ़िल्टरिंग कैसे डिज़ाइन करें? [बन्द है]


457

मैं वर्तमान में PHP में एक RESTful API को डिज़ाइन और कार्यान्वित कर रहा हूँ। हालांकि, मैं अपने शुरुआती डिजाइन को लागू करने में असफल रहा हूं।

GET /users # list of users
GET /user/1 # get user with id 1
POST /user # create new user
PUT /user/1 # modify user with id 1
DELETE /user/1 # delete user with id 1

अभी तक बहुत मानक, सही?

मेरी समस्या पहले वाले के साथ है GET /users। मैं सूची को फ़िल्टर करने के लिए अनुरोध निकाय में पैरामीटर भेजने पर विचार कर रहा था। ऐसा इसलिए है क्योंकि मैं एक सुपर लंबी यूआरएल प्राप्त किए बिना जटिल फिल्टर निर्दिष्ट करने में सक्षम होना चाहता हूं, जैसे:

GET /users?parameter1=value1&parameter2=value2&parameter3=value3&parameter4=value4

इसके बजाय मैं कुछ ऐसा करना चाहता था:

GET /users
# Request body:
{
    "parameter1": "value1",
    "parameter2": "value2",
    "parameter3": "value3",
    "parameter4": "value4"
}

जो बहुत अधिक पठनीय है और आपको जटिल फिल्टर सेट करने की बहुत संभावनाएं देता है।

फिर भी, अनुरोधों के file_get_contents('php://input')लिए अनुरोध निकाय को वापस नहीं किया GET। मैंने भी कोशिश की http_get_request_body(), लेकिन साझा होस्टिंग जो मैं उपयोग कर रहा हूं वह नहीं है pecl_http। यकीन नहीं है कि यह वैसे भी मदद की होगी।

मुझे यह सवाल लगा और पता चला कि GET शायद एक अनुरोध निकाय नहीं है। यह थोड़ा अनिर्णायक था, लेकिन उन्होंने इसके खिलाफ सलाह दी।

इसलिए अब मुझे यकीन नहीं है कि मुझे क्या करना है। आप एक RESTful खोज / फ़िल्टरिंग फ़ंक्शन कैसे डिज़ाइन करते हैं?

मुझे लगता है कि मैं उपयोग कर सकता था POST, लेकिन यह बहुत Restful नहीं लगता है।



60
सावधान रहे!!! GET विधि IDEMPOTENT होनी चाहिए, और "Cacheable" होनी चाहिए। यदि आप शरीर में जानकारी भेजते हैं, तो सिस्टम आपके अनुरोध को कैसे कैश कर सकता है? HTTP केवल URL का उपयोग करके GET अनुरोध को कैशिंग करने की अनुमति देता है, न कि अनुरोध निकाय की। उदाहरण के लिए, यह दो अनुरोध: example.com {test: "some"} example.com {otherTest: "some2"} को कैश सिस्टम द्वारा समान माना जाता है: दोनों का URL एक ही है
jfcorugedo

15
बस जोड़ने के लिए, आपको / उपयोगकर्ताओं (संग्रह) / उपयोगकर्ता (एकल उपयोगकर्ता) के लिए POST चाहिए।
म्लादेन बी।

1
विचार करने के लिए एक अन्य बिंदु यह है कि अधिकांश ऐप सर्वर में प्रवेश लॉग होते हैं जो यूआरएल को लॉग करते हैं और इसलिए बीच में कुछ भी हो सकता है। तो GET पर कुछ अन-इंश्योरेंस लीक हो सकते हैं।
user3206144

जवाबों:


396

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

उदाहरण के लिए:

Accept: application/json
Content-Type: application/json
POST http://example.com/people/searches
{
  "terms": {
    "ssn": "123456789"
  },
  "order": { ... },
  ...
}

आप उपयोगकर्ता के दृष्टिकोण से एक खोज बना रहे हैं। इस का कार्यान्वयन विवरण अप्रासंगिक है। कुछ RESTful API को दृढ़ता की भी आवश्यकता नहीं हो सकती है। यह एक कार्यान्वयन विवरण है।


209
खोज समापन बिंदु के लिए POST अनुरोध का उपयोग करने के लिए एक महत्वपूर्ण सीमा यह है कि इसे बुकमार्क नहीं किया जा सकता है। खोज परिणाम (विशेष रूप से जटिल प्रश्न) को बुकमार्क करना काफी उपयोगी हो सकता है।
२०:०४ पर कौचंद १

73
खोज करने के लिए POST का उपयोग करने से REST कैश अवरोध हो सकता है। whatisrest.com/rest_constraints/cache_excerps
Filipe

56
खोज, उनकी प्रकृति से, क्षणिक हैं: डेटा एक ही पैरामीटर के साथ दो खोजों के बीच विकसित होता है, इसलिए मुझे लगता है कि GET अनुरोध खोज पैटर्न में सफाई से मैप नहीं करता है। इसके बजाय, खोज अनुरोध POST (/ संसाधन / खोज) होना चाहिए, फिर आप उस खोज को सहेज सकते हैं और खोज परिणाम, जैसे / संसाधन / खोज / iyn3zrt पर पुनर्निर्देशित कर सकते हैं। इस तरह, GET अनुरोध सफल होता है और समझ में आता है।
स्लीपब्लैंक

32
मुझे नहीं लगता कि खोज के लिए पोस्ट उपयुक्त विधि है, सामान्य GET अनुरोधों के लिए डेटा समय के साथ भी भिन्न हो सकते हैं।
आश्चर्य है कि

82
यह बिल्कुल संभव सबसे खराब उत्तर है। मुझे विश्वास नहीं हो रहा है कि इसमें बहुत सारे उतार-चढ़ाव हैं। यह उत्तर बताता है कि क्यों: programmers.stackexchange.com/questions/233164/…
richard

141

यदि आप GET अनुरोध में निकाय का उपयोग करते हैं, तो आप REST सिद्धांत को तोड़ रहे हैं, क्योंकि आपका GET अनुरोध कैश नहीं किया जा सकेगा, क्योंकि कैश सिस्टम केवल URL का उपयोग करता है।

और क्या बुरा है, आपके URL को बुकमार्क नहीं किया जा सकता है, क्योंकि URL में उपयोगकर्ता को इस पृष्ठ पर पुनर्निर्देशित करने के लिए आवश्यक सभी जानकारी नहीं है

अनुरोध बॉडी पैरामीटर के बजाय URL या क्वेरी पैरामीटर का उपयोग करें।

उदाहरण के लिए:

/myapp?var1=xxxx&var2=xxxx
/myapp;var1=xxxx/resource;var2=xxxx 

वास्तव में, HTTP RFC 7231 का कहना है कि:

GET अनुरोध संदेश के भीतर एक पेलोड में कोई परिभाषित शब्दार्थ नहीं है; GET अनुरोध पर पेलोड बॉडी भेजने से अनुरोध को अस्वीकार करने के लिए कुछ मौजूदा कार्यान्वयन हो सकते हैं।

अधिक जानकारी के लिए पर एक नज़र यहाँ


29
अपनी गलती से सीखें - मैंने स्वीकृत उत्तर के सुझाव (POSTing json) का उपयोग करते हुए एक एपीआई डिज़ाइन किया है, लेकिन मैं url मापदंडों पर आगे बढ़ रहा हूँ। बुकमार्क-क्षमता आपके विचार से अधिक महत्वपूर्ण हो सकती है। मेरे मामले में, कुछ खोज प्रश्नों (विज्ञापन अभियान) पर यातायात को निर्देशित करने की आवश्यकता थी। इसके अलावा, इतिहास एपीआई का उपयोग करना URL मापदंडों के साथ अधिक समझ में आता है।
जेक

2
यह इस बात पर निर्भर करता है कि इसका उपयोग कैसे किया जाता है। यदि आप एक ऐसे URL से लिंक कर रहे हैं जो उन मापदंडों के आधार पर पृष्ठ को लोड करता है, तो यह समझ में आता है, लेकिन यदि मुख्य पृष्ठ केवल AJAX कॉल कर रहा है, तो डेटा को फ़िल्टर मापदंडों के आधार पर प्राप्त करने के लिए, आप इसे वैसे भी बुकमार्क नहीं कर सकते क्योंकि इसका एक लिंक अजाक्स कॉल और कोई असर नहीं है। स्वाभाविक रूप से, आप एक URL को बुकमार्क भी कर सकते हैं कि जब आप वहां जाते हैं तो एक फ़िल्टर और POST बनाता है जो कि ajax कॉल पर होता है और यह ठीक काम करेगा।
डैनियल लोरेंज

@DanielLorenz सर्वश्रेष्ठ उपयोगकर्ता अनुभव के लिए, URL को उस स्थिति में इतिहास API के माध्यम से बदला जाना चाहिए। जब कोई वेबसाइट पिछले पृष्ठों पर नेविगेट करने के लिए ब्राउज़र बैक कार्यक्षमता का उपयोग करने की अनुमति नहीं देती है तो मैं खड़ा नहीं हो सकता। और अगर यह एक मानक सर्वर साइड जनरेट किया गया पेज है तो इसे बुकमार्क करने का एकमात्र तरीका GET अनुरोध का उपयोग करना होगा। ऐसा लगता है कि अच्छे ol 'क्वेरी पैरामीटर सबसे अच्छा समाधान हैं।
नाथन

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

@DanielLorenz आह ठीक है जो समझ में आता है। मुझे लगता है कि मैं गलत समझ रहा था कि आप क्या कह रहे थे।
नाथन १

70

ऐसा लगता है कि संसाधन फ़िल्टरिंग / खोज को RESTful तरीके से लागू किया जा सकता है। विचार एक नए समापन बिंदु को शुरू करने के लिए कहा जाता है /filters/या /api/filters/

इस समापन बिंदु फ़िल्टर का उपयोग एक संसाधन के रूप में माना जा सकता है और इसलिए POSTविधि के माध्यम से बनाया गया है । इस तरह - निश्चित रूप से - सभी मापदंडों को ले जाने के लिए शरीर का उपयोग किया जा सकता है और साथ ही जटिल खोज / फ़िल्टर संरचनाएं बनाई जा सकती हैं।

ऐसे फ़िल्टर बनाने के बाद खोज / फ़िल्टर परिणाम प्राप्त करने की दो संभावनाएँ हैं।

  1. यूनिक आईडी वाला एक नया संसाधन 201 Createdस्टेटस कोड के साथ लौटाया जाएगा । फिर इस आईडी का उपयोग करके GETअनुरोध किया जा सकता है /api/users/जैसे:

    GET /api/users/?filterId=1234-abcd
    
  2. नया फ़िल्टर बनने के बाद POSTइसके साथ उत्तर नहीं दिया जाएगा 201 Createdलेकिन एक बार हेडर 303 SeeOtherके साथ Locationइंगित किया जाएगा /api/users/?filterId=1234-abcd। इस रीडायरेक्ट को अंतर्निहित लाइब्रेरी के माध्यम से स्वचालित रूप से नियंत्रित किया जाएगा।

दोनों परिदृश्यों में फ़िल्टर किए गए परिणामों को प्राप्त करने के लिए दो अनुरोध करने की आवश्यकता है - इसे एक खामी के रूप में माना जा सकता है, खासकर मोबाइल अनुप्रयोगों के लिए। मोबाइल एप्लिकेशन के लिए मैं सिंगल POSTकॉल का उपयोग करूंगा /api/users/filter/

बनाए गए फ़िल्टर कैसे रखें?

उन्हें डीबी में संग्रहीत किया जा सकता है और बाद में उपयोग किया जा सकता है। उन्हें कुछ अस्थायी भंडारण में भी संग्रहीत किया जा सकता है जैसे कि रेडिस और कुछ टीटीएल है जिसके बाद वे समाप्त हो जाएंगे और हटा दिए जाएंगे।

इस विचार के क्या फायदे हैं?

फ़िल्टर, फ़िल्टर किए गए परिणाम देखने योग्य हैं और इन्हें बुकमार्क भी किया जा सकता है।


2
अच्छी तरह से यह स्वीकृत उत्तर होना चाहिए। आप REST सिद्धांतों का उल्लंघन नहीं करते हैं और आप संसाधनों के लिए लंबे जटिल प्रश्न बना सकते हैं। यह अच्छा, स्वच्छ और बुकमार्क संगत है। एकमात्र अतिरिक्त दोष निर्मित फ़िल्टर के लिए कुंजी / मान जोड़े को संग्रहीत करने की आवश्यकता है, और पहले से ही उल्लेख किए गए दो अनुरोध चरण हैं।
dantebarba

2
इस दृष्टिकोण के साथ एकमात्र चिंता यह है, यदि आपके पास क्वेरी में दिनांक-समय फ़िल्टर (या लगातार बदलते मूल्य) है। फिर db (या कैश) में स्टोर करने के लिए फिल्टर की संख्या असंख्य है।
रवी पांडे

17

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

सम्मेलन द्वारा, जब GET विधि का उपयोग किया जाता है, तो संसाधन की पहचान करने के लिए आवश्यक सभी जानकारी URI में एन्कोडेड होती है। एक सुरक्षित इंटरैक्शन (जैसे, पुनर्प्राप्ति) के लिए HTTP / 1.1 में कोई कन्वेंशन नहीं है, जहां क्लाइंट एक यूआरआई के क्वेरी भाग के बजाय HTTP इकाई निकाय में सर्वर को डेटा की आपूर्ति करता है। इसका मतलब है कि सुरक्षित संचालन के लिए, यूआरआई लंबे समय तक हो सकते हैं।


6
ElasticSearch भी शरीर के साथ मिलता है और अच्छी तरह से काम करता है!
तरुण सपरा

हाँ, लेकिन वे नियंत्रित करते हैं सर्वर कार्यान्वयन इंटरवेब पर tne xase नहीं हो सकता है।
user432024

7

जैसा कि मैं एक लार्वा / php बैकएंड का उपयोग कर रहा हूं, मैं इस तरह से कुछ के साथ जाना चाहता हूं:

/resource?filters[status_id]=1&filters[city]=Sydney&page=2&include=relatedResource

PHP स्वचालित रूप []से एक सरणी में परमेस को बदल देती है , इसलिए इस उदाहरण में मैं एक $filterचर के साथ समाप्त हो जाऊंगा जो एक सरणी / ऑब्जेक्ट फ़िल्टर के साथ रखता है, एक पृष्ठ और किसी भी संबंधित संसाधनों के साथ मैं उत्सुक लोड करना चाहता हूं।

यदि आप किसी अन्य भाषा का उपयोग करते हैं, तो यह अभी भी एक अच्छा सम्मेलन हो सकता है और आप []किसी सरणी में बदलने के लिए पार्सर बना सकते हैं ।


यह दृष्टिकोण अच्छा लग रहा है, लेकिन URL में वर्ग कोष्ठक का उपयोग करने के साथ समस्याएँ हो सकती हैं, देखें कि क्या-वर्ण-एक-उपयोग-में-एक-url
स्काई

2
@ यह URI एन्कोडिंग द्वारा [और से बचा जा सकता है ]। समूह क्वेरी पैरामीटर के लिए इन वर्णों के एन्कोडेड अभ्यावेदन का उपयोग करना एक प्रसिद्ध अभ्यास है। JSON: API विनिर्देशन में भी इसका उपयोग किया जाता है ।
जीलन

6

अगर आपका शुरुआती API पूरी तरह से Restful है या नहीं (तो विशेष रूप से तब जब आप अल्फा स्टेज में हैं) बहुत ज्यादा न करें। पहले काम करने के लिए बैक-एंड प्लंबिंग लें। जब तक आप व्यापक रूप से परीक्षण ("बीटा") के लिए पर्याप्त रूप से कुछ स्थिर नहीं कर लेते, तब तक आप चीजों को मैप करने के लिए कुछ प्रकार के URL परिवर्तन / री-राइटिंग कर सकते हैं।

आप उन यूआरआई को परिभाषित कर सकते हैं, जिनके मापदंडों को यूआरआई खुद पर स्थिति और सम्मेलन द्वारा एन्कोड किया गया है, एक ऐसे रास्ते से उपजी है जिसे आप जानते हैं कि आप हमेशा किसी चीज के लिए मैप करेंगे। मुझे PHP का पता नहीं है, लेकिन मुझे लगता है कि ऐसी सुविधा मौजूद है (क्योंकि यह वेब फ्रेमवर्क के साथ अन्य भाषाओं में मौजूद है):

।अर्थात। Param [i] = value [i] i के लिए i = 1..4 के साथ स्टोर # 1 (value1, value2, value3, ... URI क्वेरी पैरामीटर के लिए एक आशुलिपि के रूप में) के लिए "उपयोगकर्ता" प्रकार की खोज करें:

1) GET /store1/search/user/value1,value2,value3,value4

या

2) GET /store1/search/user,value1,value2,value3,value4

या निम्नानुसार (हालांकि मैं इसकी सिफारिश नहीं करूंगा, उस पर बाद में)

3) GET /search/store1,user,value1,value2,value3,value4

विकल्प 1 के साथ, आप /store1/search/userखोज हैंडलर (या जो भी PHP पदनाम) के साथ उपसर्ग किए गए सभी URI को मैप करते हैं, store1 के तहत संसाधनों की खोज करने के लिए डिफ़ॉल्ट (समकक्ष)/search?location=store1&type=user

एपीआई द्वारा प्रलेखित और लागू किए गए कन्वेंशन द्वारा, 4 के माध्यम से पैरामीटर मान 1 को कॉमा द्वारा अलग किया जाता है और उस क्रम में प्रस्तुत किया जाता है।

विकल्प 2 userस्थिति प्रकार # 1 के रूप में खोज प्रकार (इस मामले में ) को जोड़ता है । या तो विकल्प सिर्फ एक कॉस्मेटिक विकल्प है।

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

यूआरआई पर गुजरने वाले मापदंडों पर इसका लाभ यह है कि यह खोज यूआरआई का हिस्सा है (इस प्रकार एक खोज को एक संसाधन के रूप में माना जाता है, एक ऐसा संसाधन जिसकी सामग्री - और - समय के साथ बदल सकती है।) नुकसान यह है कि पैरामीटर आदेश अनिवार्य है। ।

एक बार जब आप ऐसा कुछ कर लेते हैं, तो आप GET का उपयोग कर सकते हैं, और यह केवल पढ़ने के लिए एक संसाधन होगा (क्योंकि आप इसे पोस्ट या PUT नहीं कर सकते - यह GET'ed होने पर अपडेट हो जाता है)। यह एक संसाधन भी होगा जो केवल तब ही अस्तित्व में आता है जब इसे लागू किया जाता है।

समय की अवधि के लिए या DELETE के साथ परिणामों को कैशिंग करके कोई और शब्दार्थ जोड़ सकता है, जिससे कैश हटाया जा सके। हालांकि, यह उन लोगों के लिए काउंटर चला सकता है जो आमतौर पर DELETE का उपयोग करते हैं (और क्योंकि लोग आमतौर पर कैशिंग हेडर के साथ कैशिंग को नियंत्रित करते हैं।)

आप इसके बारे में कैसे जाते हैं यह एक डिजाइन निर्णय होगा, लेकिन यह वह तरीका होगा जिसके बारे में मैं जाऊंगा। यह सही नहीं है, और मुझे यकीन है कि ऐसे मामले होंगे जहां ऐसा करना सबसे अच्छी बात नहीं है (विशेष रूप से बहुत जटिल खोज मानदंडों के लिए)।


7
यो, यदि आप (कोई, जो भी / जो भी) चीजें मेरे जवाब को कम करने के लिए प्रेरित करती हैं, तो क्या इससे आपको कम से कम अहंकार को ठेस पहुंचेगी। मुझे पता है कि यह इंटरवेज़ है, लेकिन ...;)
luis.espinal

107
मैंने इसे अस्वीकार नहीं किया, लेकिन इस तथ्य से कि प्रश्न शुरू होता है: "मैं वर्तमान में एक RESTful API को डिज़ाइन और कार्यान्वित कर रहा हूं" और आपका उत्तर "बहुत बुरा मत समझो, यदि आपका प्रारंभिक API पूरी तरह से RESTful है या नहीं" लगता है। मेरे लिए गलत है। यदि आप एक एपीआई डिजाइन कर रहे हैं तो आप एक एपीआई डिजाइन कर रहे हैं। सवाल यह है कि एपीआई को कैसे डिजाइन किया जाए, इस बारे में नहीं कि एपीआई को कैसे डिजाइन किया जाना चाहिए।
गार्डर

14
एपीआई है प्रणाली, काम एपीआई पर पहले नहीं बैकएंड पाइपलाइन, पहले कार्यान्वयन / बस एक नकली होना चाहिए सकता है। HTTP में पासिंग पैरामीटर के लिए एक तंत्र है, आप सुझाव दे रहे हैं कि इसे पुनर्निवेशित किया जाए, लेकिन इससे भी बदतर (नाम मान युग्मों के बजाय आदेशित पैरामीटर)। इसलिए डाउन वोट।
स्टीवन हेरोद

14
@ गर्गगढ़ - हां, यह गलत लगता है, लेकिन कई बार यह व्यावहारिक है। प्राथमिक उद्देश्य एक एपीआई डिजाइन करना है जो हाथ में व्यावसायिक संदर्भ के लिए काम करता है। यदि पूरी तरह से RESTFULL दृष्टिकोण हाथ में व्यापार के लिए उपयुक्त है, तो इसके लिए जाएं। यदि यह नहीं है, तो इसके लिए मत जाओ। यही है, एक एपीआई डिजाइन करें जो आपकी विशिष्ट व्यावसायिक आवश्यकताओं को पूरा करता है। अपनी प्राथमिक आवश्यकता के रूप में इसे Restfull बनाने के प्रयास में इधर-उधर जाना यह पूछने से अधिक भिन्न नहीं है कि "मैं X / Y समस्या में एडाप्टर पैटर्न का उपयोग कैसे करूँ।" जब तक वे वास्तविक, मूल्यवान समस्याओं को हल न करें, जूता सींग के प्रतिमान न लगाएँ।
luis.espinal

1
मैं एक संसाधन को राज्य के कुछ संग्रह के रूप में देखता हूं, और पैरामीटर उस राज्य के प्रतिनिधित्व को हेरफेर करने के लिए एक साधन के रूप में देखता हूं। इसे इस तरह से सोचें, यदि आप संसाधन को प्रदर्शित करने के तरीके को समायोजित करने के लिए knobs और स्विचेस का उपयोग कर सकते हैं (इसके कुछ बिट्स को दिखाएं / छिपाएं, इसे अलग-अलग तरीके से ऑर्डर करें, आदि ...) उन नियंत्रणों में परम हैं। यदि यह वास्तव में एक अलग संसाधन ('/ एल्बम' बनाम '/ कलाकार', उदाहरण के लिए) है, तो यह तब है जब इसे मार्ग में दर्शाया जाना चाहिए। वैसे भी मेरे लिए यह सहज है।
एरिक इलियट

2

FYI करें: मुझे पता है कि यह थोड़ा देर से है, लेकिन जो कोई दिलचस्पी रखता है, उसके लिए। निर्भर करता है कि आप कितने ईमानदार होना चाहते हैं, आपको अपनी स्वयं की फ़िल्टरिंग रणनीतियों को लागू करना होगा क्योंकि इस पर HTTP की कल्पना बहुत स्पष्ट नहीं है। मैं सभी फ़िल्टर मापदंडों जैसे उदाहरण के लिए url-एन्कोडिंग का सुझाव देना चाहूंगा

GET api/users?filter=param1%3Dvalue1%26param2%3Dvalue2

मुझे पता है कि यह बदसूरत है, लेकिन मुझे लगता है कि यह करने का सबसे आसान तरीका है और सर्वर साइड पर पार्स करना आसान होना चाहिए :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.