API 接口設計規範

概述

這篇文章分享 API 接口設計規範,目的是提供給研發人員作參考。android

規範是死的,人是活的,但願本身定的規範,不要被打臉。ios

路由命名規範

動做 前綴 備註
獲取 get get{XXX}
獲取 get get{XXX}List
新增 add add{XXX}
修改 update update{XXX}
保存 save save{XXX}
刪除 delete delete{XXX}
上傳 upload upload{XXX}
發送 send send{XXX}

請求方式

請求方式 描述
GET 獲取數據
POST 新增數據
PUT 更新數據
DELETE 刪除數據

請求參數

Query

url?後面的參數,存放請求接口的參數數據。後端

請求頭,存放公共參數、requestId、token、加密字段等。api

Body

Body 體,存放請求接口的參數數據。安全

公共參數

APP 端請求網絡

參數 說明 備註
network 網絡 WIFI、4G
operator 運營商 中國聯通/移動
platform 平臺 iOS、Android
system 系統 ios 13.三、android 9
device 設備型號 iPhone XR、小米9
udid 設備惟一標示
apiVersion API 版本號 v1.一、v1.2

WEB 端請求app

參數 說明 備註
appKey 受權Key 字符串

調用方需向服務方申請 appKey(請求時使用) 和 secretKey(加密時使用)。tcp

安全規範

敏感參數加密處理加密

登陸密碼、支付密碼,需加密後傳輸,建議使用非對稱加密url

其餘規範

  • 參數命名規範 建議使用駝峯命名,首字母小寫。
  • requestId 建議攜帶惟一標示追蹤問題。

返回參數

參數 類型 說明 備註
code Number 結果碼 成功=1
失敗=-1
未登陸=401
無權限=403
showMsg String 顯示信息 系統繁忙,稍後重試
errorMsg String 錯誤信息 便於研發定位問題
data Object 數據 JSON 格式

如有分頁數據返回的,格式以下

{
    "code": 1,
    "showMsg": "success",
    "errorMsg": "",
    "data": {
        "list": [],
        "pagination": {
            "total": 100,
            "currentPage": 1,
            "prePageCount": 10
        }
    }
}

安全規範

敏感數據脫敏處理

用戶手機號、用戶郵箱、身份證號、支付帳號、郵寄地址等要進行脫敏,部分數據加 * 號處理。

其餘規範

  • 屬性名命名時,建議使用駝峯命名,首字母小寫。
  • 屬性值爲空時,嚴格按類型返回默認值。
  • 金額類型/時間日期類型的屬性值,若是僅用來顯示,建議後端返回能夠顯示的字符串。
  • 業務邏輯的狀態碼和對應的文案,建議後端二者都返回。
  • 調用方不須要的屬性,不要返回。

簽名設計

簽名驗證沒有肯定的規範,本身制定就行,能夠選擇使用 對稱加密非對稱加密單向散列加密 等,分享下原來寫的簽名驗證,供參考。

日誌平臺設計

日誌平臺有利於故障定位和日誌統計分析。

日誌平臺的搭建可使用的是 ELK 組件,使用 Logstash 進行收集日誌文件,使用 Elasticsearch 引擎進行搜索分析,最終在 Kibana 平臺展現出來。

冪等性設計

咱們沒法保證接口的每一次調用都是有返回結果的,要考慮到出現網絡異常的狀況。

舉個例子,訂單建立時,咱們須要去減庫存,這時接口發生了超時,調用方進行了重試,這時是否會多扣一次庫存?

解決這類問題有 2 種方案:

1、服務方提供相應的查詢接口,調用方在請求超時後進行查詢,若是查到了,表示請求處理成功了,沒查到就走失敗流程。

2、調用方只管重試,服務方保證一次和屢次的請求結果是同樣的。

對於第二種方案,就須要服務方的接口支持冪等性。

大體設計思路是這樣的:

  1. 調用接口前,先獲取一個全局惟一的令牌(Token)
  2. 調用接口時,將 Token 放到 Header 頭中
  3. 解析 Header 頭,驗證是否爲有效 Token,無效直接返回失敗
  4. 完成業務邏輯後,將業務結果與 Token 進行關聯存儲,設置失效時間
  5. 重試時不要從新獲取 Token,用要上次的 Token

小結

限流設計、熔斷設計、降級設計,這些就很少說了,由於大部分都用不到,當用上了基本上也都在網關中加這些功能。

暫時就想到這麼多,規範這東西不是一成不變的,發現有不妥的及時調整吧。

大家接口的輸入輸出 Key,命名是用駝峯仍是下劃線?歡迎留言。

推薦閱讀

相關文章
相關標籤/搜索