2015-11-07 117 views
1

我要創建或一次過與下面的請求更新項目:REST PUT創建或更新

PUT /items/{id} 

我應該返回201 Created如果該項目已被創建並204 No Content時,它已被更新?還是應該爲這兩種行爲返回相同的狀態?

+0

根據http://stackoverflow.com/a/28642061/1848654你應該在更新後返回'200 OK'和新資源。 – melpomene

+0

謝謝,在這個答案irisius說:'201'如果創建和'200'與更新的資源,如果更新。所以根據行動有兩個不同的迴應。 – otonakav

回答

2

TL; DR

使用200 OK在這兩種情況下,如果區別不是客戶端重要的。

創建時使用201 Created,更新時使用200 OK如果區別很重要。

詳細

REST風格的設計,有做事的沒有一個單一的,正確的方法,但我常常發現,original HTTP status code specification提供了很好的指導。

它總是精細返回200 OK,如果你不希望客戶採取基於響應單獨行動,但你可以提供詳細信息,如果您認爲客戶會需要它。請注意,客戶可能會到期望您的API,所以一旦你開始提供更多的細節,你不能輕易改變主意。

這就是說,如果你想返回201 Created,然後根據規範:

的響應應該包括含有的資源特性和位置(S)的列表的實體從用戶或用戶代理可以選擇最合適的一個。

作爲一個例子,可以把位置在Location頭,但也可以把它在響應的主體(但你必須記錄該機構的結構和內容類型)。

當談到204 No Content響應they create dead ends for link-following clients,所以如果你正在創建一個true level 3 REST API那麼你應該避免這種響應類型作爲客戶的禮貌。

3

答案在RFC2616明確提出,9.6節:

如果創建了一個新的資源,原始服務器必須通過201(創建)響應通知用戶代理。如果現有資源被修改,則應發送200(OK)或204(無內容)響應代碼以指示成功完成請求。