Autre #17175
point sur le mode "json-api", évolution/simplification
0%
Description
Je prends ce ticket à l'occasion de commentaires récents de ma part, comme quoi je n'étais pas à l'aise avec le mode "json-api", en preuve plutôt simple, d'un "git grep", j'ai l'impression que les connecteurs qui utilisent @endpoint sans "json-api", c'est uniquement ceux que j'ai développé moi :/
En guise d'inventaire/documentation, 'json-api', ça fait :
- la mise de la réponse sous une clé 'data'
- sauf si wrap_response=False est passé
- sauf si la réponse est de type HttpResponse, alors c'est envoyé brut
- l'ajout d'une clé 'err' à 0 de manière automatique
- sauf si wrap_response=False est passé
- l'attrapage des exceptions (sauf si ?raise=1 est passé dans l'URL)
- si l'exception contient un attribut err_code, il est utilisé dans la clé 'err'.
- si l'exception contient un attribut http_status, il est utilisé pour la réponse.
- si c'est ObjectDoesNotExist ou Http404, c'est une 404 qui est produite.
- si c'est PermissionDenied, une 403
Maintenant la discussion. Je me demande dans quel mesure, à l'exception du premier point, tout pourrait également se faire quand on ne précise rien; c'est à dire que sans rien préciser, ça reviendrait à json-api + wrap_response=False, + l'ajout de 'err' à 0 quand même.
De là, retirer de @endpoint les arguments serializer_type et wrap_response, ce qui simplifie tout à fait la documentation développeur, avec comme seule obligation la modification des connecteurs "json-api" actuels pour qu'ils modifient leur réponse pour la mettre dans une clé "data".
Question code, ça pourrait commencer sans rien changer (d'autre que la clé "data") mais à terme je serais tenté par dégager passerelle/utils/jsonresponse.py, dont je n'aime pas le code (mais 80% ça doit être la chaine de doctest).
Fichiers
Demandes liées
Révisions associées
jsonresponse: remove serializer_type & wrap_response options (#17175)
jsonresponse: remove unmaintained doctests (#17175)
jsonresponse: remove unused serializers from to_json decorator (#17175)
jsonresponse: simplify decorator wrapper (#17175)
Historique
Mis à jour par Frédéric Péters il y a presque 7 ans
- Fichier 0001-general-switch-to-json-api-wrap_response-False-as-en.patch 0001-general-switch-to-json-api-wrap_response-False-as-en.patch ajouté
Vraiment réalisé à fin de validation de l'idée après avoir écrit le ticket, le patch qui bascule sur json-api et wrap_response à False.
Seul problème rencontré l'endpoint 'search' du connecteur "base adresse", qui a été prévu pour retourner une liste (et json-api fait un data.get('err', 0)), c'est en rapport avec l'ajout d'un entête x-error-code, ça pourrait être squeezé étant donné que de toute façon cet endpoint est fait pour suivre le format de nominatim. (mais en attendant j'ai juste mis serializer_type='json' à celui-là seul).
Si on s'accorde sur ce ticket, le vrai patch, il retirera complètement les paramètres serializer_type et wrap_response.
Bref, on se trouve à devoir ajouter des {'data':
à plein d'endroits mais ce n'est pas pire qu'ajouter serializer_type='json-api'
à ces endroits, et ça fait un modèle très simple à comprendre/document où ce qui est retourné c'est ce qu'on reçoit dans le navigateur, sans altération.
Mis à jour par Frédéric Péters il y a presque 7 ans
- Lié à Development #17169: json data store : passer en mode json-api {err:0, data:...} ajouté
Mis à jour par Frédéric Péters il y a presque 7 ans
Seul problème rencontré l'endpoint 'search' du connecteur "base adresse", qui a été prévu pour retourner une liste (et json-api fait un data.get('err', 0)), c'est en rapport avec l'ajout d'un entête x-error-code, ça pourrait être squeezé étant donné que de toute façon cet endpoint est fait pour suivre le format de nominatim. (mais en attendant j'ai juste mis serializer_type='json' à celui-là seul).
Après #16856, c'est ok.
Et imaginant le nettoyage, retirer les doctests pas maintenus, c'est 225 lignes en moins. Et retirer le choix de type de sérialisation (i.e. forcer json-api et wrap_response=False), c'est ~70 lignes de gagnées.
À titre indicatif, https://git.entrouvert.org/passerelle.git/log/?h=wip/unify-serializer-type
Mis à jour par Benjamin Dauvergne il y a presque 7 ans
Je trouve ça très bien. Je ne suis toujours pas fan du comportement par défaut pour l'exception ObjectDoesNotExist, toujours l'impression qu'on y perd plus (traitement par dessus la jambe des exceptions) que ce qu'on y gagne (pas de trace, juste une 404).
Mis à jour par Frédéric Péters il y a presque 7 ans
Je trouve ça très bien. Je ne suis toujours pas fan du comportement par défaut pour l'exception ObjectDoesNotExist, toujours l'impression qu'on y perd plus (traitement par dessus la jambe des exceptions) que ce qu'on y gagne (pas de trace, juste une 404).
Ça me va très bien d'ensuite faire évoluer les comportements.
Mis à jour par Thomas Noël il y a presque 7 ans
wip/unify-serializer-type me semble vraiment très bien également (et effectivement, ObjectDoesNotExist, à revoir)
Mis à jour par Frédéric Péters il y a presque 7 ans
- Fichier 0005-jsonresponse-simplify-decorator-wrapper-17175.patch 0005-jsonresponse-simplify-decorator-wrapper-17175.patch ajouté
- Fichier 0004-jsonresponse-remove-unused-serializers-from-to_json-.patch 0004-jsonresponse-remove-unused-serializers-from-to_json-.patch ajouté
- Fichier 0003-jsonresponse-remove-unmaintained-doctests-17175.patch 0003-jsonresponse-remove-unmaintained-doctests-17175.patch ajouté
- Fichier 0002-jsonresponse-remove-serializer_type-wrap_response-op.patch 0002-jsonresponse-remove-serializer_type-wrap_response-op.patch ajouté
- Fichier 0001-general-switch-to-json-api-wrap_response-False-as-en.patch 0001-general-switch-to-json-api-wrap_response-False-as-en.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
Voilà la branche sous forme de patchs.
Mis à jour par Frédéric Péters il y a presque 7 ans
- Statut changé de En cours à Résolu (à déployer)
commit 8876acbec567ff5362dbc67ff0a1ce9e41de23cc Author: Frédéric Péters <fpeters@entrouvert.com> Date: Sun Jun 25 11:14:03 2017 +0200 jsonresponse: simplify decorator wrapper (#17175) commit 5a43433e6799bba46bd33aa541e3a5a2f272b593 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Sat Jun 24 23:57:53 2017 +0200 jsonresponse: remove unused serializers from to_json decorator (#17175) commit 0c0874576bd1893ddc0118609177ab2c20abd7b5 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Sat Jun 24 23:50:54 2017 +0200 jsonresponse: remove unmaintained doctests (#17175) commit 46549bd81c4592469159df24e84ddad13802eb1a Author: Frédéric Péters <fpeters@entrouvert.com> Date: Sat Jun 24 23:49:03 2017 +0200 jsonresponse: remove serializer_type & wrap_response options (#17175) commit 2eeeeb747c37505b2805cedaa42862cad3b0ea8c Author: Frédéric Péters <fpeters@entrouvert.com> Date: Sat Jun 24 19:56:26 2017 +0200 general: switch to json-api/wrap_response:False as endpoint default (#17175)
Mis à jour par Benjamin Dauvergne il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Fermé
general: switch to json-api/wrap_response:False as endpoint default (#17175)