Development #38721
api_particulier: ne pas lever les erreurs des requetes HTTP
0%
Description
Pour éviter les notifications des erreurs 404, comme par exemple: https://particulier.api.gouv.fr/api/impots/svair?numeroFiscal=3025407412230&referenceAvis=19+13+M521419
Fichiers
Révisions associées
api_particulier: do not log 404 as errors (#38721)
api_particulier: improve api errors (#38721)
Historique
Mis à jour par Serghei Mihai il y a plus de 4 ans
- Fichier 0001-api_particulier-don-t-log-http-errers-38721.patch 0001-api_particulier-don-t-log-http-errers-38721.patch ajouté
- Tracker changé de Support à Bug
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Thomas Noël il y a plus de 4 ans
Sur l'URL j'ai une 401 avec un contenu qui n'est pas du JSON... je pense que ça doit être un soucis de token, rare, et qu'une alerte est utile dans ce cas.
Mis à jour par Thomas Noël il y a environ 4 ans
- Statut changé de Solution proposée à En cours
Est-ce que la 404 indiquée en haut est une réponse normale d'api particulier qui veut dire "je ne connais pas ce numéro fiscal" ? ie encore une API qui utilise le transport http pour faire passer de l'info ?
Auquel cas on peut effectivement ne pas lever les erreurs des requetes HTTP, mais il faudrait quand même lever quelque chose si ce n'est pas 404 (et en cas de 404, renvoyer une APIError)
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Oui 404 correspond à une réponse applicative pas de donnée ou on s'est trompé d'URL :/
404 Les paramètres fournis sont incorrects ou ne correspondent pas à un avis
Mais dans le cas d'une erreur applicative on a un JSON avec, c'est ça qu'il faut tester, si JSON -> applicatif si pas JSON, transport.
Donc ça suppose log_request_errors = False mais aussi de traiter les retours adéquatement (comme Sheila).
Mis à jour par Thomas Noël il y a environ 4 ans
Benjamin Dauvergne a écrit :
si JSON -> applicatif si pas JSON, transport.
Encore plus efficace, yep.
Mis à jour par Valentin Deniaud il y a presque 4 ans
- Assigné à changé de Serghei Mihai à Valentin Deniaud
Mis à jour par Valentin Deniaud il y a presque 4 ans
- Fichier 0001-utils-allow-changing-APIError-attributes-38721.patch 0001-utils-allow-changing-APIError-attributes-38721.patch ajouté
- Fichier 0002-api_particulier-do-not-log-404-as-errors-38721.patch 0002-api_particulier-do-not-log-404-as-errors-38721.patch ajouté
- Tracker changé de Bug à Development
- Statut changé de En cours à Solution proposée
Mon résumé des discussions plus haut : tout logger sauf les 404.
Idéalement il faudrait logger les 404 qui correspondent à une mauvaise URL, mais le retour de l'API ne permet pas de distinguer les deux (à moins d'inspecter le message d'erreur verbeux en français, mais on ne va pas faire ça).
Mis à jour par Valentin Deniaud il y a presque 4 ans
- Fichier 0001-utils-allow-changing-APIError-attributes-38721.patch 0001-utils-allow-changing-APIError-attributes-38721.patch ajouté
- Fichier 0002-api_particulier-do-not-log-404-as-errors-38721.patch 0002-api_particulier-do-not-log-404-as-errors-38721.patch ajouté
(tests verts)
Mis à jour par Valentin Deniaud il y a presque 4 ans
- Fichier 0001-utils-allow-changing-APIError-attributes-38721.patch 0001-utils-allow-changing-APIError-attributes-38721.patch ajouté
- Fichier 0002-api_particulier-do-not-log-404-as-errors-38721.patch 0002-api_particulier-do-not-log-404-as-errors-38721.patch ajouté
(j'avais oublié python2)
Mis à jour par Benjamin Dauvergne il y a presque 4 ans
- Statut changé de Solution proposée à En cours
Valentin Deniaud a écrit :
Mon résumé des discussions plus haut : tout logger sauf les 404.
Idéalement il faudrait logger les 404 qui correspondent à une mauvaise URL, mais le retour de l'API ne permet pas de distinguer les deux (à moins d'inspecter le message d'erreur verbeux en français, mais on ne va pas faire ça).
Effectivement ça renvoie toujours du JSON :/
Par contre on peut parser un peu, sur une vrai 404 ça fait :
{ "error": "not_found", "reason": "no route for URL /api/v23avis-imposition?3numeroFiscal=1902599999001&referenceAvis=1902599999001", "message": "no route for URL /api/v23avis-imposition?3numeroFiscal=1902599999001&referenceAvis=1902599999001" }
un simple 'incorrects ou ne correspondent' in response.json['reason']
devrait suffire à séparer les deux, s'ils changent de chaîne (ce qu'ils font assez rarement) on aura des erreurs, on corrigera la chaîne.
Aussi je renverrai la totalité du retour au cas où plutôt que juste la clé message avec APIError(data={'code': 'not-found', 'response': response.json})
dans tous les cas avec un code d'erreur à nous (non-json, non-200, connection-error, etc..).
Mis à jour par Valentin Deniaud il y a presque 4 ans
- Fichier 0003-api_particulier-improve-api-errors-38721.patch 0003-api_particulier-improve-api-errors-38721.patch ajouté
- Fichier 0001-utils-allow-changing-APIError-attributes-38721.patch 0001-utils-allow-changing-APIError-attributes-38721.patch ajouté
- Fichier 0002-api_particulier-do-not-log-404-as-errors-38721.patch 0002-api_particulier-do-not-log-404-as-errors-38721.patch ajouté
- Statut changé de En cours à Solution proposée
Benjamin Dauvergne a écrit :
un simple
'incorrects ou ne correspondent' in response.json['reason']
devrait suffire à séparer les deux, s'ils changent de chaîne (ce qu'ils font assez rarement) on aura des erreurs, on corrigera la chaîne.
Ça ne me semble pas possible de faire ça car en ce moment l'endpoint CAF est cassé, on ne sait pas si le message d'erreur sera celui-là. On peut éventuellement adopter la logique inverse, 'no route' in ...
, m'enfin j'étais bien parti pour ne rien faire alors je te laisse insister.
Aussi je renverrai la totalité du retour au cas où plutôt que juste la clé message avec
APIError(data={'code': 'not-found', 'response': response.json})
dans tous les cas avec un code d'erreur à nous (non-json, non-200, connection-error, etc..).
Done, dans un nouveau patch.
Mis à jour par Benjamin Dauvergne il y a presque 4 ans
Valentin Deniaud a écrit :
Benjamin Dauvergne a écrit :
un simple
'incorrects ou ne correspondent' in response.json['reason']
devrait suffire à séparer les deux, s'ils changent de chaîne (ce qu'ils font assez rarement) on aura des erreurs, on corrigera la chaîne.Ça ne me semble pas possible de faire ça car en ce moment l'endpoint CAF est cassé, on ne sait pas si le message d'erreur sera celui-là. On peut éventuellement adopter la logique inverse,
'no route' in ...
, m'enfin j'étais bien parti pour ne rien faire alors je te laisse insister.
Osef, il n'a jamais marché à ma connaissance, ce n'est pas juste "en ce moment", API particulier n'est qu'une vaste blague, c'est uniquement avis-imposition qui nous intéresse, et d'ailleurs il y a #43479 à relire qui nous permettait de déprécier tout ça.
Mis à jour par Valentin Deniaud il y a presque 4 ans
- Fichier 0003-api_particulier-improve-api-errors-38721.patch 0003-api_particulier-improve-api-errors-38721.patch ajouté
- Fichier 0001-utils-allow-changing-APIError-attributes-38721.patch 0001-utils-allow-changing-APIError-attributes-38721.patch ajouté
- Fichier 0002-api_particulier-do-not-log-404-as-errors-38721.patch 0002-api_particulier-do-not-log-404-as-errors-38721.patch ajouté
Mis à jour par Benjamin Dauvergne il y a presque 4 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Valentin Deniaud il y a presque 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit e0207afef5d8b9f8147b8db584e3cefaa42c7d6d Author: Valentin Deniaud <vdeniaud@entrouvert.com> Date: Wed Jun 3 16:21:08 2020 +0200 api_particulier: improve api errors (#38721) commit a7980a2a701d48067d22a894763e606e9e46e4d7 Author: Valentin Deniaud <vdeniaud@entrouvert.com> Date: Wed Jun 3 10:59:13 2020 +0200 api_particulier: do not log 404 as errors (#38721) commit 859385cf55fd8910d9595c7c43d89edcbea4162e Author: Valentin Deniaud <vdeniaud@entrouvert.com> Date: Wed Jun 3 10:54:27 2020 +0200 utils: allow changing APIError attributes (#38721)
Mis à jour par Frédéric Péters il y a presque 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
utils: allow changing APIError attributes (#38721)