2015-05-04 123 views
2

我們有一個RESTful體系結構,我有一個關於API異常和http狀態的問題。REST的4xx http狀態碼

我們使用400病例:

  • 值不匹配(例如,預期的100卻被99)
  • 侵犯@Size,@Min,@Max,@Nullable ANC等

對於邏輯錯誤的情況,使用422(不可處理的實體),但這不是客戶端錯誤。例如,嘗試將類別設置爲已有產品的類別。這在客戶端是不可預測的。

最後,我們使用409(衝突)作爲客戶端錯誤的情況。 例如,如果他試圖通過JSON發送無效的Date格式。或者註冊日期比目前更遠。

但是有一種情況適合於幾個類別: 我們有一個Tax字段,它是整數。

如果客戶端發送分數Tax則應引發異常。

從一方面來說,這顯然是400,客戶應該看到'稅不能小數'。

但是,從另一面 - 它是一個客戶端的編程錯誤,因爲他正試圖發送雙/浮法的代替整數/長(即他向另一個類型,它像通過而不是字符串)和409應拋出。

我應該選擇什麼:400409TypeMismatchNumbers是什麼情況? 如果400,爲什麼我應該爲數字類型製作一個遊戲,但是409Date/StringTypeMismatch

我寧願選擇確定的邏輯而不是「我認爲」的答案。這不是一個討論。

+5

我聞到的意見爲主的問題,所以無論你選擇做什麼,只是保持一致。 – Kayaman

+0

我對此的看法是堅持使用http響應的基於標準的定義。 – YvesLeBorg

+1

親愛的選民:這個問題不是基於意見的。 HTTP響應已被充分描述以產生明確的答案。 –

回答

4

我同意基於觀點的問題發表評論,但我也會拋出此那裏:

enter image description here

+0

右鍵單擊,查看圖像,你應該得到原始文件。或者,它在這裏:http://i.stack.imgur.com/whhD1.png –

+0

這個文件是你自己的產品還是它是某種「標準」?如果是後者,你從哪裏得到它的? –

+0

這不是我的 - 我看到它可能是2 - 3年前,剛剛Google搜索它。 –

0

意見:由於種類較多,基本我會拋出一個409

+0

是的,我站在同一觀點。這是更「程序員」的思考方式。 – user2138356

0

我不明白爲什麼你會在這些情況下爲409。 這裏是維基百科說什麼409

表示該請求不能因爲在請求中,衝突 的處理,如在多個 更新的情況下編輯衝突。

我會使用400作爲數字類型以及Date/String的情況。

但是這是個人風格的問題,只要您在整個API中保持一致,兩種狀態代碼都是可能的。

0

老實說,對於您的用例,我寧願使用狀態碼400422,因爲提供的實體由於其內容而無法處理。這可以是結構化的(錯誤的類型,缺少必需的字段,...)或數據驗證(使用正則表達式的錯誤格式,不允許的值,重複的值...)。

狀態代碼409應,而用於樂觀鎖,如鏈接http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html描述:

10.4.10 409衝突

請求無法完成,由於與當前衝突資源的狀態。只有在預期用戶可能能夠解決衝突並重新提交請求的情況下,才允許使用此代碼。響應主體應該包含足夠的信息以供用戶識別衝突的來源。理想情況下,響應實體會爲用戶或用戶代理提供足夠的信息來解決問題;然而,這可能是不可能的,也不是必需的。

衝突最有可能發生以響應PUT請求。例如,如果正在使用版本控制並且包含PUT的實體更改爲與先前(第三方)請求發生衝突的資源發生衝突,則服務器可能會使用409響應來指示它無法完成請求。在這種情況下,響應實體可能會以響應Content-Type定義的格式包含兩個版本之間的差異列表。

希望它可以幫助你, 蒂埃裏