Idempotent
Un método HTTP es idempotente si se puede realizar una solicitud idéntica una o varias veces seguidas con el mismo efecto mientras se deja el servidor en el mismo estado. En otras palabras, un método idempotente no debe tener ningún efecto secundario (excepto para mantener estadísticas). Aplicado correctamente, el GET
HEAD
PUT
y DELETE
métodos son idempotente, pero no el POST
método. Todos los métodos seguros también son idempotentes.
Para ser idempotente, el back-end de estado del servidor, el código de estado devuelto por cada solicitud puede variar: la primera llamada de un DELETE
probablemente retornará un 200
, mientras que las sucesivas probablemente retornará un 404
. Otra implicación de que DELETE
sea idempotente es que los desarrolladores no deben implementar API RESTful con una funcionalidad de eliminar última entrada utilizando el método DELETE
.
Tenga en cuenta que el servidor no garantiza la idempotencia de un método y que algunas aplicaciones pueden romper incorrectamente la restricción de idempotencia.
GET /pageX HTTP/1.1
es idempotente. Llamó varias veces en una fila, el cliente obtiene los mismos resultados:
GET /pageX HTTP/1.1GET /pageX HTTP/1.1GET /pageX HTTP/1.1GET /pageX HTTP/1.1
POST /add_row HTTP/1.1
no es idempotente; si es llamado varias veces, se agrega varias filas:
POST /add_row HTTP/1.1POST /add_row HTTP/1.1 -> Adds a 2nd rowPOST /add_row HTTP/1.1 -> Adds a 3rd row
DELETE /idX/delete HTTP/1.1
es idempotente, incluso si el código de estado devuelto puede cambiar entre las solicitudes:
DELETE /idX/delete HTTP/1.1 -> Returns 200 if idX existsDELETE /idX/delete HTTP/1.1 -> Returns 404 as it just got deletedDELETE /idX/delete HTTP/1.1 -> Returns 404