2012-01-20 64 views
14

我有服務需要一些實體和需要保存/更新這個實體:RESTful服務,如果驗證失敗,如何響應?

http://myhost.com/rest/entity 

我使用POST並提交JSON。在服務內部,它檢測到通過的實體不好。無效,訂單通過不存在的客戶等。

我該如何回覆? HttpCode.NotFound?還是其他人?你如何回覆這樣的事情?

+1

那麼,這是真的由你來決定,這是你的服務。 – jgroenen

+0

[REST HTTP status codes for failed validation or invalid duplicate]的可能重複(http://stackoverflow.com/questions/3290182/rest-http-status-codes-for-failed-validation-or-invalid-duplicate) – MaxiWheat

回答

20

我們在這種情況下的項目,我們做了以下內容:

  1. 設置響應代碼400錯誤的請求
  2. 設置響應體HTTP以下JSON:{"message":"%extended error message here%"}

但它確實非常主觀。

另外我建議閱讀This blog article on RESTfull error handling - 它描述了許多可用的選項,所以你可以選擇一些你的口味。

+1

這就是我們所做的。如果可用,我們將返回相同的媒體類型。在網絡世界中,你會得到一個帶有文本\ html的400。在這個例子中,媒體類型是application \ json – suing

+0

謝謝!除了狀態碼之外,我正考慮在標題中傳遞一些信息,但是在您提到的文章和本文中,我認爲我將決定我的服務的常見響應對象,並且只使用400和200代碼(除401以外的身份驗證) – katit

1

我認爲你應該選擇client error code400錯誤的請求403禁止可以是一個良好的開端

+4

418那裏是明顯的選擇。 –

+2

403不適用於所描述的場景。 –

+1

爲什麼403不合適? http://stackoverflow.com/a/3290369/59639似乎有不同的學校雖然在400與403 –

23

422 Unprocessable Entity, defined in WebDAV (RFC 4918)

的422(無法處理的實體)狀態代碼表示的服務器理解的請求實體(因此一個415的內容類型(不支持的媒體類型)狀態碼不合適),並且請求實體的語法是正確的(因此400(錯誤請求)狀態碼不合適),但無法處理包含的指令。例如,如果XML請求體包含格式正確(即,語法正確)但語義錯誤的XML指令,則可能會出現此錯誤情況。

+2

我真的很喜歡這個。對純粹主義者來說,這可能會不受歡迎,但使用與畸形請求相同的狀態會更好。 –

+0

在我正在開發的項目上,我也很困擾客戶無法區分驗證錯誤和狀態代碼中單獨的錯誤請求(沒有檢查響應主體),並且獨立地考慮使用422來區分前者。我在做一些理智檢查時遇到了這個問題,以確保沒有更好的替代方案,所以我很高興看到其他人使用這種方法,並且這並不完全在左邊領域。我是否可以假定您沒有遇到過這種方法的其他下游問題? – rscarter

相關問題