是否有正確的RESTful方式來處理這種情況?也許返回一個特殊的代碼?
退一步了一會兒:處理「創造」的用例完全直接的方式看起來像
- 客戶端的POST請求/用戶/ 1 /報道
- 源服務器創建一個新的資源,並計算該資源一個新的標識符(/用戶/ 1 /報告/ A)
- 服務器返回指示一個新的資源已被創建,即資源的位置的響應,並且其當前表示。
新資源已被創建的指示是狀態碼:201。 新創建的資源的位置由Location響應報頭中描述。 內容的位置由Content-Location響應頭 描述的當前表示是響應(沒有驚奇)的message body。
HTTP/1.1 201 Created
Location: /users/1/reports/a
Content-Location: /users/1/reports/a
...
<representation of the report goes here>
在你的情況下,如果資源已經存在,那麼事情看起來幾乎相同。爲了避免暗示我們已經創建了新的資源,狀態碼更改爲200,並且位置標題被刪除。
HTTP/1.1 200 OK
Content-Location: /users/1/reports/a
...
<representation of the report goes here>
如果您希望在客戶端使用先前生成的報告的標識符檢索報告表示,那麼你應該使用303 See Other
它主要用來允許POST操作的輸出將用戶代理重定向到選定的資源,因爲這樣做可以提供與POST響應相對應的信息,其格式可以獨立於原始請求單獨標識,加書籤和高速緩存。
HTTP/1.1 303 See Other
Location: /users/1/reports/a
...
此模式通常被稱爲Post/Redirect/Get
304是不恰當的在這裏。請參閱:https://tools.ietf.org/html/rfc7232#section-4.1 – VoiceOfUnreason