GET अनुरोध में समान पैरामीटर नाम के लिए कई मान पास करने का सही तरीका


194

मैं देख रहा हूँ कि GET अनुरोध में समान पैरामीटर नाम के लिए कई मान पास करने का सही तरीका क्या है।

मैंने इस तरह से URL देखे हैं:

http://server/action?id=a&id=b

और मैंने इस तरह से URL देखे हैं:

http://server/action?id=a,b

मेरी समझ यह है कि पहला सही है, लेकिन मुझे इसके लिए कोई संदर्भ नहीं मिल रहा है। मुझे http युक्ति पर एक नज़र थी लेकिन इस बारे में कुछ भी नहीं देख सका कि किसी URL के 'क्वेरी' भाग को कैसे बनाया जाना चाहिए।

मुझे ऐसा उत्तर नहीं चाहिए जो "या तो ठीक है" - अगर मैं एक वेबबेस सेवा का निर्माण कर रहा हूं, तो मैं जानना चाहता हूं कि इनमें से कौन सी विधि मानक है ताकि मेरे वेबबेस सेवा का उपयोग करने वाले लोग यह जान सकें कि एक ही नाम के लिए कई मापदंडों को कैसे पारित किया जाए।

तो, क्या कोई मुझे आधिकारिक संदर्भ स्रोत पर यह पुष्टि करने के लिए इंगित कर सकता है कि कौन सा विकल्प सही है?

जवाबों:


166

वास्तव में, कोई परिभाषित मानक नहीं है। उस जानकारी का समर्थन करने के लिए, क्वेरी स्ट्रिंग अध्याय में विकिपीडिया पर एक नज़र डालें । निम्नलिखित टिप्पणी है:

हालांकि कोई निश्चित मानक नहीं है, अधिकांश वेब फ्रेमवर्क एक ही क्षेत्र के साथ कई मूल्यों को जोड़ने की अनुमति देते हैं। [३] [४]

इसके अलावा, जब आप RFC 3986 , सेक्शन 3.4 क्वेरी में एक नज़र डालते हैं , तो कई मानों वाले मापदंडों की कोई परिभाषा नहीं है।

अधिकांश एप्लिकेशन आपके द्वारा दिखाए गए पहले विकल्प का उपयोग करते हैं http://server/action?id=a&id=b:। उस जानकारी का समर्थन करने के लिए, इस Stackoverflow लिंक और ASP.NET अनुप्रयोगों के बारे में MSDN लिंक पर एक नज़र डालें , जो कई मानों वाले मापदंडों के लिए समान मानक का उपयोग करते हैं।

हालाँकि, चूंकि आप एपीआई विकसित कर रहे हैं, इसलिए मैं आपको सुझाव देता हूं कि आपके लिए सबसे आसान क्या है, क्योंकि एपीआई के कॉलर को क्वेरी स्ट्रिंग बनाने में बहुत परेशानी नहीं होगी।


इसके विपरीत किसी भी जानकारी के अभाव में, मुझे लगता है कि आप सही हैं - यदि RFC3986 एक मानक निर्दिष्ट नहीं करता है, तो एक नहीं है। धन्यवाद एडुआर्डो।
स्ट्राइबैगर

19
एक id=a&id=bबूलियन और, id=a,bबूलियन या के रूप में उपयोग करने का सुझाव देगा ।
एलेक्स स्क्रीपनीक

17
FWIW PHP पढ़ने वाले args की तरह समर्थन नहीं करता है ?id=5&id=3। PHP केवल id के लिए एक मान में पढ़ेगा। अगर मुझे सही से याद है, तो PHP के साथ काम करने के लिए इसे इस तरह देखना होगा:?id[]=5&id[]=3
आपने

3
+1 के लिएsince you are developing the APIs, I suggest you to do what is the easiest for you, since the caller of the API will not have much trouble creating the query string.
अमृत

2
id=a,bयह धारणा बनाता है कि कोमा ,एक वैध परिसीमन है। लेकिन आपके पैरामीटर मानों में एक हो सकता है ,। तब क्लाइंट ,को क्वेरी पैरामीटर मानों में भागने की आवश्यकता होती है । लेकिन आप तय कर सकते हैं ;कि बेहतर है। इसका मतलब है कि क्लाइंट और सर्वर को आपके एपीआई के लिए आधिकारिक सीमांकक साझा करना चाहिए। id=a&id=bयह समस्या नहीं है, भले ही यह लंबे समय तक
पेशाब

5

मैं यह देखने का सुझाव दूंगा कि ब्राउज़र डिफ़ॉल्ट रूप से कैसे संभालते हैं। उदाहरण के लिए, फॉर्म एलिमेंट पर एक नज़र डालें <select multiple>और यह w3schools पर इस उदाहरण से कई मानों को कैसे संभालता है।

<form action="/action_page.php">
<select name="cars" multiple>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="opel">Opel</option>
  <option value="audi">Audi</option>
</select>
<input type="submit">
</form>

PHP के उपयोग के लिए:

<select name="cars[]" multiple>

ऊपर से लाइव उदाहरण w3schools.com पर

ऊपर से यदि आप "साब, ओपल" पर क्लिक करते हैं और सबमिट पर क्लिक करते हैं, तो यह कारों = साब और कारों = ओपल के परिणामस्वरूप उत्पन्न होगा । फिर बैक-एंड सर्वर के आधार पर, पैरामीटर कारों को एक सरणी के रूप में आना चाहिए जिसे आप आगे की प्रक्रिया कर सकते हैं।

आशा है कि यह किसी को भी इस मुद्दे को संभालने के अधिक 'मानक' तरीके की तलाश में मदद करता है।

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