Pregunta

Después de la destrucción de un recurso en mi aplicación Rails, el usuario puede restaurar haciendo clic en un enlace.

Actualmente esta acción se encamina a restaurar el método de destruir el controlador de recursos correspondiente.

Cuando este método se encuentra el recurso en la base de datos, lo destruye y mueve el registro de una tabla de basura.

Cuando no encuentra el recurso en la base de datos, lo busca en la tabla de la basura y si encuentra el recurso se restaura.

No estoy muy satisfecho por esta forma de hacer, con el método de destruir a tener dos propósitos: destruir y volver a

.

Podría crear una acción de restauración dedicada en mi controlador, pero de una manera REST, dónde se ubicaría el manejo de las peticiones de restauración? En un controlador dedicado? Si es así, con qué método, PUT o POST?

¿Fue útil?

Solución

poner no es idempotente, es decir, si se envía la misma petición de POST muchas veces, obtendrá muchos nuevos artículos. PUT debe ser idempotente, ya que la misma actualización sucediendo en el mismo recurso no tiene efectos secundarios cuando se ejecuta varias veces.

En cuanto a dónde debe ir esta acción, lo que realmente depende de su sensibilty estética y la forma de hardcore que quieren estar sobre el descanso frente al mantenimiento de sus controladores Rieles limpio y bien organizado.

Es ciertamente discutible que un DeletedBob es diferente recurso de un Bob. Se podría decir que un PUT enviado a la DeletedBobsController actualizaría el recurso DeletedBob, tal vez con un parámetro como "borrado = false" para indicar el propósito de la actualización.

También podría considerar como un recurso supresiones. Posteriormente, se podría utilizar en Eliminar en el DeletionsController con el params "Resource_type = Bob & RESOURCE_ID = 23". Al destruir la eliminación, va a restaurar el objeto original. llamadas idénticas posteriores producirán un error "objeto no encontrado", como era de esperar con DELETE.

En lo personal, desde que Roy Fielding (autor original del resto definir tesis) salió y dijo que no hay realmente nada de malo en la pOST , consideraría la definición de un método adicional y :put => :restore ruta en mi BobsController. Se mantiene el código en el otro programador lo esperaría, y es probable la única audiencia para este tipo de diseño.

Otros consejos

Creo que un purista RESTO crearía un nuevo recurso llamado de basura que es manejado por un TrashController. Para manejar una restauración, que tendría una acción sobre TrashController llamado Restore.

La URL se vería así:

http://example.com/trash/restore/{resourceId}

Creo que, dado que la acción está en un recurso, la funcionalidad debe vivir en el ResourceController. Una de mis understadings de trabajo de una arquitectura REST es que una regla de oro en decidir entre PUT y POST es que la POST se utiliza para crear y poner se utiliza para las actualizaciones. En este caso, yo esperaría que 'existe' el recurso y está actualizando su estado que su utilizaría un PUT y la restauración URI sería algo como:

http://example.com/resources/restore/ {id}

Creo que Sean anterior estaba en el camino correcto, pero me gustaría ir un paso más allá. Hacer que la acción de basura una POST que actualiza el recurso con trash=1. A continuación, restaure es sólo otro POST a la mismo de recursos con trash=0

EDIT:. Sustituido PUT método incorrecto con POST dado que la solicitud no es el envío de todo el recurso, sólo una actualización de una parte del recurso

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top