我要創建或一次過與下面的請求更新項目:REST PUT創建或更新
PUT /items/{id}
我應該返回201 Created
如果該項目已被創建並204 No Content
時,它已被更新?還是應該爲這兩種行爲返回相同的狀態?
我要創建或一次過與下面的請求更新項目:REST PUT創建或更新
PUT /items/{id}
我應該返回201 Created
如果該項目已被創建並204 No Content
時,它已被更新?還是應該爲這兩種行爲返回相同的狀態?
使用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那麼你應該避免這種響應類型作爲客戶的禮貌。
答案在RFC2616明確提出,9.6節:
如果創建了一個新的資源,原始服務器必須通過201(創建)響應通知用戶代理。如果現有資源被修改,則應發送200(OK)或204(無內容)響應代碼以指示成功完成請求。
根據http://stackoverflow.com/a/28642061/1848654你應該在更新後返回'200 OK'和新資源。 – melpomene
謝謝,在這個答案irisius說:'201'如果創建和'200'與更新的資源,如果更新。所以根據行動有兩個不同的迴應。 – otonakav