我正在重寫一箇舊的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。