Project

General

Profile

Développement #85776

permettre de passer une liste en paramètres d'URL d'un appel webservice (?)

Added by Valentin Deniaud 11 months ago. Updated 10 months ago.

Status:
Fermé
Priority:
Normal
Target version:
-
Start date:
17 January 2024
Due date:
% Done:

0%

Estimated time:
Patch proposed:
No
Planning:
No

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

Revision 8ced65d3 (diff)
Added by Frédéric Péters 10 months ago

misc: add special support for tuple/list/set data in query strings (#85776)

History

#1

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

#2

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 :

#3

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:...

#4

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...

#6

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.

#7

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 :

#8

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 :

#9

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 :

#10

Updated by Transition automatique 10 months ago

  • Status changed from Résolu (à déployer) to Solution déployée
#11

Updated by Transition automatique 8 months ago

Automatic expiration

Also available in: Atom PDF