plus flexible que PUT mais doit être utilisé avec précaution. Point d’attention : PATCH n’est pas idempotent ⁄ Une fonction est idempotente si pour tout input x on a f(f(x)) = f(x). Autrement dit, lancer plusieurs fois la requête a le même résultat que ne la lancer qu’une fois. ⁄ Dans le cas de PATCH, certaines requêtes ne présentent pas cette propriété : Ex : Ressource /users : [{ « id » : 1, « name » : « A »}] Requête PATCH /users [{ « op » : « add », « name » : « B »}] A la première requête, /users devient : [{ « id » : 1, « name » : « A »}, { « id » : 2, « name » : « B »}] Puis : [{ « id » : 1, « name » : « A »}, { « id » : 2, « name » : « B »}, { « id » : 3, « name » : « B »}] ; etc ⁄ Il faut donc être prudent lorsqu’on utilise PATCH pour ajouter des données à une collection. Point d’attention : PATCH n’est pas idempotent ⁄ Une fonction est idempotente si pour tout input x on a f(f(x)) = f(x). Autrement dit, lancer plusieurs fois la requête a le même résultat que ne la lancer qu’une fois. ⁄ Dans le cas de PATCH, certaines requêtes ne présentent pas cette propriété : Ex : Ressource /users : [{ « id » : 1, « name » : « A »}] Requête PATCH /users [{ « op » : « add », « name » : « B »}] A la première requête, /users devient : [{ « id » : 1, « name » : « A »}, { « id » : 2, « name » : « B »}] Puis : [{ « id » : 1, « name » : « A »}, { « id » : 2, « name » : « B »}, { « id » : 3, « name » : « B »}] ; etc ⁄ Il faut donc être prudent lorsqu’on utilise PATCH pour ajouter des données à une collection. Usage correct de PATCH : ⁄ Une requête PATCH se structure comme suit : PATCH /ressource [description des modifications à apporter] Ex : PATCH /users/123 [{ "op": "replace", "path": "/email", "value": "
[email protected]" }] ⁄ Une API implémentant la méthode PATCH doit faire uniquement des modifications atomiques. Cela signifie que si une erreur survient lors de l’application du PATCH, une requête GET ne doit pas pouvoir retourner la ressource partiellement modifiée. (ex : si l’on effectue un « add » et un « replace », et que le « replace » produit une erreur, le « add » ne doit pas être effectué non plus) A noter : Dans le cas d’un JSON Patch Document, la RFC 5789 précise que la méthode HTTP PATCH est atomique : Toute erreur dans l’exécution de la méthode PATCH implique directement que le document est retourné sans aucune modification Usage correct de PATCH : ⁄ Une requête PATCH se structure comme suit : PATCH /ressource [description des modifications à apporter] Ex : PATCH /users/123 [{ "op": "replace", "path": "/email", "value": "
[email protected]" }] ⁄ Une API implémentant la méthode PATCH doit faire uniquement des modifications atomiques. Cela signifie que si une erreur survient lors de l’application du PATCH, une requête GET ne doit pas pouvoir retourner la ressource partiellement modifiée. (ex : si l’on effectue un « add » et un « replace », et que le « replace » produit une erreur, le « add » ne doit pas être effectué non plus) A noter : Dans le cas d’un JSON Patch Document, la RFC 5789 précise que la méthode HTTP PATCH est atomique : Toute erreur dans l’exécution de la méthode PATCH implique directement que le document est retourné sans aucune modification