Les verbes HTTP
Les verbes (ou méthodes) HTTP indiquent l'action à effectuer sur la ressource désignée par l'URI.
Tous les exemples de cette page fonctionnent avec JSONPlaceholder, une fausse API de blog : essayez-les avec curl -i !
JSONPlaceholder fait semblant : il répond comme si l'opération avait réussi, mais rien n'est réellement créé ni supprimé. Parfait pour s'entraîner sans rien casser.
Les verbes à connaître
| Verbe | Rôle | Exemple | Body |
|---|---|---|---|
GET |
Lire | GET /posts |
Non |
POST |
Créer dans une collection, ou déclencher un traitement | POST /posts |
Oui |
PUT |
Remplacer entièrement (ou créer à une URI connue) | PUT /posts/1 |
Oui |
PATCH |
Modifier partiellement | PATCH /posts/1 |
Oui |
DELETE |
Supprimer | DELETE /posts/1 |
Non |
HEAD |
Comme GET, mais seulement les headers | HEAD /posts |
Non |
OPTIONS |
Lister les méthodes autorisées | OPTIONS /posts/1 |
Non |
curl -i https://jsonplaceholder.typicode.com/posts/1
curl -i -X DELETE https://jsonplaceholder.typicode.com/posts/1
curl -I https://jsonplaceholder.typicode.com/posts # -I envoie un HEAD
curl -i -X OPTIONS https://jsonplaceholder.typicode.com/posts/1
En principe, OPTIONS renvoie la liste des méthodes dans le header Allow. JSONPlaceholder la renvoie dans Access-Control-Allow-Methods, un header lié à CORS (voir chapitre 8).
Sûr et réexécutable
- Sûr (safe) : la requête ne modifie rien sur le serveur. On peut l'envoyer sans risque.
- Réexécutable : envoyer la requête 1 fois ou 10 fois laisse le serveur dans le même état. On peut la renvoyer sans risque si le réseau a coupé.
| Verbe | Sûr | Réexécutable |
|---|---|---|
GET, HEAD, OPTIONS |
✅ | ✅ |
PUT |
❌ | ✅ |
DELETE |
❌ | ✅ |
POST |
❌ | ❌ |
PATCH |
❌ | ❌ (pas garanti) |
Cliquer 3 fois sur « Payer » envoie 3 POST : 3 paiements (et un client furieux).
Supprimer 3 fois l'article 1 avec DELETE, c'est toujours un seul article supprimé.
Réexécutable ne veut pas dire « même réponse » : le premier DELETE renvoie 204, le second peut renvoyer 404. Ce qui compte, c'est l'état du serveur.
PUT ou PATCH ?
PUT remplace toute la ressource : les champs absents sont perdus.
curl -i -X PUT https://jsonplaceholder.typicode.com/posts/1 \
-H "Content-Type: application/json" \
-d '{"id": 1, "userId": 1, "title": "Nouveau titre", "body": "Nouveau contenu"}'
PATCH ne modifie que les champs envoyés.
curl -i -X PATCH https://jsonplaceholder.typicode.com/posts/1 \
-H "Content-Type: application/json" \
-d '{"title": "Nouveau titre"}'
Avec un PUT qui ne contiendrait que {"title": "Nouveau titre"}, l'article perdrait son contenu.
Ne jamais modifier avec GET
Un GET doit rester sûr. Les navigateurs, les robots d'indexation et les outils de préchargement suivent les liens sans demander la permission.
❌ GET /api/article/delete?id=1
✅ DELETE /posts/1
En 2005, le Google Web Accelerator préchargeait les liens des pages visitées… y compris les liens « supprimer » de certaines interfaces d'administration.
https://www.lemondeinformatique.fr/actualites/lire-retour-au-stand-pour-google-web-accelerator-8289.html