我正在重写一个旧的Rails应用程序,我认为我应该以REST风格的方式来做,如果没有其他的学习经验,我会这样做。实现RESTful切换操作的最佳方式?
我已经达到了一些切换布尔值的操作,例如,如果文章发布与否。
在我做了一些操作之前:toggle_published,发布和取消发布。
他们很容易使用:我只是在文章列表中建立了一个链接。
你会如何以REST风格做同样的事情?
我应该使用update-action并构建一个迷你表单来替换之前使用的每个链接吗?我不特别喜欢这个想法。
我正在重写一个旧的Rails应用程序,我认为我应该以REST风格的方式来做,如果没有其他的学习经验,我会这样做。实现RESTful切换操作的最佳方式?
我已经达到了一些切换布尔值的操作,例如,如果文章发布与否。
在我做了一些操作之前:toggle_published,发布和取消发布。
他们很容易使用:我只是在文章列表中建立了一个链接。
你会如何以REST风格做同样的事情?
我应该使用update-action并构建一个迷你表单来替换之前使用的每个链接吗?我不特别喜欢这个想法。
这听起来像你有两个用例:
您应该能够添加一个成员路径的切换动作为:
/articles/<id>/toggle_published - calls Article.toggle(:published)
并使用文章更新:通过标准REST r发布的属性资源路线。
map.resources :articles, :member => :toggle
只是一个通知:
拨动方法没有RESTful的,因为HTTP PUT动词假定为幂等(见A.O. http://en.wikipedia.org/wiki/Idempotence#Examples)。这意味着不管你多长时间执行一次方法,它总是应该给出相同的结果。切换方法不遵循这个原则,因为如果您执行一次而不是执行两次,则不会得到相同的结果。
如果您想使其成为RESTful,您应该创建两个方法:一个用于设置,另一个用于取消设置。
制作应用程序RESTful不仅意味着您应该使用正确的HTTP动词。
我可能用嵌套的“切换资源”上的PUT/DELETE或POST/DELETE来解决它。也许不是100%完全安宁,但肯定很容易理解。
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)
可能看起来有点奇怪,但它在技术上是RESTful。
更新: A(也许)更自然的方法,也可能仅仅是:
PUT or POST /articles/:id/published Data: { state: true/false } # Toggle published ON
您也可以使用PATCH
动词与我假设有一个published
财产实际的文章:
PATCH /articles/:id { published: true/false }
因为所有酷酷的REST小孩现在都在使用PATCH。