什么是協議:
所謂的協議就是指大家都認同的一個標准規范,並且大家都承諾嚴格按照標准細節來執行。
前后端開發的協議:
站在一個前端的角度,我是這么來看待一個接口應該具有的細節的
1. 請求的方式
1.1 盡量參考RESTFUL的方式來設計,如讀取(GET),新建(POST),修改(PUT),刪除(DELETE),通過HTTP本身的含義來減少參數的傳遞
1.2 尤其要注明不同模塊應該要有同一個風格的的請求方式,例如用GET來讀取數據那么所有的讀取操作都應該是GET
2. 請求的參數:
2.1 參數的傳遞命名要統一,如分頁時的結構為{pageNo,pageSize, query}
2.2 每個不同的模塊,請求參數的風格要保持一致
3. 接口的狀態:成功、失敗
3.1 狀態的描述應該盡量簡單
3.2 如果有額外的內容,應該要有一個定義好的狀態碼,並可以根據狀態進行異常的細節說明。
3.3 通常情況下要求后端不能返回500異常
4. 接口的響應:
4.1 相同的操作類型,響應的數據結構要一致,如摘取列表的結果都為{total, items}
4.2 數據的控制參數(如分頁數據,條目計數等,是否只讀)
前端更關注的細節:
1. http 響應異常
1.1 這類型的異常通常是不可以預知的
1.2 把常見的異常碼進行處理,如401,404,408,504等等
1.3 在http模塊把這個內容進行同化並向后傳遞,讓后面的代碼可以無差別處理這部分異常
1.4 通過navigator.connection.onchange來監聽網絡的變化,優化網絡異常體驗
2. 超時的處理
通過我們通過OAuth的方式進行鑒權,在一定的時間后超時是肯定的,但怎么樣可以給到用戶一個更好的體驗
2.1 把TOKEN的超時節點記錄在localstorage中,每次進入系統就去查看是否需要刷新TOKEN
2.2 與后端商定使用refreshToken來更新TOKEN,當TOKEN超時后,攔截當前的所有請求,並同時請求新的TOEKN和refreshToken,在完成刷新TOKEN再執行被攔截的請求
通過框架來對接協議:
在前后端協議能夠被很好地執行后,我們便可以通過框架的方式把相關的細節封裝起來
1. 封裝請求工具:主要包括URL處理、參數處理、服務端異常及HTTP異常處理、異常說明、回調數據預加工
2. API層封裝:
2.1 返回數據的加工,使之適合狀態層消費。
2.2 標准化數據輸出:每個API的接口出來的結構要統一,如{succes, message, data}
2.3 建議通過ts來開發API支,使用interface來約束每個API接口的結果,把常用的操作直接封裝在上級class中
2.2 請求防抖處理
結語:
好的接口定義可以直接降低前端很大一部分的工作量,實際開發中有很多操作可以直接通過上級類封裝好,並且代碼也更容易穩定下來。