Projet

Général

Profil

Development #12924

Ajout header http dans décorateur json

Ajouté par Jean-Baptiste Jaillet il y a plus de 7 ans. Mis à jour il y a presque 7 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Jean-Baptiste Jaillet
Version cible:
-
Début:
24 août 2016
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Ajouter un header dans la réponse http renvoyée par un endpoint X-PASSERELLE-ERR: 0 ou 1


Fichiers


Demandes liées

Lié à w.c.s. - Development #12916: appel webservice : gestion du code "err" et d'un header d'erreurFermé24 août 2016

Actions

Révisions associées

Révision 3a4486f8 (diff)
Ajouté par Jean-Baptiste Jaillet il y a plus de 7 ans

jsonresponse: add http header for error (#12924)

Historique

#1

Mis à jour par Frédéric Péters il y a plus de 7 ans

Le contexte c'est qu'un webservice dont le retour doit être un document (par exemple la récupération d'un fichier via CMIS), il doit pouvoir renvoyer un document qui est du json, et du coup, il faut trouver autre chose que ce même json pour signaler qu'il y a eu erreur.

#2

Mis à jour par Thomas Noël il y a plus de 7 ans

  • Lié à Development #12916: appel webservice : gestion du code "err" et d'un header d'erreur ajouté
#3

Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans

Voilà pas de tests, mais juste pour voir si ça tient la route.
J'ai testé les cas qui reviennent et c'est bon. Je voulais être sûr de pas avoir raté un cas possible.

#4

Mis à jour par Thomas Noël il y a plus de 7 ans

le retour d'une fonction n'est pas forcément un dictionnaire.

Pour moi il faut ajouter un paramètre "header_error=0" dans render_data() qui ajoute systématiquement le header correspondant dans la réponse ; et l'utiliser dans le self.render_data(..., header_error=data['err']) final de api()

#5

Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans

Voilà avec les tests.

#6

Mis à jour par Thomas Noël il y a plus de 7 ans

(sans importance, mais: inutile d'ajouter trop de lignes vides, genre celles au dessus des return, tu peux les retirer)

Ensuite, dans les test, il faudrait surtout arriver à tester un endpoint qui casse (prendre un connecteur basique dans ceux qu'on a, genre clicrdv, et simuler une erreur du côté du logiciel tiers)

#7

Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans

Vu avec Josué suite à une de ses discussions avec Fred (https://dev.entrouvert.org/issues/12838), j'ai ajouté un test directement sur un connecteur qui simulait une erreur pour voir la présence du header.
J'ai gardé l'ancien test aussi qui est plus général et ne me semble pas hors sujet dans cette modification.

#8

Mis à jour par Frédéric Péters il y a plus de 7 ans

Mettre le tout dans un seul commit. Et dans le ticket correspondant côté w.c.s. je dis que je ne suis pas grand fan d'appeler ça X-Passerelle-Error.

#9

Mis à jour par Thomas Noël il y a plus de 7 ans

X-Error-Code ?

#10

Mis à jour par Benjamin Dauvergne il y a plus de 7 ans

X-Men ?

#11

Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans

Il faut se coordonner sur le nom des deux côtés donc il faudrait qu'on se mette d'accord.
J'aime bien X-MEN. Je plaisante. X-Error-Code c'est bon? ou un nom en rapport avec to_json.

#13

Mis à jour par Thomas Noël il y a plus de 7 ans

Pour le coup, tu testes sur arcgis qui n'est pas correct («resp = app.get(url, {'lon': 'lon', 'lat': 'lat'}, status=400)», et non, ça devrait pas être 400)

#14

Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans

Tu veux que le test n'est pas bon en lui même ou que je me suis placé dans un test qui ne correspond pas à ce que je teste?

#15

Mis à jour par Josué Kouka il y a plus de 7 ans

Thomas Noël a écrit :

Pour le coup, tu testes sur arcgis qui n'est pas correct («resp = app.get(url, {'lon': 'lon', 'lat': 'lat'}, status=400)», et non, ça devrait pas être 400)

C'est un 400 parce que c'est une erreur de type d'argument envoyé (une erreur passerelle) et non d'un endpoint distant. C'est dans le meme catégorie qu'une erreur de type missing paremeter

#16

Mis à jour par Thomas Noël il y a plus de 7 ans

Donc JB, il faudrait plutôt poser ton test sur un connecteur qui répond une erreur de la nouvelle façon, à savoir 200, mais avec un "x-error-code" différent de 0.

(parce que là, on comprend pas super bien, la preuve je me suis fait planter)

#17

Mis à jour par Serghei Mihai il y a plus de 7 ans

Thomas Noël a écrit :

Donc JB, il faudrait plutôt poser ton test sur un connecteur qui répond une erreur de la nouvelle façon, à savoir 200, mais avec un "x-error-code" différent de 0.

Par exemple le connecteur famille: apps.family, sur la récuperation du pdf d'une facture.

#18

Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans

  • Fichier 0001-jsonresponse-add-http-header-for-error-12924.patch ajouté

Du coup je m'entête mais c'est finalement plus simple et générique de rester dans les tests de jsonresponse.
J'ai modifier sous les conseils de Sergueï mes tests pour faire un appel d'une fonction décorée et non explicitement le render_data() de jsonresponse.

Voilà. J'attends les coups de bâtons ou les éloges. Je me contenterais aussi d'un 'mouais'.

#19

Mis à jour par Benjamin Dauvergne il y a plus de 7 ans

Il y a un import pdb dans ton patch.

#20

Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans

  • Fichier 0001-jsonresponse-add-http-header-for-error-12924.patch supprimé
#22

Mis à jour par Frédéric Péters il y a plus de 7 ans

Alors, ça parlait plus haut de x-error-code, il n'y a pas eu mieux, prenons ça.

Dans le test, en plus de vérifier l'entête, je vérifierais que le statut est bien 200, et que le contenu est bien ce qu'il doit être.

#23

Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans

Je fais les modifs.
Je trouve x-error-code très vague, je propose donc x-tojson-err ou x-jsonresponse-err. On sait d'où ça vient.
Si c'est bon j'envoie sinon je garde x-error-code

#24

Mis à jour par Frédéric Péters il y a plus de 7 ans

x-error-code.

#25

Mis à jour par Jean-Baptiste Jaillet il y a plus de 7 ans

Voilà. Du coup il faut changer le test sur le ticket lié dans wcs

#26

Mis à jour par Frédéric Péters il y a plus de 7 ans

    content = result.content.replace('null', 'None')
    data = ast.literal_eval(content)

Uh uh uh. json.loads ?

Vérifier aussi que err_code est dans la réponse.

#28

Mis à jour par Frédéric Péters il y a plus de 7 ans

Ça me semble ok.

#29

Mis à jour par Thomas Noël il y a plus de 7 ans

  • Statut changé de Nouveau à Résolu (à déployer)
commit 3a4486f88dfa0bab5cde5d015593972363612dbf
Author: Jean-Baptiste Jaillet <jbjaillet@entrouvert.com>
Date:   Fri Aug 26 11:36:55 2016 +0200

    jsonresponse: add http header for error (#12924)

#30

Mis à jour par Jean-Baptiste Jaillet il y a presque 7 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF