Sous-solA API dans NuxtPièce 2/7Débutant

Méthodes et codes de statut

Choisir la bonne méthode HTTP (GET, POST, PUT, PATCH, DELETE) et lire les codes de réponse pour savoir ce qui s'est passé.

Ce que tu vas apprendre

  • Les cinq méthodes courantes et ce que chacune exprime.
  • Les codes de statut à connaître et leurs familles.
  • Comment l'API de ton site de recettes les combine, et un piège de fetch.

La méthode dit l'intention

Dans une requête, la méthode indique ce que tu veux faire de la ressource visée. La même adresse peut répondre différemment selon la méthode.

MéthodeIntentionExemple sur le site de recettes
GETLireGET /api/recettes : la liste
POSTCréer (ou déclencher une action)POST /api/recettes : ajouter une recette
PUTRemplacer entièrementPUT /api/recettes/2 : nouvelle version complète
PATCHModifier en partiePATCH /api/recettes/2 : changer seulement la durée
DELETESupprimerDELETE /api/recettes/2

Une requête GET ne doit pas contenir de corps. Les corps servent à POST, PUT et PATCH.

Idempotent ou pas

Une méthode est idempotente quand l'envoyer dix fois produit le même effet que l'envoyer une fois. D'après MDN, GET, PUT et DELETE le sont, POST et PATCH non.

Concrètement : supprimer deux fois la recette 2 laisse le même état final. Poster deux fois « Crêpes » crée deux recettes.

Le code de statut dit le résultat

La réponse commence par un code de statut à trois chiffres. Le premier chiffre donne la famille.

FamilleSens
2xxRéussite
3xxRedirection
4xxErreur du client (ta requête est à corriger)
5xxErreur du serveur (le problème est de son côté)

Les codes que tu croiseras le plus, avec leur sens selon MDN :

CodeNomQuand
200OKLa requête a réussi
201CreatedUne ressource a été créée
204No ContentRéussite, rien à renvoyer
400Bad RequestRequête mal formée
401UnauthorizedIl faut s'authentifier
403ForbiddenPas les droits d'accès
404Not FoundRessource introuvable
405Method Not AllowedMéthode non prise en charge ici
429Too Many RequestsTrop de requêtes en peu de temps
500Internal Server ErrorLe serveur a rencontré un cas qu'il ne gère pas
Retiens la différence entre 401 et 403 : 401 veut dire « identifie-toi », 403 « tu n'as pas le droit ».

Un exemple complet

Voici les échanges d'une API de recettes bien conçue, avec méthode, adresse et code attendu :

GET    /api/recettes        ->  200  la liste
GET    /api/recettes/99     ->  404  recette inexistante
POST   /api/recettes        ->  201  recette créée
POST   /api/recettes (vide) ->  400  titre manquant
DELETE /api/recettes/2      ->  204  supprimée, rien à renvoyer
PUT    /api/recettes        ->  405  méthode non prévue

Tu écriras cette API au chapitre 5. Le bon code aide le client : il sait s'il doit corriger sa requête (4xx) ou réessayer plus tard (5xx).

Le piège de fetch

fetch, la fonction native du navigateur, ne considère pas un 404 ou un 500 comme une erreur. La promesse n'est rejetée que pour les vraies pannes, comme un réseau coupé. Il faut tester toi-même :

const reponse = await fetch('/api/recettes/99')
if (!reponse.ok) {
  throw new Error(`Statut de réponse : ${reponse.status}`)
}

reponse.ok vaut true pour les codes 2xx, et reponse.status donne le code.

useFetch et $fetch de Nuxt se chargent de ce test pour les réponses en erreur : tu lis error sans comparer le statut à la main, comme dans le cours Récupérer des données.

À retenir

  • La méthode exprime l'intention : GET lit, POST crée, PUT remplace, PATCH modifie en partie, DELETE supprime.
  • GET, PUT et DELETE sont idempotentes, POST et PATCH non.
  • Les codes 2xx disent la réussite, 4xx une erreur du client, 5xx une erreur du serveur.
  • Utilise 201 pour une création, 204 sans contenu, 400 pour une entrée invalide, 404 pour l'absent.
  • Avec fetch natif, teste reponse.ok : un 404 ne déclenche pas d'erreur tout seul.

Pour aller plus loin

Sources officielles

Ensuite

Projet
Lignes de code
Niveau
Sous-sol
Appartement
API dans Nuxt
Pièce
2/7
Plan n°
api/02.methodes-et-codes-de-statut
Lignes de code · fiches rédigées à partir des documentations officielles, sources citées en bas de chaque page.