2012-11-04 63 views
5

假設我有一個名爲「Session」的資源。客戶將調用PUT來創建並開始一個新的會話。當客戶完成會話時,應該不再可訪問,但應該因歷史/問責原因而堅持。HTTP方法:DELETE vs POST

要結束會話,是否更適合發出DELETE請求,這似乎在語義上更接近所需的效果,或POST,因爲資源實際上並未永久刪除?

回答

5

這裏的問題是:請求idempotent?如果您執行兩次相同的請求,它是否有副作用?就像您訂購一篇文章時一樣,執行訂單請求兩次會讓您閱讀文章兩次。

在這種情況下,POST是您想要的方法。如果不是,那麼您需要PUTDELETE

由於您似乎沒有刪除會話,因此只更改其狀態PUT會是一個更好的方法,因爲這意味着資源被更改並且不會被刪除,您的情況就是這種情況。

編輯:

如果資源似乎是從客戶端刪除,DELETE似乎更爲合適。客戶如何在後面執行事情並不重要。

+0

如果從客戶的角度看資源「出現」被刪除怎麼辦?在我的例子中,請求會是冪等的,因爲再次調用它不會有任何副作用,並且在會話上發出GET請求會失敗。 –

0

POST請求會更好,因爲您實際上並沒有刪除session。 POST請求通常用於更改對象的狀態。這是你的情況,我想。