我有服務需要一些實體和需要保存/更新這個實體:RESTful服務,如果驗證失敗,如何響應?
http://myhost.com/rest/entity
我使用POST並提交JSON。在服務內部,它檢測到通過的實體不好。無效,訂單通過不存在的客戶等。
我該如何回覆? HttpCode.NotFound
?還是其他人?你如何回覆這樣的事情?
我有服務需要一些實體和需要保存/更新這個實體:RESTful服務,如果驗證失敗,如何響應?
http://myhost.com/rest/entity
我使用POST並提交JSON。在服務內部,它檢測到通過的實體不好。無效,訂單通過不存在的客戶等。
我該如何回覆? HttpCode.NotFound
?還是其他人?你如何回覆這樣的事情?
我們在這種情況下的項目,我們做了以下內容:
{"message":"%extended error message here%"}
但它確實非常主觀。
另外我建議閱讀This blog article on RESTfull error handling - 它描述了許多可用的選項,所以你可以選擇一些你的口味。
我認爲你應該選擇client error code。 400錯誤的請求或403禁止可以是一個良好的開端
418那裏是明顯的選擇。 –
403不適用於所描述的場景。 –
爲什麼403不合適? http://stackoverflow.com/a/3290369/59639似乎有不同的學校雖然在400與403 –
422 Unprocessable Entity, defined in WebDAV (RFC 4918):
的422(無法處理的實體)狀態代碼表示的服務器理解的請求實體(因此一個415的內容類型(不支持的媒體類型)狀態碼不合適),並且請求實體的語法是正確的(因此400(錯誤請求)狀態碼不合適),但無法處理包含的指令。例如,如果XML請求體包含格式正確(即,語法正確)但語義錯誤的XML指令,則可能會出現此錯誤情況。
我真的很喜歡這個。對純粹主義者來說,這可能會不受歡迎,但使用與畸形請求相同的狀態會更好。 –
在我正在開發的項目上,我也很困擾客戶無法區分驗證錯誤和狀態代碼中單獨的錯誤請求(沒有檢查響應主體),並且獨立地考慮使用422來區分前者。我在做一些理智檢查時遇到了這個問題,以確保沒有更好的替代方案,所以我很高興看到其他人使用這種方法,並且這並不完全在左邊領域。我是否可以假定您沒有遇到過這種方法的其他下游問題? – rscarter
那麼,這是真的由你來決定,這是你的服務。 – jgroenen
[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