HTTPQUERY
Français

PUT

Utilisation

Une requête PUT demande au serveur de stocker la représentation incluse à l’URI indiquée. Si la ressource existe déjà, le serveur remplace la totalité de son état par la nouvelle représentation. Si aucune ressource n’existe à cette URI, le serveur en crée une.

Idempotence

PUT est idempotent. Envoyer plusieurs fois la même requête PUT produit le même état du serveur que l’envoyer une seule fois. Cela contraste avec POST, où des soumissions répétées créent des ressources en double ou déclenchent plusieurs fois le traitement.

L’idempotence rend PUT sûr à réessayer après une défaillance réseau. Un client qui ignore si une requête précédente est arrivée peut la renvoyer sans risquer d’effets de bord indésirables.

Négociation de contenu

Le serveur valide la représentation entrante au regard de ses propres contraintes. Lorsque le Content-Type correspond aux attentes et que le contenu est bien formé, le serveur stocke la ressource et répond 201 Created pour les nouvelles ressources, ou 200 OK / 204 No Content pour les remplacements.

Lorsque le type de média est incompatible, le serveur renvoie 415 Unsupported Media Type. Une réponse 409 Conflict indique un conflit d’état sans rapport avec le type de contenu, comme une version qui ne correspond pas.

PUT vs POST

POST délègue le traitement à la ressource cible. PUT indique l’URI exacte à laquelle la représentation appartient. Un PUT sur /articles/42 stocke l’article à /articles/42. Un POST sur /articles demande à la collection de créer un nouvel article à une URI choisie par le serveur.

PUT vs PATCH

PUT remplace la ressource entière. PATCH applique des modifications partielles. Mettre à jour un seul champ avec PUT impose d’envoyer la représentation complète. PATCH n’envoie que les changements.

Créer une ressource

Un client stocke un fichier texte brut à /docs/setup.txt. Le serveur crée la ressource et répond 201 Created.

Requête

PUT /docs/setup.txt HTTP/1.1
Host: api.example.re
Content-Type: text/plain
Content-Length: 24

Install, configure, run.

Réponse

HTTP/1.1 201 Created
Location: /docs/setup.txt
Content-Length: 0

Remplacer une ressource

Un client remplace une ressource JSON existante à /users/42. Le serveur confirme la mise à jour avec 200 OK et renvoie la représentation stockée.

Requête

PUT /users/42 HTTP/1.1
Host: api.example.re
Content-Type: application/json
Content-Length: 43

{"name":"Alice","email":"alice@example.re"}

Réponse

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 51

{"id":42,"name":"Alice","email":"alice@example.re"}

Mise à jour conditionnelle

Une requête conditionnelle utilisant If-Match empêche d’écraser une ressource modifiée par un autre client. La valeur d’ETag garantit que la mise à jour ne s’applique qu’à la version attendue.

Requête

PUT /config/app.json HTTP/1.1
Host: api.example.re
Content-Type: application/json
If-Match: "a1b2c3"
Content-Length: 27

{"debug":false,"port":8080}

Réponse

HTTP/1.1 204 No Content
ETag: "d4e5f6"

CORS

Les requêtes PUT multi-origines déclenchent toujours une vérification préalable CORS. Le navigateur envoie d’abord une requête OPTIONS pour confirmer que le serveur autorise PUT sur la ressource cible.

Codes de statut de réponse

201 Created indique que le serveur a créé une nouvelle ressource à l’URI cible. Cela s’applique lorsqu’aucune ressource n’existait auparavant à cet emplacement.

200 OK confirme qu’une ressource existante a été remplacée et que la réponse contient la représentation mise à jour dans son corps.

204 No Content confirme un remplacement sans corps de réponse. C’est courant lorsque le client n’a pas besoin qu’on lui renvoie la représentation stockée.

412 Precondition Failed indique que la condition If-Match n’a pas été satisfaite. La valeur d’ETag fournie par le client ne correspond pas à la version actuelle de la ressource : le serveur rejette donc la mise à jour pour éviter d’écraser des modifications faites par un autre client.

409 Conflict signale un conflit d’état au niveau applicatif, sans rapport avec les préconditions, comme un conflit de fusion de contenu ou une collision de gestion de versions que le client doit résoudre manuellement.