Skip to main content

Les codes de statut

Le code de statut est la première chose qu'un client regarde. Un bon code évite au client de devoir lire le body pour savoir si ça a marché.

Une API qui répond toujours 200 OK avec {"error": true} dans le body oblige chaque client à réinventer la gestion d'erreurs. Le code de statut est fait pour ça : utilisez-le.

Les exemples ci-dessous concernent l'API d'une bibliothèque en ligne : des livres, des membres, des emprunts.

2xx - Succès

CodeQuand l'utiliserExemple
200 OKSuccès avec un bodyGET /v1/livres
201 CreatedRessource créée. Ajouter le header LocationPOST /v1/emprunts
204 No ContentSuccès sans bodyDELETE /v1/emprunts/42

3xx - Redirection

CodeQuand l'utiliser
301 Moved PermanentlyLa ressource a changé d'adresse définitivement
304 Not ModifiedLa version en cache du client est toujours bonne

4xx - Erreur du client

CodeQuand l'utiliserExemple
400 Bad RequestRequête mal forméeUn body qui n'est pas du JSON valide
401 UnauthorizedPas authentifié, ou authentification invalideGET /v1/me sans token
403 ForbiddenAuthentifié, mais pas autoriséUn membre qui veut supprimer un livre du catalogue
404 Not FoundLa ressource n'existe pasGET /v1/livres/999999
405 Method Not AllowedMéthode non supportée sur cette URI. Ajouter le header AllowDELETE /v1/livres (supprimer tout le catalogue)
406 Not AcceptableFormat demandé dans Accept indisponibleAccept: image/png
409 ConflictConflit avec l'état actuel de la ressourceEmprunter un livre déjà emprunté
418 I'm a teapotLe serveur est une théière (RFC 2324, poisson d'avril de 1998)Demander un café à une théière
422 Unprocessable ContentRequête bien formée mais données invalidesUne date de retour antérieure à la date d'emprunt
429 Too Many RequestsTrop de requêtes. Ajouter le header Retry-AfterUn script qui interroge l'API en boucle

5xx - Erreur du serveur

CodeQuand l'utiliser
500 Internal Server ErrorBug côté serveur. Ne jamais le renvoyer volontairement
502 Bad GatewayUn intermédiaire n'a pas obtenu de réponse valide du serveur
503 Service UnavailableServeur indisponible (maintenance, surcharge)

Les pièges classiques

  • 401 ou 403 ? 401 : « je ne sais pas qui tu es ». 403 : « je sais qui tu es, et c'est non ».
  • 400 ou 422 ? 400 : je n'arrive pas à lire ta requête. 422 : je l'ai lue, mais son contenu n'est pas valide. FastAPI renvoie 422 par défaut pour les erreurs de validation.
  • 404 ou 403 ? Pour une ressource qui appartient à quelqu'un d'autre, répondre 404 évite de révéler qu'elle existe. On en reparle au chapitre 8.

La liste complète est sur MDN. Et pour les retenir : http.cat.