API 接口設計規范


概述

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

規范是死的,人是活的,希望自己定的規范,不要被打臉。

路由命名規范

動作 前綴 備注
獲取 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、加密字段等。

Body

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

公共參數

APP 端請求

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

WEB 端請求

參數 說明 備注
appKey 授權Key 字符串

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

安全規范

敏感參數加密處理

登錄密碼、支付密碼,需加密后傳輸,建議使用非對稱加密

其他規范

  • 參數命名規范 建議使用駝峰命名,首字母小寫。
  • 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. 調用接口前,先獲取一個全局唯一的令牌(Token)
  2. 調用接口時,將 Token 放到 Header 頭中
  3. 解析 Header 頭,驗證是否為有效 Token,無效直接返回失敗
  4. 完成業務邏輯后,將業務結果與 Token 進行關聯存儲,設置失效時間
  5. 重試時不要重新獲取 Token,用要上次的 Token

小結

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

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

你們接口的輸入輸出 Key,命名是用駝峰還是下划線?歡迎留言。

推薦閱讀


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM