2012-05-24 123 views
20

所以我正在開發一個REST APIHttp狀態代碼400 VS 412

當柱子是創建資源和必填字段丟失該怎麼回報?

400 - 錯誤的請求

OR

412 - 前提條件失敗

,爲什麼?

回答

28

使用400如果請求參數是錯誤的。如果其中一個If-*請求標頭If-Match,If-Modified-Since等其中一個是錯誤的,請使用412。

爲什麼?這正是RFC所說的。例如見這種提取物If-Match規格:

如果沒有實體標籤匹配,或者如果「*」,並給出當前沒有實體存在,服務器不能執行所請求的方法,並且必須返回一個412 (先決條件失敗)響應。當客戶端要阻止更新方法(如PUT)修改自客戶端上次檢索到的資源時發生更改時,此行爲非常有用。

+1

它還表示,由於400的語法格式不正確,請求無法實現。 – Rob

+1

本頁幫助我 - http://odino.org/don-t-rape-http-if-none-match-the- 412-http-status-code/- 使用'PUT'請求上下文使我更容易理解它的用途,因爲濫用某些狀態碼總是容易的。 – Charlie

12

412當您的服務器不符合客戶端指定的條件時使用。

在你的情況下,你應該使用400.這只是一個不好的要求。

請參閱此link瞭解有關預處理標題的一些說明。

Etag標頭通常是一個字符串,代表我們在HTTP標頭中的資源 。您要求具有If-Match的資源是一個 預先規定的HTTP標頭。如果它不符合您發送的代碼 ,它將發送一個412。

如果-None-Match通知服務器僅當 Etag與客戶端發送的Etag不同時才處理整個響應。

+0

爲什麼downvote?答案有什麼問題? – nunespascal

+4

認爲有人度過了一個糟糕的一天。只要忽略它,讓系統完成它的工作:) – BalusC

+0

有一個upvote來平衡它。 –

3

你可以使用狀態碼422.如果你不想,400是好的。