使用apiDoc書寫API文件規範

fxm547發表於2018-01-22

首發於fxm5547的部落格

詳細閱讀apiDoc官方文件

專案中apiDoc檔案結構

  • 整體結構

    圖片

  • apidoc.json

    圖片

  • common.php

    • 公共部分定義-許可權(apiPermission)
      • 定義
        圖片
      • 使用
        圖片
    • 公共部分定義-狀態碼分組(apiSuccess、apiError)
      • 定義
        圖片
      • 使用
        圖片
        圖片
    • 公共部分定義-錯誤響應(apiError、apiErrorExample)
      • 定義
        圖片
      • 使用
        圖片
  • define.php

    • 公共部分定義-api分組
    • 定義
      圖片
    • 使用
      圖片

介面具體apidoc定義

  • 介面最新定義在程式碼實現處,歷史版本定義在apidoc/history.php中。

  • 介面定義完整示例:

    圖片

  • @apiVersion

  • 目前只用到major和minor,patch始終為0。

  • @apiName

    • @api定義轉換而來: 如@api為:@api {put} /user/babies/:baby_id 修改寶寶資訊, 則@apiName為: @apiName put/user/babies/:baby_id, 則解析後的ID為;put_user_babies__baby_id(用於apidoc.json的order介面排序)。
  • @apiGroup

    • 介面分組,定義在apidoc/define.php,如@apiGroup babyGroup
  • @apiPermission

    • 介面許可權,定義在apidoc/common.php,許可權分為:
      • none:無需任何授權;
      • token:需要使用者登入授權,可通過header AuthorizationCookie HBSID傳遞;
      • admintoken:需要管理員登入授權,可通過header AuthorizationCookie HBCPSID傳遞;
      • token || admintoken:使用者登入授權或管理員登入授權都可以;
        圖片
      • sign:需要簽名,一般用於服務端相互呼叫,詳見 API HMAC-SHA1簽名
  • @apiDescription

    • 儘可能詳細說明介面的用途及相關邏輯,如 @apiDescription 使用手機號找回密碼的第一步,呼叫該介面先驗證使用者輸入的手機號是否已經繫結某個帳號,未繫結給出提示,已經繫結則傳送驗證碼、重置密碼
  • @apiParam

    • 準確定義資料型別;
    • 準確定義取值範圍,如{String{1..32}}{String{YYYY-mm-dd}}{String="0","1"}
    • 準確定義是否是可選引數,可選引數帶[],如@apiParam {String} [stage]
  • @apiError

    • 公共錯誤,直接使用apidoc/common.php中定義的錯誤,如@apiUse InvalidToken
    • NotFoundValidationError不允許使用公共定義錯誤(即不可使用@apiUse),需要準確定義具體錯誤,如:
      圖片
  • @apiSampleRequest

    • GET介面:不寫,預設使用apidoc.jsonsampleUrl自動組裝請求地址
    • 其他介面:@apiSampleRequest off,我們用Postman

介面分組

  • 一般按功能模組分組,一個分組對應一個或多個php檔案,每個php檔案只對應一個分組;
  • 所有許可權為admintoken的介面(不包括許可權為token || admintoken的介面),放在該介面模組的管理中心介面分組,admin.php檔案中;
  • 所有許可權為sign的介面(簡訊模組除外),放在該介面模組的內部服務介面分組,internal.php檔案中;

介面版本管理

  • 同一個大版本下,只有當你的介面變更會影響到呼叫者時,才需要升級minor版本(如果被修改的版本還沒有呼叫者,自然無需升級版本),如從1.0.0升至1.1.0。

  • 升級版本時,需要將舊的apidoc註釋拷貝至apidoc/history.php,並升級apiVersion

    圖片

  • 升級介面大版本時,拷貝舊版本檔案目錄作為新版本並升級介面版本(如拷貝v1,重新命名為v2,修改新版本中所有介面為2.0.0版本)。

  • 呼叫者在檢視文件時,通過版本比較,可以輕易知曉新版本做了哪些變更。

    圖片
    圖片

  • 過期的介面,標記@apiDeprecated,說明應該使用哪些介面替代:

    • 在過期介面apidoc註釋前增加:
      圖片
    • 文件顯示:
      圖片

文件生成

  • DEVQA伺服器配置了定時任務(crontab -l檢視),每隔1分鐘重新生成文件。

    圖片

  • 新建介面模組時,

    • 需要修改定時任務crontab -e
    • 在apidoc模板中新增導航vim /usr/lib/node_modules/apidoc/template/index.html
      圖片

api測試注意要點

  • 是否嚴格遵循本規範定義介面;
  • 錯誤處理周全,不遺漏任何的錯誤,錯誤的message必須簡潔明瞭並給予指引,如“開團時間為1-5天,請重新輸入”;
  • 介面許可權控制是否OK,是否存在安全隱患;
  • 介面文件和實現是否完全一致; -請求引數的名稱、型別、是否可選、描述都必須準確和見名知意;
  • 返回引數的名稱、型別、描述都必須準確詳盡。

修改後的多模組模板

點選下載apidoc-template.zip

相關文章