soportados son servicios servicio por métodos metodos metodo los idempotencia cuales http rest http-headers

http - son - servicio rest get



¿REST DELETE es realmente idempotente? (6)

Idempotencia se refiere al estado del sistema una vez que la solicitud se ha completado


En todos los casos (aparte de los problemas de error, ver a continuación), la cuenta ya no existe.

De here

"Los métodos también pueden tener la propiedad de" idempotencia "porque ( aparte de los problemas de error o caducidad ) los efectos colaterales de N> 0 solicitudes idénticas son los mismos que para una única solicitud. Los métodos OBTENER, DIRIGIR, PONER y ELIMINAR comparten esta propiedad. Además, los métodos OPTIONS y TRACE NO DEBERÍAN tener efectos secundarios, y por eso son inherentemente idempotentes ".


El bit clave allí son los efectos secundarios de N> 0 solicitudes idénticas es lo mismo que para una sola solicitud.

Sería correcto esperar que el código de estado sea diferente, pero esto no afecta el concepto básico de idempotencia: puede enviar la solicitud más de una vez sin cambios adicionales en el estado del servidor.

Se supone que DELETE es idempotente.

Si ELIMINO http://example.com/account/123 se eliminará la cuenta.

Si lo hago de nuevo, ¿esperaría un 404, ya que la cuenta ya no existe? ¿Qué pasa si intento DELETE una cuenta que nunca ha existido?


Creo lo mismo, 404 - La cuenta no existe.

Podría argumentar 400 - Solicitud incorrecta. Pero en el sentido de REST, el objeto sobre el que solicitaste realizar una acción no existe. Eso se traduce a 404.


Desde el http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.2 :

Los métodos también pueden tener la propiedad de "idempotencia" porque (aparte de los problemas de error o caducidad) los efectos colaterales de N> 0 solicitudes idénticas son los mismos que para una única solicitud.

Tenga en cuenta que es "efectos secundarios", no "respuesta".


Sí. Independientemente del código de respuesta.

De la última RFC para HTTP 1.1 (énfasis mío):

Los métodos idóneos se distinguen porque la solicitud puede repetirse automáticamente si se produce una falla de comunicación antes de que el cliente pueda leer la respuesta del servidor. Por ejemplo, si un cliente envía una solicitud PUT y la conexión subyacente se cierra antes de recibir cualquier respuesta, entonces el cliente puede establecer una nueva conexión y volver a intentar la solicitud idempotente. Sabe que repetir la solicitud tendrá el mismo efecto deseado, incluso si la solicitud original fue exitosa, aunque la respuesta puede diferir.

Explica explícitamente que la respuesta puede diferir. Más importante aún, señala el motivo del concepto: si una acción es idempotente, el cliente puede repetir la acción cuando encuentra cualquier error, y sabe que no se bloqueará nada al hacerlo; si no, el cliente tendrá que hacer una consulta adicional (posiblemente GET ) para ver si la anterior es efectiva, antes de repetir la acción de manera segura. Mientras el servidor pueda hacer tal garantía, la acción es idempotente. Cita de otro comentario :

La idempotencia informática se trata de la solidez de un sistema. Como las cosas pueden fallar (por ejemplo, interrupción de la red), cuando se detecta una falla, ¿cómo se recupera? La recuperación más fácil es simplemente hacerlo de nuevo, pero eso solo funciona si hacerlo de nuevo es idempotente. Por ejemplo, discard(x) es idempotente, pero pop() no lo es. Se trata de la recuperación de errores.


Idempotent es sobre el efecto de la solicitud, no sobre el código de respuesta que obtienes.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.2 dice:

Los métodos también pueden tener la propiedad de "idempotencia" porque (aparte de los problemas de error o caducidad) los efectos colaterales de N> 0 solicitudes idénticas son los mismos que para una única solicitud.

Aunque puede obtener un código de respuesta diferente, se puede considerar que el efecto de enviar solicitudes N + 1 DELETE al mismo recurso es el mismo.


La distinción importante es que idempotent se refiere a los efectos secundarios , no a todos los efectos o respuestas. Si realiza un DELETE http://example.com/account/123 entonces el efecto es que la cuenta 123 ahora se borra del servidor. Ese es el único efecto, el único cambio en el estado del servidor. Ahora digamos que hace la misma solicitud DELETE http://example.com/account/123 nuevamente, el servidor responderá de manera diferente, pero su estado es el mismo.

No es como si la solicitud ELIMINAR decidiera cambiar el estado del servidor de una manera diferente porque faltaba la cuenta, como eliminar otra cuenta o dejar un registro de error. No, podría llamar a la misma solicitud DELETE un millón de veces y puede estar seguro de que el servidor está en el mismo estado que la primera vez que lo llamó .