Projet

Général

Profil

Development #85776

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

Ajouté par Valentin Deniaud il y a 3 mois. Mis à jour il y a 2 mois.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
17 janvier 2024
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

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

Révisions associées

Révision 8ced65d3 (diff)
Ajouté par Frédéric Péters il y a 2 mois

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

Historique

#1

Mis à jour par Frédéric Péters il y a 3 mois

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

Mis à jour par Robot Gitea il y a 3 mois

  • Statut changé de Nouveau à En cours
  • Assigné à mis à Frédéric Péters

Frédéric Péters (fpeters) a ouvert une pull request sur Gitea concernant cette demande :

#3

Mis à jour par Thomas Noël il y a 3 mois

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

Mis à jour par Valentin Deniaud il y a 3 mois

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

Mis à jour par Frédéric Péters il y a 3 mois

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

Mis à jour par Robot Gitea il y a 2 mois

  • Statut changé de En cours à 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

Mis à jour par Robot Gitea il y a 2 mois

  • Statut changé de Solution proposée à Solution validée

Valentin Deniaud (vdeniaud) a approuvé une pull request sur Gitea concernant cette demande :

#9

Mis à jour par Robot Gitea il y a 2 mois

  • Statut changé de Solution validée à Résolu (à déployer)

Frédéric Péters (fpeters) a mergé une pull request sur Gitea concernant cette demande :

#10

Mis à jour par Transition automatique il y a 2 mois

  • Statut changé de Résolu (à déployer) à Solution déployée
#11

Mis à jour par Transition automatique il y a 8 jours

Automatic expiration

Formats disponibles : Atom PDF