Vincent Barrault

Quelles sont les bonnes pratiques avec Query String ?

Quelles sont les bonnes pratiques avec Query String ?

Table des matières

A quoi servent les Query String ?

J'ai toujours utilisé les Query Strings Parameters pour envoyer des informations lors d'une requête.

Par exemple avec un formulaire:

<form action="/path/of/target" method="get">
  <input type="text" name="foo" />
  <input type="text" name="bar" />
  <input type="submit" />
</form>

L'envoi de ce formulaire va se faire avec une Query String de la forme suivante: /path/of/target?foo=toto&bar=tata

Mais il peut aussi être utilisé comme "cache buster" si le serveur utilise l'url comme identifiant de la ressource.

https://my.domain.fr/file?v=1
https://my.domain.fr/file?v=2
https://my.domain.fr/file?v=3

De cette manière, on est certain de récupérer la dernière version du fichier à chaque appel si on change toujours le paramètre ?v=N

Comment passer des structures complexes ?

Dans mon exemple précedent, mon formulaire a généré un objet qu'il a envoyé via la requête à la page /path/of/target. Cet objet pourrait ressembler à ceci:

{
    "foo": "tata",
    "bar": "toto"
}

Mais comment puis-je passer des objets plus complets à /path/of/target ? Comme par exemple la structure suivante:

{
    "embed": {
        "foo": "tata",
        "bar": 123
    },
    "list": [1, 2, 3]
}

Pour tester en php, je vais créer le script suivant:

./index.php
<?php

var_dump($_GET);

J'exécute la commande php -S localhost:9999 pour lancer un serveur avec la page et j'essaye de l'appeler avec http://localhost:9999/?embed[foo]=tata&embed[bar]=123&list[0]=1&list[1]=2&list[2]=3

Le résultat est le suivant:

/Labs/php/query-string/index.php:3:
array (size=2)
  'embed' => 
    array (size=2)
      'foo' => string 'tata' (length=4)
      'bar' => string '123' (length=3)
  'list' => 
    array (size=3)
      0 => string '1' (length=1)
      1 => string '2' (length=1)
      2 => string '3' (length=1)

La structure est bonne, même si les valeurs embed.bar et list[x] sont en chaîne de caractères et pas en nombres.

Conclusion

Les Query String Parameters s'utilisent principalement avec la méthode GET, donc pour de la lecture de données.

La plupart du temps, je les utilise pour envoyer des filtres à une requête GET et dans 99% des cas, les filtres sont simples et la Query String ressemble à ?filtre1=value1&filtre2=value2&....

Quand il est nécéssaire de passer un objet plus compliqué, je me pose les questions suivantes:

En conclusion, utilisez la Query String pour des choses simples !