GET isteğinde aynı parametre adı için birden çok değer iletmenin doğru yolu


194

Ben bir GET isteğinde aynı parametre adı için birden çok değer geçirmek için doğru yolu nedir içine arıyorum.

Bunun gibi URL'ler gördüm:

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

Ve şöyle URL'ler gördüm:

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

Anladığım kadarıyla, birincisi doğru, ancak bunun için herhangi bir referans bulamıyorum. Ben http spec bir göz vardı ama bir URL 'sorgu' kısmı nasıl yapılmalıdır hakkında hiçbir şey göremedim.

"Ya da iyi" yazan bir cevap istemiyorum - bir web hizmeti oluşturuyorsam, web hizmetimi kullanan kişilerin aynı isim için birden fazla parametreyi nasıl geçireceğini bilmesi için bu yöntemlerden hangisinin standart olduğunu bilmek istiyorum.

Peki, birisi hangi seçeneğin doğru olduğunu onaylamak için resmi bir referans kaynağına işaret edebilir mi?

Yanıtlar:


166

Gerçekten de, tanımlanmış bir standart yoktur. Bu bilgileri desteklemek için Sorgu Dizesi bölümündeki wikipedia'ya göz atın . Aşağıdaki yorum var:

Kesin bir standart olmasa da, çoğu web çerçevesi birden çok değerin tek bir alanla ilişkilendirilmesine izin verir. [3] [4]

Ayrıca, 3.4 Sorgu bölümündeki RFC 3986'ya baktığınızda, birden fazla değere sahip parametreler için tanım yoktur.

Çoğu uygulama göstermiştir birinci seçeneği kullanın: http://server/action?id=a&id=b. Bu bilgileri desteklemek için, bu Stackoverflow bağlantısına ve birden çok değere sahip parametreler için aynı standardı kullanan ASP.NET uygulamalarıyla ilgili bu MSDN bağlantısına bakın .

Bununla birlikte, API'leri geliştirdiğiniz için, API'nın arayanı sorgu dizesini oluşturmakta çok fazla sorun yaşamayacağı için sizin için en kolay olanı yapmanızı öneririm.


Aksine herhangi bir bilginin yokluğunda, haklısın - RFC3986 bir standart belirtmezse, o zaman bir tane yoktur. Teşekkürler Eduardo.
stripybadger

19
A id=a&id=b, boole AND ve id=a,bboolean OR olarak kullanılmasını önerir .
Alex Skrypnyk

17
FWIW PHP gibi okumaları desteklemez ?id=5&id=3. PHP burada id için sadece tek bir değerde okurdu. Eğer doğru hatırlıyorsam, PHP ile çalışması için böyle görünmek zorunda kalacaktı:?id[]=5&id[]=3
ne denediniz

3
+1 içinsince 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.
Amr

2
id=a,bkomanın ,geçerli bir sınırlayıcı olduğu varsayımını yapar . Ancak parametre değerleriniz a içerebilir ,. Sonra istemcinin ,sorgu parametre değerlerinden kaçması gerekir . Ama ;daha iyi olduğuna karar verebilirsin . Bu, istemcinin ve sunucunun API'nız için resmi sınırlayıcıyı paylaşması gerektiği anlamına gelir. id=a&id=burl'leri
uzatsa

5

Tarayıcıların formları varsayılan olarak nasıl kullandıklarına bakmanızı öneririm. Örneğin, form öğesine <select multiple>ve w3schools'ta bu örnekten birden çok değeri nasıl ele aldığına bir göz atın .

<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 kullanımı için:

<select name="cars[]" multiple>

W3schools.com adresinden yukarıdan canlı örnek

Yukarıdan "saab, opel" i tıklayıp gönder'i tıklarsanız, cars = saab & cars = opel sonucunu oluşturur . Ardından, arka uç sunucusuna bağlı olarak, parametre araçları daha fazla işleyebileceğiniz bir dizi olarak karşımıza çıkmalıdır.

Umarım bu, bu sorunu ele almanın daha 'standart' bir yolunu arayan herkese yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.