Je cherche quelle est la bonne façon de transmettre plusieurs valeurs pour le même nom de paramètre dans une demande GET.
J'ai vu des URL comme celle-ci:
http://server/action?id=a&id=b
Et j'ai vu des URL comme celle-ci:
http://server/action?id=a,b
Je crois comprendre que le premier est correct, mais je ne trouve aucune référence à ce sujet. J'ai jeté un œil à la spécification http mais je n'ai rien vu sur la manière dont la partie «requête» d'une URL devrait être constituée.
Je ne veux pas de réponse qui dit "non plus c'est bien" - si je construis un webservice, je veux savoir laquelle de ces méthodes est standard afin que les personnes utilisant mon webservice sachent comment passer plusieurs paramètres pour le même nom.
Alors, quelqu'un peut-il me diriger vers une source de référence officielle pour confirmer quelle option est correcte?
id=a&id=b
comme booléen AND etid=a,b
comme boolean OR.?id=5&id=3
. PHP ne lirait qu'une seule valeur pour id ici. Si je me souviens bien, cela devrait ressembler à ceci pour que cela fonctionne avec PHP:?id[]=5&id[]=3
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.
id=a,b
fait l'hypothèse que la virgule,
est un délimiteur valide. Mais vos valeurs de paramètre peuvent contenir un,
. Ensuite, le client doit s'échapper,
dans les valeurs des paramètres de requête. Mais vous pouvez décider que;
c'est mieux. Cela signifie que le client et le serveur doivent partager le délimiteur officiel de votre API.id=a&id=b
n'a pas ce problème même si cela rallonge les URLJe suggérerais de regarder comment les navigateurs gèrent les formulaires par défaut. Par exemple, jetez un œil à l'élément de formulaire
<select multiple>
et à la façon dont il gère plusieurs valeurs de cet exemple sur w3schools.Pour une utilisation PHP:
Exemple en direct d'en haut sur w3schools.com
D'en haut, si vous cliquez sur "saab, opel" et cliquez sur Soumettre, il générera un résultat de cars = saab & cars = opel . Ensuite, en fonction du serveur principal, les wagons de paramètres doivent apparaître comme un tableau que vous pouvez traiter ultérieurement.
J'espère que cela aidera tous ceux qui recherchent une manière plus «standard» de gérer ce problème.
la source
Je décris une méthode simple qui fonctionnait très bien en Python (Django Framework).
1. Lors de l'envoi de la demande, envoyez la demande comme ceci
2. Maintenant dans mon backend, je divise la valeur reçue avec une fonction de division qui crée toujours une liste.
Exemple: Donc, si j'envoie deux valeurs dans la requête,
alors le filtre sur les données est
Si j'envoie une seule valeur dans la demande,
alors le résultat du filtre est
3. Pour filtrer réellement les données, j'utilise simplement la fonction «in»
qui, en gros, exécute l'équivalent SQL de
avec la première demande et,
avec la deuxième demande.
Cela fonctionnerait également avec plus de 2 valeurs de paramètres dans la demande!
la source
il n'y a pas de standard, mais la plupart des frameworks supportent les deux, vous pouvez voir par exemple pour java spring qu'il accepte les deux ici
Et Spring MVC mappera un paramètre d'ID délimité par des virgules:
Ou une liste de paramètres d'id séparés:
la source