我正在重写一个旧的Rails应用程序,我认为我应该以RESTful方式进行,作为一种学习经验,如果没有别的.
我已经达成了一些切换布尔值的操作,例如,如果文章是否已发布.
在我做了几个动作之前:toggle_published,发布和取消发布.
它们非常易于使用:我只是在文章列表中链接到它们.
你会如何以RESTful方式做同样的事情?
我应该使用update-action,并构建一个迷你表单来替换之前使用的每个链接吗?我并不特别喜欢这个想法.
只是一个通知:
切换方法不是RESTful,因为HTTP PUT动词应该是幂等的(参见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.
更新:一种(也许)更自然的方法也可能只是:
PUT or POST /articles/:id/published Data: { state: true/false } # Toggle published ON
您也可以将PATCH
动词与我认为具有published
属性的实际文章一起使用:
PATCH /articles/:id { published: true/false }
因为现在所有酷孩子都在使用PATCH.