Projet

Général

Profil

Development #38721

api_particulier: ne pas lever les erreurs des requetes HTTP

Ajouté par Serghei Mihai il y a plus de 4 ans. Mis à jour il y a presque 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
30 décembre 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

0001-api_particulier-don-t-log-http-errers-38721.patch (786 octets) 0001-api_particulier-don-t-log-http-errers-38721.patch Serghei Mihai, 30 décembre 2019 12:50
0001-utils-allow-changing-APIError-attributes-38721.patch (1,1 ko) 0001-utils-allow-changing-APIError-attributes-38721.patch Valentin Deniaud, 03 juin 2020 11:02
0002-api_particulier-do-not-log-404-as-errors-38721.patch (3,95 ko) 0002-api_particulier-do-not-log-404-as-errors-38721.patch Valentin Deniaud, 03 juin 2020 11:02
0001-utils-allow-changing-APIError-attributes-38721.patch (1,1 ko) 0001-utils-allow-changing-APIError-attributes-38721.patch Valentin Deniaud, 03 juin 2020 11:20
0002-api_particulier-do-not-log-404-as-errors-38721.patch (3,95 ko) 0002-api_particulier-do-not-log-404-as-errors-38721.patch Valentin Deniaud, 03 juin 2020 11:20
0001-utils-allow-changing-APIError-attributes-38721.patch (1,07 ko) 0001-utils-allow-changing-APIError-attributes-38721.patch Valentin Deniaud, 03 juin 2020 11:55
0002-api_particulier-do-not-log-404-as-errors-38721.patch (3,95 ko) 0002-api_particulier-do-not-log-404-as-errors-38721.patch Valentin Deniaud, 03 juin 2020 11:55
0003-api_particulier-improve-api-errors-38721.patch (4 ko) 0003-api_particulier-improve-api-errors-38721.patch Valentin Deniaud, 03 juin 2020 16:26
0001-utils-allow-changing-APIError-attributes-38721.patch (1,07 ko) 0001-utils-allow-changing-APIError-attributes-38721.patch Valentin Deniaud, 03 juin 2020 16:26
0002-api_particulier-do-not-log-404-as-errors-38721.patch (3,95 ko) 0002-api_particulier-do-not-log-404-as-errors-38721.patch Valentin Deniaud, 03 juin 2020 16:26
0003-api_particulier-improve-api-errors-38721.patch (4,12 ko) 0003-api_particulier-improve-api-errors-38721.patch Valentin Deniaud, 08 juin 2020 16:24
0001-utils-allow-changing-APIError-attributes-38721.patch (1,07 ko) 0001-utils-allow-changing-APIError-attributes-38721.patch Valentin Deniaud, 08 juin 2020 16:24
0002-api_particulier-do-not-log-404-as-errors-38721.patch (4,17 ko) 0002-api_particulier-do-not-log-404-as-errors-38721.patch Valentin Deniaud, 08 juin 2020 16:24

Révisions associées

Révision 47805fc8 (diff)
Ajouté par Valentin Deniaud il y a presque 4 ans

utils: allow changing APIError attributes (#38721)

Révision ec83c19a (diff)
Ajouté par Valentin Deniaud il y a presque 4 ans

api_particulier: do not log 404 as errors (#38721)

Révision 91b1c80f (diff)
Ajouté par Valentin Deniaud il y a presque 4 ans

api_particulier: improve api errors (#38721)

Historique

#1

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

#2

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.

#3

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)

#4

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

#5

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.

#6

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Assigné à mis à Serghei Mihai
#7

Mis à jour par Valentin Deniaud il y a presque 4 ans

  • Assigné à changé de Serghei Mihai à Valentin Deniaud
#8

Mis à jour par Valentin Deniaud il y a presque 4 ans

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

#11

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

#12

Mis à jour par Valentin Deniaud il y a presque 4 ans

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.

#13

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.

#15

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

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

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)
#17

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

Formats disponibles : Atom PDF