Méthodes et codes de statut
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éthode | Intention | Exemple sur le site de recettes |
|---|---|---|
GET | Lire | GET /api/recettes : la liste |
POST | Créer (ou déclencher une action) | POST /api/recettes : ajouter une recette |
PUT | Remplacer entièrement | PUT /api/recettes/2 : nouvelle version complète |
PATCH | Modifier en partie | PATCH /api/recettes/2 : changer seulement la durée |
DELETE | Supprimer | DELETE /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.
| Famille | Sens |
|---|---|
| 2xx | Réussite |
| 3xx | Redirection |
| 4xx | Erreur du client (ta requête est à corriger) |
| 5xx | Erreur du serveur (le problème est de son côté) |
Les codes que tu croiseras le plus, avec leur sens selon MDN :
| Code | Nom | Quand |
|---|---|---|
| 200 | OK | La requête a réussi |
| 201 | Created | Une ressource a été créée |
| 204 | No Content | Réussite, rien à renvoyer |
| 400 | Bad Request | Requête mal formée |
| 401 | Unauthorized | Il faut s'authentifier |
| 403 | Forbidden | Pas les droits d'accès |
| 404 | Not Found | Ressource introuvable |
| 405 | Method Not Allowed | Méthode non prise en charge ici |
| 429 | Too Many Requests | Trop de requêtes en peu de temps |
| 500 | Internal Server Error | Le serveur a rencontré un cas qu'il ne gère pas |
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 :
GETlit,POSTcrée,PUTremplace,PATCHmodifie en partie,DELETEsupprime. GET,PUTetDELETEsont idempotentes,POSTetPATCHnon.- 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
fetchnatif, testereponse.ok: un 404 ne déclenche pas d'erreur tout seul.
Pour aller plus loin
Sources officielles
Ensuite
Comprendre les API
Ce qu'est une API web, comment une requête HTTP et sa réponse en JSON s'échangent, et comment les observer dans ton navigateur.
Consommer une API externe
Appeler une API publique depuis Nuxt, transformer sa réponse pour ne garder que l'utile et gérer les erreurs et les paramètres.
- Projet
- Lignes de code
- Niveau
- Sous-sol
- Appartement
- API dans Nuxt
- Pièce
- 2/7
- Plan n°
- api/02.methodes-et-codes-de-statut