verbos respuestas que peticiones metodo httpmethod entre diferencia rest http http-delete

rest - respuestas - que es http request



Eliminando un recurso usando http DELETE (3)

Como las solicitudes HTTP en un sistema sin estado deberían ser independientes, los resultados de una solicitud no deberían depender de una solicitud previa. Considere lo que debería suceder si dos usuarios hicieran un BORRADO en el mismo recurso simultáneamente. Tiene sentido que la segunda solicitud obtenga un 404. Lo mismo debería ser cierto si un usuario realiza dos solicitudes.

Supongo que tener DELETE devolver dos respuestas diferentes no te parece idempotente. Me parece útil pensar en solicitudes idempotentes como dejar el sistema en el mismo estado, sin tener necesariamente la misma respuesta. Por lo tanto, independientemente de si ELIMINA un recurso existente o si intenta BORRAR un recurso que no existe, el estado del recurso del servidor es el mismo.

Entonces, dado que el verbo DELETE en Http es idempotente, cuando publico la siguiente solicitud, ¿qué debería pasar el segundo (o tercero, o cuarto, etc. ...)?

DELETE /person/123

La primera vez, el recurso se elimina y devuelvo un 204 (exitoso, sin contenido). ¿Debo devolver un 204 en llamadas posteriores o un 404 (no encontrado)?


El recetario de servicios web RESTful es un gran recurso para esto. Por casualidad, su vista previa de google muestra la página sobre ELIMINAR (página 11):

El método DELETE es idempotente. Esto implica que el servidor debe devolver el código de respuesta 200 (OK) incluso si el servidor eliminó el recurso en una solicitud anterior. Pero en la práctica, implementar DELETE como una operación idempotente requiere que el servidor realice un seguimiento de todos los recursos eliminados. De lo contrario, puede devolver un 404 (No encontrado).


Primero ELIMINAR : 200 o 204.

DELETE subsiguientes : 200 o 204.

Justificación : DELETE debe ser idempotente. Si devuelve 404 en un segundo DELETE, su respuesta cambiará de un código de éxito a un código de error . El programa del cliente puede tomar acciones incorrectas en base a la suposición de que ELIMINAR falló.

Ejemplo :

  • Supongamos que su operación DELETE es parte de una operación de varios pasos (o una "saga") ejecutada por el programa cliente.
  • El programa del cliente puede ser una aplicación móvil que realiza una transacción bancaria, por ejemplo.
  • Digamos que el programa cliente tiene un reintento automático para una operación DELETE (tiene sentido, porque se supone que DELETE es idempotente).
  • Digamos que el primer DELETE se ejecutó con éxito, pero la respuesta 200 se perdió en el camino hacia el programa cliente.
  • El programa cliente volverá a intentar ELIMINAR.
  • Si el segundo intento devuelve 404, el programa cliente puede cancelar la operación general debido a este código de error.
  • Pero debido a que el primer DELETE se ejecutó correctamente en el servidor, el sistema puede quedar en un estado incoherente .
  • Si el segundo intento devuelve 200 o 204, el programa del cliente procederá como se espera.