web-dev-qa-db-fra.com

Comment envoyer NULL dans une chaîne de requête HTTP?

Je développe une API qui peut accepter les trois principaux types de données en tant que valeurs pour interroger les paramètres de chaîne: boolean, string & numeric (integer ou float). Par défaut, tout est récupéré dans une chaîne (je ne pense pas qu'il soit possible de contourner cela), mais les paramètres sont configurés avec un type afin que je les convertisse au type approprié.

Je dois maintenant commencer à accepter la valeur NULL en tant que valeur pour les trois types de données, mais je ne sais pas quel est le meilleur moyen de le faire.

Certaines personnes semblent n'accepter aucune valeur comme NULL (?param, sans =), mais cela ne fonctionne pas vraiment pour moi:

  1. J'accepte déjà cela comme true pour les booléens, bien que cela puisse être changé.
  2. Il est reçu sous forme de chaîne vide, ce qui est une valeur valide pour le type de données string.

Donc, voici les deux seules options que je peux voir, dont aucune ne fonctionne pour moi:

  1. Utilisez une constante, telle que "NULL" ou "~". Cela fonctionne pour les booléens et les nombres, mais pas pour les chaînes, car cela pourrait être la valeur de chaîne souhaitée.
  2. Utilisez une valeur vide. Encore une fois, cela peut fonctionner pour les booléens et les nombres, mais pas pour les chaînes, car cela pourrait être la valeur de chaîne souhaitée.

Il semble que mon seul choix soit d'utiliser une constante, et pour éviter les problèmes, cette constante peut être interdite à partir de chaînes. Mais est-ce vraiment la seule option viable? Je souhaite qu'il y ait un meilleur moyen. :(

Edit : Je viens d'avoir une autre idée qui pourrait fonctionner, mais je ne suis pas sûr de savoir comment cela serait perçu. Je pense que cela enfreint définitivement les normes et que beaucoup de gens ne l'aimeraient probablement pas, mais régleraient mon problème mieux que toute autre solution jusqu'à présent. En principe, l’idée serait d’utiliser JSON, qui prend en charge les types de données natifs. Je n'ai pas ce problème avec les demandes POST parce qu'elles utilisent JSON.

L'idée serait donc de prendre JSON dans la chaîne de requête, en permettant essentiellement une chaîne de requête alternative qui remplacerait la chaîne HTTP standard. Quelque chose comme: ?_json={"foo":"bar","param":null} au lieu de ?foo=bar&param=~. Ou peut-être même prendre entièrement en charge la chaîne de requête: ?{"foo":"bar","param":null}.

8
Marco Roy

Envoyez une valeur NULL URLEncoded (% 00) pour tout ce que vous définissez spécifiquement sur null. Il devrait être correctement décodé URL. 

11
Kylar

ou tout simplement ne pas envoyer de valeur .. laisser la valeur de la requête param vide dans votre url de demande get .. comme -

URL de l'API /? Foo = & some_other_param = value

dans l'API foo sera reçu comme null

0
enthusiast