2014-05-07 18 views
2

我與RESTful Web服務使用的JavaJAX-RS工作,我碰到發送DELETE請求與實體主體的問題就來了。爲什麼在HTTP DELETE請求中擁有實體主體不是一種好的做法?

我花了幾個小時尋找一種方式發送DELETE請求,並在主體中發送了一條消息,但唯一發現的是work around using the Apache HttpClient

一些,我發現都在說,這是沒有意義的有身體DELETE請求,我看到了很多服務器通過不允許用身體DELETE支持這個問題的答案。 例如「entity enclosing DELETE requests make no sense

所以我的問題是爲什麼在DELETE請求中有一個機構不是一個好的做法?這有什麼缺點?

感謝

+0

可能是因爲在響應中沒有真正的理由包含身體。只要您知道DELETE已成功處理,您爲什麼會關心響應消息? –

+0

如果你允許沒有意義的事情,最終有人會有一個「明智的想法」,並開始使用這種可能性,以意想不到的方式產生意想不到的後果。舉一個類比,網頁瀏覽器「寬容」HTML錯誤導致了一個萬維網,其中有大量格式不正確的頁面,可能會在某些瀏覽器中顯示,而在其他瀏覽器中則不會顯示。 – SJuan76

+0

@TimCastelijns我在詢問身體而不是回覆。傳遞有助於刪除過程的數據。 – NikosDim

回答

4

原始服務器刪除由Request-URI標識的資源的DELETE方法請求。並且Web服務器上的每個資源都僅由URI標識。這就是爲什麼它沒有任何意義,有沒有在DELETE身體

+0

我明白這個概念,但這限制了您一次刪除一個資源。那麼刪除多個資源是一個很好的做法?一種方法是執行多個DELETE請求,這在性能方面顯然不是最佳選擇。還有什麼? – NikosDim

+1

@NikosDim,深入討論@ http://stackoverflow.com/questions/17085216/why-use-two-step-approach-to-deleting-multiple-items-with-rest將以某種方式幫助你 – niiraj874u

0

REST是嘈雜,並可能是一個單獨的DELETE調用每個資源是意圖。對於IDS的數量有限,你可以在收集資源使用查詢參數:

DELETE /widgets?id=1,2,4,16,256 

在一般情況下,你應該能夠使用查詢參數作爲過濾器上刪除收集的,就像你會在一個該集合的GET。

+0

正如你所說它是有限的數量。如果某人有很長的ID,那麼你可以很容易地達到一個URL限制,如果你把所有這些信息放在DELETE請求的主體中,那麼可以避免這種情況。 – NikosDim

+0

那麼,你可以做你想做的事情,但是如果你嘗試傳遞一個正文以獲取DELETE請求,許多框架和容器將會出現問題。他們如何行爲不端因應用而異。徹底測試。 –

相關問題