背景
在做介面設計時,對於一些異常的響應如何處理一直是開發者們頭疼的問題,不同的團隊有不同的規定。有的團隊會利用http狀態碼去表示各種情況的異常。有的團隊會針對異常統一的返回200,然後在資料中增加一個code引數,用於表示各種異常的錯誤碼,message引數中表示具體的錯誤資訊。如下圖所示:
那麼到底兩種方案有什麼區別呢?我試著問了問ChatGPT。
ChatGPT這麼說
問:在做介面設計時,可以用 http 狀態碼錶示一些異常情況。也可以統一設定 http 狀態碼為 200,然後在返回的資料中新增自定義的 code 碼。這兩種方式各有什麼優勢和劣勢呢?另外請提供一個選擇上的建議
答:
在做介面設計時,可以用 http 狀態碼錶示一些異常情況。也可以統一設定 http 狀態碼為 200,然後在返回的資料中新增自定義的 code 碼。這兩種方式各有優劣,具體如下:
- 使用 http 狀態碼的優點是符合 HTTP 協議的規範,可以讓客戶端和伺服器之間更容易地交換資訊和處理錯誤。HTTP 狀態碼已經定義了很多常見的情況,比如 200 表示成功,404 表示找不到資源,500 表示伺服器內部錯誤等。使用 http 狀態碼的缺點是有些情況可能不太適合用標準的狀態碼來表示,比如業務邏輯上的錯誤或者特殊的需求。雖然可以建立自定義的狀態碼,但是這可能會導致與其他系統或框架不相容或者引起混淆。
- 使用自定義的 code 碼的優點是可以更靈活地表示各種業務邏輯上的錯誤或者特殊的需求,比如使用者未登入、餘額不足、驗證碼錯誤等。使用自定義的 code 碼的缺點是不符合 HTTP 協議的規範,可能會讓客戶端和伺服器之間更難以交換資訊和處理錯誤。比如,如果客戶端收到一個 200 的狀態碼,但是實際上介面返回了一個業務邏輯上的錯誤,那麼客戶端就需要解析返回資料中的 code 碼來判斷是否成功,並且根據不同的 code 碼做出相應的處理。
綜上所述,在選擇使用 http 狀態碼還是自定義 code 碼時,需要考慮以下幾個因素:
- 是否需要遵守 HTTP 協議的規範
- 是否需要與其他系統或框架相容
- 是否需要表達非標準或複雜的業務邏輯
- 是否需要簡化客戶端和伺服器之間的通訊和錯誤處理
一般來說,建議使用 http 狀態碼作為主要的響應方式,並且儘量使用標準定義好的狀態碼。如果有特殊需求或者無法用標準狀態碼錶示,則可以考慮使用自定義 code 碼作為補充,並且在文件中清楚地說明每個 code 的含義和對應操作。
不得不說,ChatGPT果然強大,完全的解答了筆者的疑惑。總而言之,就是說我們們在設計介面響應時,如果是正常響應,那麼就返回200和原本的資料就好了。如果是有異常的情況,則可以status code 和自定義code配合使用。一個最佳的實踐建議是結合兩種方式,即使用 HTTP 狀態碼錶示基本的錯誤型別和語義,同時在返回資料中新增自定義 code 碼錶示具體的業務錯誤。例如:
{
"code": 1001,
"message": "使用者名稱或密碼錯誤",
"data": null
}
這樣既可以遵守 HTTP 規範,又可以提供更多的錯誤資訊。
既然要遵守HTTP規範,那麼我們就得知道HTTP規範如何規定我們怎麼定義狀態碼的,於是我又問了ChatGPT。
問:HTTP狀態碼設定的規範是什麼?
答:
HTTP狀態碼是用以表示網頁伺服器超文字傳輸協議響應狀態的3位數字程式碼。它由 RFC 2616 規範定義的,並得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774 與 RFC 4918 等規範擴充套件。HTTP 狀態碼由三個十進位制數字組成,第一個十進位制數字定義了狀態碼的型別。 響應分為五類:資訊響應 (100–199),成功響應 (200–299),重定向 (300–399),客戶端錯誤 (400–499)和伺服器錯誤 (500–599) 。設定HTTP應答頭往往和設定狀態行中的狀態程式碼結合起來。
問:有哪些預設的標準的HTTP狀態碼呢?
答:
預設的標準的HTTP狀態碼有很多,常見的有以下幾種:
- 200 - 請求成功
- 301 - 永久重定向
- 302 - 臨時重定向
- 304 - 資源未修改
- 400 - 錯誤請求
- 401 - 未經授權
- 403 - 禁止訪問
- 404 - 請求錯誤
- 500 - 內部伺服器錯誤
總結
不得不說,ChatGPT在搜尋場景裡,大大提升了我們的效率。雖然這些問題直接使用搜尋引擎也能找到答案,但是我們需要自己花時間去各種瀏覽篩選彙總資訊,而且搜尋結果中,還充斥著大量的低質和無用資訊。而現在,ChatGPT能直接把結果提煉出來,而且非常的精確,像一個非常有資歷的大佬一般。當然,這也非常考驗我們的提問能力,也就是說你得清楚的知道自己不知道什麼(哈哈哈,有點繞)。
部落格原創地址:介面響應錯誤碼應該怎麼設計?ChatGPT這麼說
歡迎批評指正,或者與我交流探討前端開發技術~
聯絡我:imwty2023(微信),iwhitney@163.com(郵箱)