在后端工程師的日常開發中,我們都曾想過 怎么設計一個良好的接口呢?需要考慮的點有哪些。來 給您。
1、請求參數校驗
這個是大家都能想到的,也是一個良好的接口必備的前提條件,通過入參的校驗我們可以過濾掉許多無效的請求,提高系統的穩定性。
我們可以將入參合法性校驗分為: 「常規性校驗」 和 「業務校驗」;
所謂的常規性校驗包括:token校驗、必填校驗、長度校驗、類型校驗等等;
業務校驗也就是特定業務場景下的校驗:比如用戶商品下單接口,那么下單金額一定要大于0;
2、版本迭代
實際過程中 肯定有需要對版本進行升級的需求,而提前設計好版本,可以避免因為升級導致舊的服務無法正常工作,我們要保證在升級的時候,新舊版本的服務都能正常運轉。
多版本控制現在比較常見的方式有:url標識版本
, header標識版本
, params標識版本
3種方式。
3、訪問限制
在設計接口的時候,我們要考慮好,哪些是 游客接口,哪些是 登錄接口。
在訪問 登錄接口的時候,我們要做好 驗證工作。
比如說 請求頭帶上這個token請求接口,后端通過攔截器攔截該接口,做校驗看redis是否存在該key,如果不存在直接返回,用戶未登陸!
4、防抖處理
目的是防止重復數據的產生,比如新增接口,用戶快速點擊兩次,如果沒做防重,就會產生重復數據。
5、考慮冪等性
所謂冪等: 「多次調用方法或者接口不會改變業務狀態,可以保證重復調用的結果和單次調用的結果一致」。
我們在開發中主要操作也就是CURD,其中讀取
操作和刪除
操作是天然冪等的,我們所關心的就是創建
操作、更新
操作。
比如請求多次,只有第一次請求才會做數據處理,后面的請求不會產生數據改變,例如退款接口,第一次退款成功后,后面的請求,不會再次退款成功。
6、提高響應時間
這是一個 用戶體驗 的指標,因為涉及的方面很多,所以是一個復雜的操作。
7、限流控制
限流是為了更好的維護 系統穩定性。
如果說我們把接口提供出來給第三方系統用,那么這個時候接口的限流是非常有必要的。
一方面,限流可以防止接口被刷,造成不必要的服務層壓力,另一方面,是為了防止接口被濫用。
可以使用 redis進行接口調用次數統計,ip+接口地址作為key,訪問次數作為value,每次請求value+1,設置過期時長來限制接口的調用頻率。
8、IP黑名單
ip黑名單是 設置不讓訪問服務的ip,進而對 惡意訪問 做一個控制。
9、數據脫敏
數據庫中的一些敏感字段比如:身份證號
、銀行卡號
、地址
、手機號
等等,是需要做脫敏處理。
比如手機號15912345678脫敏后顯示159****5678。
10、接口訪問日志
關鍵的 接口一定要有日志,入參日志
、出參日志
、異常日志
,
這樣一旦出現問題,我們可以通過查看日志一下子定位問題所在。
11、統一 響應格式
在定義接口時需要返回 統一格式的 響應體。
響應數據會包含三個屬性: `
- 狀態碼(code)
- 信息描述(message)
- 響應數據(data)
客戶端可以根據**「狀態碼」**知道接口請求是否成功,如果成功則開始處理數據,如果失敗則直接拋出message信息。
12、職責單一清晰
一個接口只做一件事,是那些開發過大項目的小竅訣。
13、配備一份好的 接口文檔
優秀的產品,需要一份優秀的說明書。提供一份良好完整的api文檔 是很有必要的。
其中包括提供一些請求示例,這樣用戶在使用的時候才會更加清楚,也能避免一些錯誤的請求。