2012-02-07 33 views
1

目前,我們正在努力將OData的標準:返回一個包含Http 204狀態的主體是否有效?

http://www.odata.org/developers/protocols/operations

按照這個標準,如果執行對你的數據的PUT操作,您應該返回204個狀態碼。該標準規定:

當處理PUT請求服務器返回狀態204(無內容) 以指示成功時,不需要響應主體。

現在,根據別人的看法,有些地方聲稱,如果您要返回204,您絕對不應該返回響應主體 - 這不是一個是否需要的問題。

問題是我們需要返回一個正文。在這種情況下,我們正在對一批物品執行更新查詢,並且部分成功(即更新了一些,但有些不成功)是可能的。我們想告訴客戶失敗是什麼,響應機構是我能想到的唯一方式。

那麼做到這一點的「正確」方法是什麼?我應該摒棄W3C並返回一個正文?或者我應該藐視OData並返回一個不同的響應代碼?或者還有另外一種可能性?

回答

5

對PUT的204響應不是OData服務器的強制要求(注意odata.org不是規範性參考,MS-OData文檔是)。您可以將body返回200,在這種情況下,您返回的主體應該是已更新實體的序列化(在服務器應用更新之後)。事實上,在OData V3中,我們現在對Prefer標頭有支持,它確實做到了這一點。客戶端可以包含帶有PUT請求的Prefer頭並請求服務器用200和更新的實體進行響應。

+0

+1比我的答案更具權威性。 – 2012-02-07 16:40:19

+0

當更新的實體具有計算的字段時(例如,SQL實體中的計算列),因爲重新計算的值(或任何內容)將不會與204一起返回,從而強制另一個GET來獲取更新。 – 2015-07-20 16:11:16

4

我認爲你不能返回內容,應該考慮返回一個頭來表示部分完整的命令。

該規範狀態

204響應必須不包括消息正文,因此始終由報頭字段之後的第一空行終止。

您也不妨採取分批進場,http://www.odata.org/developers/protocols/batch

+0

謝謝。你是不是跟我曾經在混凝土工作過的麥克米勒一樣? – 2012-02-07 12:14:26

+0

是的,我是Thrower先生,很高興你聽到你做得很好。你在這裏問了一些問題。回頭看看DDDSW的幾位同事,並確信其中一位是我的老單身項目主管。這裏的小世界。 – 2012-02-07 12:16:13

+0

嘿!希望事情對你很好。我想那個人應該是戴夫懷亞特 - 他最近離開後回到教學:) – 2012-02-07 12:19:35

0

你不應該返回204,除非操作完全成功。

0

似乎很奇怪爲PUT返回204。我一直認爲204與DELETE配對。文本「無內容」表示該資源不再位於服務器上。 PUT與刪除資源沒有任何關係,所以不應該使用204.另外204是成功代碼,所以應該在100%成功時使用。

相關問題