web-dev-qa-db-fra.com

Manière correcte de transmettre plusieurs valeurs pour le même nom de paramètre dans une requête GET

Je cherche quel est le bon moyen de transmettre plusieurs valeurs pour le même nom de paramètre dans une demande GET.

J'ai vu des URL comme ceci:

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

Et j'ai vu des URL comme ceci:

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

Je crois comprendre que le premier est correct, mais je ne trouve aucune référence à cela. J'ai jeté un œil à la spécification http, mais je ne pouvais rien savoir de la manière dont la partie "requête" d'une URL devrait être composée.

Je ne veux pas de réponse disant "que ce soit bien" - si je construis un service Web, je veux savoir laquelle de ces méthodes est standard afin que les personnes utilisant mon service Web sachent comment transmettre plusieurs paramètres pour le même nom.

Alors, quelqu'un peut-il m'indiquer une source de référence officielle pour confirmer quelle option est correcte?

159
stripybadger

En effet, il n'y a pas de norme définie. Pour soutenir cette information, jetez un coup d’œil à wikipedia, dans le chapitre Query String . Il y a le commentaire suivant:

Bien qu’il n’existe pas de norme définitive, la plupart des infrastructures Web autorisent l’association de plusieurs valeurs à un même champ . [3][4]

De plus, lorsque vous jetez un coup d'œil au RFC 3986 , dans la section .4 Query , il n'y a pas de définition pour les paramètres à valeurs multiples.

La plupart des applications utilisent la première option que vous avez affichée: http://server/action?id=a&id=b. Pour prendre en charge ces informations, jetez un œil à ceci lien Stackoverflow , et ceci lien MSDN à propos des applications ASP.NET, qui utilisent le même standard pour les paramètres à valeurs multiples.

Cependant, étant donné que vous développez les API, je vous suggère de faire ce qui est le plus facile pour vous, car l'appelant de l'API n'aura pas beaucoup de difficulté à créer la chaîne de requête.

137
EduardoFernandes

Je suggérerais de regarder comment les navigateurs gèrent les formulaires par défaut. Par exemple, jetez un coup d'œil à l'élément de formulaire <select multiple> et à la façon dont il gère plusieurs valeurs de cet exemple dans 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>

Pour PHP, utilisez:

<select name="cars[]" multiple>

Exemple direct d'en haut sur w3schools.com

En haut, si vous cliquez sur "saab, opel" et que vous cliquez sur soumettre, le résultat obtenu sera cars = saab & cars = opel . Ensuite, en fonction du serveur principal, le paramètre cars devrait apparaître comme un tableau que vous pouvez traiter ultérieurement.

J'espère que cela aidera tous ceux qui recherchent un moyen plus "standard" de gérer ce problème.

1
phanf