RESTful Soft Delete


Estoy tratando de construir una webapp RESTful en la que utilizo GET, POST, PUT y DELETE. Pero tenía una pregunta sobre el uso de ELIMINAR en esta aplicación en particular.

Un poco de fondo primero:

Mi webapp gestiona entidades genéricas que también se gestionan (y, sucede, siempre se crean) en otro sistema. Así que dentro de mi webapp, cada entidad se almacenará en la base de datos con una clave única. Pero la forma en que vamos a acceder a ellos a través de las URL es con la clave única de la otro sistema.

Un simple ejemplo lo aclarará, creo. Tome la URL /entity/1. Esto mostrará información para la entidad con ID 1 en el otro sistema , y no para mi propio sistema. De hecho, los ID en mi sistema estarán completamente ocultos. No habrá ningún esquema de URL para acceder a la entidad con ID de 1 en mi propio sistema.

Bien, así que ahora que sabemos cómo está estructurada mi webapp, volvamos a eliminar esas entidades.

Habrá una manera para 'eliminar' entidades en mi sistema, pero pongo comillas alrededor porque en realidad no las eliminará de la base de datos. Más bien, los marcará con una propiedad que evita que aparezca cuando vaya a /entity/1.

Debido a esto, siento que debería usar PUT ('eliminar' de esta manera será idempotente), ya que estoy, desde la perspectiva de los datos, simplemente estableciendo una propiedad.

Entonces, la pregunta: ¿el enfoque RESTful tiene fidelidad a los datos (en cuyo caso está claro que soy PUTing), o la representación de los datos en la aplicación (en cuyo caso parece que soy DELETE ing)?

 23
Author: Brian Tompsett - 汤莱恩, 2013-04-05

1 answers

Debe usar DELETE.

Lo que pretende hacer con sus datos se denomina "eliminación suave": establece una bandera y evita que aparezcan elementos marcados. Esto es interno de tu webapp y el usuario no tiene que saber que estás borrando suavemente en lugar de borrar o lo que quieras hacer. Por eso deberías usar el verbo DELETE.

 35
Author: alestanis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-05 16:42:11