2010-07-16 15 views
7

estoy haciendo una reescritura de una vieja aplicación Rails y pensé que debería hacerlo de una manera REST, como una experiencia de aprendizaje si no otra cosa.¿La mejor manera de implementar una acción de alternar RESTful?

He llegado a algunas acciones que cambian un valor booleano, por ejemplo, si un artículo se publica o no.

Antes tenía un par de acciones: toggle_published, publish y unpublish.

Eran muy fáciles de usar: acabo de hacer un enlace a ellos en la lista de artículos.

¿cómo hacer lo mismo de una manera REST?

¿Debo usar la acción de actualización y crear un mini formulario para reemplazar cada uno de los enlaces que utilicé anteriormente? No me gusta particularmente esa idea.

Respuesta

0

Suena como que tiene dos casos de uso:

  • conjunto del Estado publicada
  • de palanca publicada estado

Usted debe ser capaz de añadir una ruta miembro por la acción de palanca para:

/articles/<id>/toggle_published - calls Article.toggle(:published) 

Y use la actualización del artículo en: atributo publicado a través del estándar REST r ruta de origen.

map.resources :articles, :member => :toggle 
23

Sólo un aviso:

Un método de palanca no es REST, porque el verbo HTTP PUT se supone que es idempotente (véase a.o. http://en.wikipedia.org/wiki/Idempotence#Examples). Esto significa que no importa la frecuencia con la que ejecutes un método, siempre debería dar el mismo resultado. Un método de alternancia no se adhiere a este principio, ya que no da el mismo resultado si lo ejecuta una vez que lo compara con ejecutarlo dos veces.

Si desea que sea RESTful, debe crear dos métodos: uno para la configuración y otro para la desconexión.

Cómo hacer una aplicación REST no sólo significa que usted debe utilizar el verbo HTTP correcta.

9

Probablemente lo resuelva con PUT/DELETE o POST/DELETE en un "recurso de alternar" anidado. Tal vez no 100% completamente tranquilo, pero ciertamente lo suficientemente fácil de entender.

PUT or POST /articles/:id/published # Toggle published ON 

DELETE /articles/:id/published # Toggle published OFF 

GET /articles/:id/published # Get state RESTfully via status 200 (ON) or 404 (OFF) 

Puede parecer un poco extraño, pero técnicamente es RESTful.

Actualización: A (tal vez) enfoque más natural podría también acaba de ser:

PUT or POST /articles/:id/published Data: { state: true/false } # Toggle published ON 

También es posible usar el verbo PATCH con el artículo real que supongo tiene una published propiedad:

PATCH /articles/:id { published: true/false } 

Debido a que todos los niños frescos REST están utilizando hoy en día PARCHE.

Cuestiones relacionadas