1 需求
REST 目前並沒有一個普遍接受的標准,因此開發者需要自行決定 API 的設計,其中一項決策就是錯誤處理。
比如我們是否應該使用 HTTP 狀態碼來標識錯誤?如何返回表單驗證的結果等等。
2 錯誤類型
錯誤可以分為兩種類型:全局錯誤和本地錯誤。
全局錯誤(應由 Web 框架捕獲):
(1)請求了一個不存在的 API—》
(2)無權請求這個 API—〉auth
(3)數據庫連接失敗—>database try except
(4)其他一些沒有預期到的、會終止程序運行的服務端錯誤
本地錯誤(和 API 密切相關):
(1)請求參數的字段和類型,表單驗證,
(2)唯一性檢查
(3)其他可預期的錯誤處理
我們需要編寫特定代碼來捕獲這類錯誤,並拋出一個包含提示信息的全局異常,供 Web 框架捕獲並返回給客戶端。
Flask 框架就提供了此類全局異常處理機制:
使用 Flask-RESTful 來處理驗證的另一個好處就是沒有必要單獨地處理類似 HTTP 400 錯誤,Flask-RESTful 會來處理這些。
自動處理成json,並自定義狀態碼
return { 'task': ‘hello world' }, 201
3 返回格式
{ Code: 200, Message: 'Successful', token: '38ce6474a370c3fe84ddf92403bec204cfcbe07b', data:{ key1: value1} }

{ Status: 1, //數據狀態 Code: 200, Message: 'Successful', ClientTime: 1473765898, ServerTime: 1473765935, token: '38ce6474a370c3fe84ddf92403bec204cfcbe07b', data:{ key1: value1, key2: value2, key3: { [ name: '小明', sex: 1, ],[ name: '小華', sex: 1, ],[ name: '小剛', sex: 1, ]} } }
4 常用返回狀態
GET HTTP/1.1 200 OK 正確返回 POST HTTP/1.1 201 Created 已創建 DELETE HTTP/1.1 204 NO CONTENT 沒有返回體 POST HTTP/1.1 400 BadRequest 前端請求失敗,方式參數不對 POST HTTP/1.1 401 No Auth 沒有權限 DELETE HTTP/1.1 403 Forbidden 禁止訪問 POST HTTP/1.1 404 Not Found 沒有資源頁面 PATCH HTTP/1.1 422 UnprocessableEntity(不能處理實體,圖片文件等) GET HTTP/1.1 500 InternalError 服務器內部錯誤
200 和204 的區別
* 如果導航到的URL返回了一個沒有響應體的HTTP/200響應,則頁面將會顯示一個空白文檔(就是一片白色),頁面的URL地址也會變成新指定的URL。
* 如果服務器返回的是一個HTTP/204響應,當前頁面不會有任何變化,就好像根本沒有進行導航操作一樣,頁面的URL地址也保持不變。
5 其他需要的返回狀態
1xx:信息響應類,表示接收到請求並且繼續處理 2xx:處理成功響應類,表示動作被成功接收、理解和接受 3xx:重定向響應類,為了完成指定的動作,必須接受進一步處理 4xx:客戶端錯誤,客戶請求包含語法錯誤或者是不能正確執行 5xx:服務端錯誤,服務器不能正確執行一個正確的請求 100——客戶必須繼續發出請求 101——客戶要求服務器根據請求轉換HTTP協議版本 200——交易成功 201——提示知道新文件的URL 202——接受和處理、但處理未完成 203——返回信息不確定或不完整 204——請求收到,但返回信息為空 205——服務器完成了請求,用戶代理必須復位當前已經瀏覽過的文件 206——服務器已經完成了部分用戶的GET請求 300——請求的資源可在多處得到 301——刪除請求數據 302——在其他地址發現了請求數據 303——建議客戶訪問其他URL或訪問方式 304——客戶端已經執行了GET,但文件未變化 305——請求的資源必須從服務器指定的地址得到 306——前一版本HTTP中使用的代碼,現行版本中不再使用 307——申明請求的資源臨時性刪除 400——錯誤請求,如語法錯誤 401——請求授權失敗 402——保留有效ChargeTo頭響應 403——請求不允許 404——沒有發現文件、查詢或URl 405——用戶在Request-Line字段定義的方法不允許 406——根據用戶發送的Accept拖,請求資源不可訪問 407——類似401,用戶必須首先在代理服務器上得到授權 408——客戶端沒有在用戶指定的餓時間內完成請求 409——對當前資源狀態,請求不能完成 410——服務器上不再有此資源且無進一步的參考地址 411——服務器拒絕用戶定義的Content-Length屬性請求 412——一個或多個請求頭字段在當前請求中錯誤 413——請求的資源大於服務器允許的大小 414——請求的資源URL長於服務器允許的長度 415——請求資源不支持請求項目格式 416——請求中包含Range請求頭字段,在當前請求資源范圍內沒有range指示值,請求也不包含If-Range請求頭字段 417——服務器不滿足請求Expect頭字段指定的期望值,如果是代理服務器,可能是下一級服務器不能滿足請求 500——服務器產生內部錯誤 501——服務器不支持請求的函數 502——服務器暫時不可用,有時是為了防止發生系統過載 503——服務器過載或暫停維修 504——關口過載,服務器使用另一個關口或服務來響應用戶,等待時間設定值較長 505——服務器不支持或拒絕支請求頭中指定的HTTP版本