什麼REST PUT / POST / DELETE調用應該按照慣例返回?


Answers

原諒輕浮,但是如果您通過HTTP執行REST,則RFC7231準確描述GET,PUT,POST和DELETE的期望行為。

Question
  1. 根據“REST思想”,PUT / POST / DELETE請求的響應正文中應該包含什麼內容?

  2. 如何返回代碼? HTTP_OK足夠了嗎?

  3. 這些公約的原因是什麼?

我發現了一篇描述POST / PUT差異的好帖子: POST vs PUT但是它仍然不能回答我的問題。




總體而言,這些約定“像您只是提供網頁一樣思考”。

對於PUT,如果您之後立即執行GET,我會返回相同的視圖; 那會導致200(當然,假設渲染成功,當然)。 對於POST,我會重定向到創建的資源(假設您正在執行創建操作;否則,只返回結果); 成功創建的代碼是201,這實際上是不在300範圍內的重定向的唯一HTTP代碼。

我從來沒有對DELETE應該返回什麼感到滿意(在這種情況下,我的代碼當前會生成一個HTTP 204和一個空的主體)。




創建資源通常映射到POST,並且應該返回新資源的位置; 例如,在Rails腳手架中,CREATE將重定向到新創建的資源的SHOW。 同樣的方法對於更新(PUT)也許是有意義的,但這不是一個慣例; 更新只需指示成功。 刪除可能只需要指示成功; 如果你想重定向,返回資源列表可能是最有意義的。

成功可以通過HTTP_OK來表示,是的。

我上面所說的唯一的硬性規則是CREATE應該返回新資源的位置。 這對我來說似乎是一件容易的事; 客戶需要能夠訪問新項目是非常有意義的。