Développement #85776
permettre de passer une liste en paramètres d'URL d'un appel webservice (?)
0%
Description
Actuellement si on passe un gabarit qui renvoie une liste ['a', 'b']
en paramètre d'URL, ça se retrouve sérialisé en ?list=['a', 'b']
, inexploitable pour une application derrière.
Ce serait envisageable d'obtenir une querystring qui ait du sens, c'est à dire ?list=a&list=b
?
Actuellement on est obligé de rajouter un |join:','
au gabarit, et de gérer le split sur les virgules dans l'application derrière. Et si on oublie le join, l'application derrière sortira une erreur peu compréhensible (voir par ex #85206).
Associated revisions
History
Updated by Frédéric Péters 11 months ago
Pour les données structurées c'est quand même mieux de passer dans le POST, plutôt qu'inventer des types se sérialisation sur la query string.
Ce serait envisageable d'obtenir une querystring qui ait du sens, c'est à dire ?list=a&list=b ?
Par exemple je ne serais pas bien chaud pour cette forme, qui selon ce qu'il y a en face pourrait faire qu'une des deux valeurs soit ignorée (typiquement si elle fait request.POST[key]
), je préférerais &list=a,b
qui évite ça, en entendant bien que c'est assez subjectif.
~~
Alternativement, en étant strict sur le fait que la query string c'est du texte, lever une erreur quand on y passe autre chose, ça attraperait le problème évoqué plus tôt, de manière plus compréhensible.rep
Updated by Robot Gitea 11 months ago
- Status changed from Nouveau to En cours
- Assignee set to Frédéric Péters
Frédéric Péters (fpeters) a ouvert une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/wcs/pulls/1041
- Titre : WIP: misc: add special support for tuple/list/set data in query strings (#85776)
- Modifications : https://git.entrouvert.org/entrouvert/wcs/pulls/1041/files
Updated by Thomas Noël (congés → 5 décembre) 11 months ago
Indiqué sur la PR : je ne suis pas fan de la magie proposée, qui va de plus planter si un des éléments contient une virgule. Personnellement je ne trouve pas problématique l'usage de |join:...
Updated by Valentin Deniaud 11 months ago
C'est problématique pour la raison évoquée que quand on l'oublie c'est difficile à détecter. Ensuite on peut remonter à la raison pour laquelle c'est oublié : on permet d'envoyer les listes telles quelles dans les données POST, pour un œil non averti on est donc dans une situation du type « des fois faut mettre |join, des fois pas », c'est dommage.
Mais l'objet du ticket c'est aussi de dire qu'actuellement on envoie une sérialisation inutilisable, qu'il ne faudrait pas.
Donc juste lever une erreur quand on essaye d'envoyer une liste, ça serait OK.
Après moi je ne comprend pas pourquoi la forme ?list=a&list=b
serait inventer un truc, c'est le comportement par défaut de la lib requests, c'est géré automatiquement par les ListField DRF, c'est récupérable nativement en Django avec request.GET.getlist...
Updated by Frédéric Péters 11 months ago
Après moi je ne comprend pas pourquoi la forme ?list=a&list=b serait inventer un truc
La phrase entière était : Pour les données structurées c'est quand même mieux de passer dans le POST, plutôt qu'inventer des types se sérialisation sur la query string.
Elle est une généralité sur les données structurées, pas spécifiquement posée pour les listes.
Puis sur la proposition de s'accorder sur ?list=a&list=b je note que je ne suis pas enthousiaste sur cette forme particulière. Je note aussi dans la PR :
Avec ma préférence pour que ça produise key=v1,v2, plutôt que key=v1&key=v2, mais ça peut se discuter un peu.
Et donc si on s'accorde pour minimiser le risque d'ignorer des données (je cite l'emploi de request.POST[key]
) parce qu'il y a d'autres avantages ("c'est géré automatiquement par les ListField DRF"), pourquoi pas.
Updated by Robot Gitea 10 months ago
- Status changed from En cours to Solution proposée
Frédéric Péters (fpeters) a demandé une relecture de Valentin Deniaud (vdeniaud) sur une pull request sur Gitea concernant cette demande :
Updated by Robot Gitea 10 months ago
- Status changed from Solution proposée to Solution validée
Valentin Deniaud (vdeniaud) a approuvé une pull request sur Gitea concernant cette demande :
Updated by Robot Gitea 10 months ago
- Status changed from Solution validée to Résolu (à déployer)
Frédéric Péters (fpeters) a mergé une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/wcs/pulls/1041
- Titre : misc: add special support for tuple/list/set data in query strings (#85776)
- Modifications : https://git.entrouvert.org/entrouvert/wcs/pulls/1041/files
Updated by Transition automatique 10 months ago
- Status changed from Résolu (à déployer) to Solution déployée
misc: add special support for tuple/list/set data in query strings (#85776)