Skip to content

Instantly share code, notes, and snippets.

@simonrenoult
Last active November 12, 2018 08:41
Show Gist options
  • Save simonrenoult/88d9279ae8157962153e5825f072b3a6 to your computer and use it in GitHub Desktop.
Save simonrenoult/88d9279ae8157962153e5825f072b3a6 to your computer and use it in GitHub Desktop.
Exemple d'un requête PATCH non-idempotente

Etant donné la ressource :

GET /articles/1234 HTTP/1.1

HTTP/1.1 200 OK
{ "title": "PUT vs PATCH","tags": ["http", "api", "rest"] }

Si j'exécute plusieurs fois la requête PATCH d'ajout d'un tag via le format JSON Patch (sans l'utilisation d'un etag)

PATCH /articles/1234 HTTP/1.1
Content-Type: application/json-patch+json

[{ "op": "add", "path": "/tags", "value": ["put"] }]

Alors j'aboutis successivement à plusieurs représentations de la ressource :

GET /articles/1234 HTTP/1.1

HTTP/1.1 200 OK
{ "title": "PUT vs PATCH","tags": ["http", "api", "rest", "put" ] }
GET /articles/1234 HTTP/1.1

HTTP/1.1 200 OK
{ "title": "PUT vs PATCH","tags": ["http", "api", "rest", "put", "put"] }
GET /articles/1234 HTTP/1.1

HTTP/1.1 200 OK
{ "title": "PUT vs PATCH","tags": ["http", "api", "rest", "put", "put", "put"] }

Donc cette requête (en l'absence d'etag tout du moins) n'est pas idempotent

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment