在從REST API返回錯誤時,我正在尋找有關良好實踐的指導。 我正在開發一個新的API,因此我如今能夠採起任何方向。 個人內容類型目前是XML,但我計劃未來支持JSON。 html
我如今正在添加一些錯誤狀況,例如客戶端嘗試添加新資源但已超出其存儲配額。 我已經使用HTTP狀態代碼處理某些錯誤狀況(401用於身份驗證,403用於受權,404用於普通錯誤請求URI)。 我查看了有福的HTTP錯誤代碼,但400-417範圍彷佛沒有報告特定於應用程序的錯誤。 因此起初我很想用200 OK和特定的XML有效載荷返回個人應用程序錯誤(即付給咱們更多,你將獲得你須要的存儲空間!)可是我停下來思考它而且彷佛是肥皂(/聳聳肩恐怖)。 此外,感受就像我將錯誤響應分紅不一樣的狀況,由於有些是http狀態代碼驅動而其餘是內容驅動。 git
那麼行業建議是什麼? 好的作法(請解釋緣由!)以及從客戶端pov中,REST API中的哪一種錯誤處理使客戶端代碼的生活更輕鬆? github
根據現有的「最佳實踐」對api進行建模多是最佳選擇。 例如,如下是Twitter如何處理錯誤代碼https://developer.twitter.com/en/docs/basics/response-codes json
贊成。 REST的基本原理是使用Web基礎結構。 HTTP狀態代碼是消息傳遞框架,容許各方在不增長HTTP有效負載的狀況下相互通訊。 它們已經創建了傳達響應狀態的通用代碼,所以,要真正實現RESTful,應用程序必須使用此框架來傳達響應狀態。 api
在HTTP 200信封中發送錯誤響應會產生誤導,並迫使客戶端(api使用者)解析消息,最有多是以非標準或專有方式。 這也沒有效率 - 您將強制客戶端每次解析HTTP有效負載以瞭解「真實」響應狀態。 這增長了處理,增長了延遲,併爲客戶創造了犯錯的環境。 服務器
我知道派對的時間很是晚,可是如今,在2013年,咱們有一些媒體類型來覆蓋常見的分佈式(RESTful)方式的錯誤處理。 請參閱「vnd.error」,application / vnd.error + json( https://github.com/blongden/vnd.error )和「HTTP API的問題詳細信息」,application / problem + json( https:// tools。 ietf.org/html/draft-nottingham-http-problem-05 )。 app
若是超出客戶端配額,則是服務器錯誤,在此實例中避免使用5xx。 框架
爲您的API選擇正確的HTTP錯誤代碼的絕佳資源: http : //www.codetinkerer.com/2015/12/04/choosing-an-http-status-code.html 分佈式
摘自文章: spa