【ApiDoc】自動化匯出介面文件之HTML/Markdown/PDF實踐
本文主要參考
最近專案開始介面測試,需要提供一份最新、最全的介面文件,也許你覺得沒什麼,但是如果我要求每個介面文件都要像下面的例子一樣:
介面標題
介面描述
POST /request_api_url
請求頭引數列表:
名稱 | 型別 | 必填 | 說明 |
---|---|---|---|
header_param_1 | string | yes | 引數描述 |
header_param_2 | string | yes | 引數描述 |
請求體引數列表:
名稱 | 型別 | 必填 | 說明 |
---|---|---|---|
body_param_1 | string | yes | 引數描述 |
body_param_2 | string | yes | 引數描述 預設值: test
|
body_param_3 | int | no | 引數描述 預設值: 1 可選值: 0 ,1 , |
請求示例:
curl -i -X POST -d body_param_1=value1&body_param_2=value2 http://localhost/request_api_url
請求引數示例1:
{
"body_param_1":"value1",
}
請求引數示例2:
{
"body_param_1":"value1",
"body_param_2":"value2",
"body_param_3":1
}
請求成功示例1:
{
"status": "success",
"data": {
"key1": "value1",
}
}
請求成功示例2:
{
"status": "success",
"data": {
"key1": "value1",
"key2": "value2",
"key3": "key3",
"update_time": 1509431405,
"create_time": 1509431405
}
}
請求錯誤示例1:
{
"status": "failure",
"error_message": {
"error_code":403
...
}
}
請求錯誤示例2:
{
"status": "failure",
"error_message": {
"error_code":404
...
}
}
怎麼樣?小夥子,你有沒有感受到一絲絲的繁瑣?
如果我還告訴你我不僅需要PDF版的,我還需要Markdown版的,還可能需要HTML版的,怎麼樣?小夥子,你有沒有感受到一絲絲的絕望?
如果我還告訴你現在需要整理的介面有160多個...
![2147642-3cf1ad231b864f47.png](https://i.iter01.com/images/fbdc8c2c06a1f70bc31d07bb4bf6c3de0bd2ee49139294e061ab505cef5ea7bf.png)
最開始考慮肩扛人挑的方式梳理文件的我在整理了半天之後我就瘋了,程式碼註釋的不完整,需要人工核對實現邏輯,介面請求結果需要一個個跑請求來填寫,這些本來在介面編寫或者介面修改時就可以完成的內容,現在累加起來就像一個巨無霸工程。更可怕的是即使這次介面文件梳理完成了,等到若干個月之後,介面文件需要更新,然而你還需要這樣一個個去核對哪些介面做了修改,更新文件!!!
![2147642-487ab2e5b4d2c950.png](https://i.iter01.com/images/e41dc3d4c5a5742e220d8c790a7e38a62a1658a6cca28c792ef0600f8122b911.png)
面對這麼痛的痛點,幸運的是,早就有大神為我們鋪出了一條陽關大道——apidoc
一、apidoc簡介
apidoc是一個可以直接由原始碼中滴注釋生成api介面文件的自動化文件匯出工具,並且支援目前流行的幾乎所有格式的註釋風格。該工具的原始碼目前託管於github(https://github.com/apidoc/apidoc),通過對該工具的使用,寡人目前總結的優點主要有以下幾點:
① 文件生成依賴註釋,對原始碼幾乎沒有侵入;
② 規範化的註釋利於協同開發,並且如果介面有變動,更新註釋便等同於更新了介面文件;
③ 不同版本介面文件對比功能,方便對同一介面的不同版本進行比較檢視。
說的這幾點其實最主要的還是註釋和文件的同步更新,相信幾乎所有的開發者在寫完程式碼後寧願去更新註釋也不願意去更新介面文件。
二、自動化匯出HTML介面文件
通過使用apidoc工具便可以直接匯出HTML介面文件:
2.1 安裝apidoc
apidoc通過npm安裝,所以您需要先安裝nodejs或者npm工具,安裝完npm之後執行一下命令:
npm install apidoc -g
您也可以在docker環境中安裝,此處不再贅述。
2.2 程式碼註釋遵循apidoc風格
既然要使用apidoc匯出文件,那自然要讓apidoc認識你的註釋,apidoc註釋規範可以參考官方文件(http://apidocjs.com),寡人也對官方的文件做了簡要翻譯註釋(【ApiDoc】官方文件(翻譯)),供大家參考。
2.3 執行apidoc 匯出HTML文件
執行apidoc前需要先新增一個配置檔案apidoc.json,該配置檔案的內容官方文件裡有介紹,大致如下:
{
"name": "介面名稱",
"version": "0.1.0",
"description": "Api介面文件",
"url" : "http://qa.api.test.com/",
"sampleUrl": "http://qa.api.test.com/",
"template": {
"withCompare": true,
"withGenerator": true
}
}
apidoc主要命令引數如下:
引數 | 描述 |
---|---|
-f --file-filters | 指定讀取檔案的檔名過濾正規表示式(可指定多個) 例如: apidoc -f ".*\\.js$" -f ".*\\.ts$" 意為只讀取字尾名為js和ts的檔案預設值: .clj .cls .coffee .cpp .cs .dart .erl .exs? .go .groovy .ino? .java .js .jsx .kt .litcoffee lua .p .php? .pl .pm .py .rb .scala .ts .vue
|
-e --exclude-filters | 指定不讀取的檔名過濾正規表示式(可指定多個) 例如: apidoc -e ".*\\.js$" 意為不讀取字尾名為js的檔案預設: ''
|
-i, --input | 指定讀取原始檔的目錄 例如: apidoc -i myapp/ 意為讀取myapp/ 目錄下面的原始檔預設值: ./
|
-o, --output | 指定輸出文件的目錄 例如: apidoc -o doc/ 意為輸出文件到doc 目錄下預設值: ./doc/
|
-t, --template | 指定輸出的模板檔案 例如: apidoc -t mytemplate/ 預設: path.join(__dirname, '../template/')(使用預設模板)
|
-c, --config | 指定包含配置檔案(apidoc.json)的目錄 例如: apidoc -c config/ 預設: ./
|
-p, --private | 輸出的文件中是否包含私有api 例如: apidoc -p true 預設: false
|
-v, --verbose | 是否輸出詳細的debug資訊 例如: apidoc -v true 預設: false
|
-h, --help | 檢視幫助文件 |
通常情況下只需要指定原始檔目錄、輸出檔案目錄、配置檔案目錄即可:
apidoc -i source_dir/ -c config_dir/ -o output_dir/
執行完成後,您便可以在output_dir目錄下看到生成的html檔案,點選index.html即可在瀏覽器檢視介面文件。
三、自動化匯出Markdown介面文件
面對如此強大的apidoc工具,我一度以為可以通過修改輸出模板檔案來匯出markdown檔案,但通過檢視當前版本(0.17.6)原始碼,我發現apidoc在生成輸出檔案的時候僅僅是將模板檔案拷貝到輸出目錄下,並沒有像我想象的那樣根據模板檔案生成輸出文件,apidoc所做的工作主要是通過讀取原始碼中的註釋,解析生成一個api_data.json
檔案,這個檔案裡面包含了所有從註釋中提取粗來的介面資料。所以接下來的工作便是根據這個api_data.json
檔案生成markdown檔案即可。
幸運的是,GitHub上已經有好心人為我們做了這個工作。
3.1 安裝apidoc-markdown
apidoc-markdown是一個根據apidoc輸出檔案直接生成markdown檔案的工具。首先我們需要安裝該工具:
npm install apidoc-markdown -g
3.2 匯出Markdown文件
apidoc-markdown主要命令引數如下:
引數 | 描述 |
---|---|
-p, --path | 指定apidoc生成的文件目錄 |
-o, --output | 指定輸出的markdown檔案路徑(包含檔名) 例如: apidoc-markdown -o output_dir/markdown_name.md
|
-t, --template | 指定生成markdown檔案的模板檔案(EJS模板檔案) 預設: 使用工具自帶的模板檔案
|
通常情況下,我們需要允許下面這樣的命令:
apidoc-markdown -p apidoc_dir -o doc/doc_markdown.md
這樣我們便完成了介面文件從HTML到Markdown檔案的轉化。
3.3 新增自定義的markdown模板檔案
由於該工具自帶的markdown模板並不是非常完美,對於api_data.json
檔案中的欄位並不是完全解析,所以你需要自己分析api_data.json
中的資料介面,完善markdown模板檔案。該檔案是EJS模板檔案,語法比較簡單,有需要的童鞋可以自行Google,另外您也可以下載該工具的原始碼,修改裡面自帶的模板檔案也比較方便。
四、自動化匯出PDF介面文件
既然markdown檔案都有了,那麼匯出PDF檔案不是更簡單了。在這裡,寡人推薦一個灰常好用的markdown離線編輯工具——Typora
Typora是一款離線輕量Markdown編輯器,該工具非常簡潔、易用(目前處於測試階段,可免費使用)。具體如何簡單、易用在這裡就不做贅述了,大家可以自行下載體驗。其實最主要原因還是因為這個編輯器的匯出PDF檔案功能,該編輯器匯出的pdf檔案會根據markdown檔案的目錄生成pdf的導航目錄,這一點對於文件檔案來說忒重要了!!!
五、總結
好了,至此任務基本上完成了,以後麻麻再也不用擔心我寫介面文件啦!
![2147642-aba494a765ed7e9b.png](https://i.iter01.com/images/9ea1563ef513bc6f726b205a41917064f53a52e34ec22133ddd0d8526694343a.png)
注:文中如有任何錯誤,請各位批評指正!
相關文章
- 使用【APIDOC】生成JavaWeb的API文件(HTML,MarkDown,PDF)APIJavaWebHTML
- 【實戰】通過 JS 將 HTML 匯出為 PDF 文件JSHTML
- 利用apidoc自動生成model文件API
- mindmaster匯出markdown文件AST
- 如何把markdown檔案匯出為pdf
- 介面自動化測試工程實踐分享
- 介面自動化實戰之框架搭建框架
- 「乾貨」介面自動化實踐:高效智慧介面場景自動巡檢方案
- 使用vscode寫Markdown並且匯出為pdf(乾貨)VSCode
- 將Swagger2文件匯出為HTML或markdown等格式離線閱讀SwaggerHTML
- 介面自動化測試的最佳工程實踐(ApiTestEngine)API
- C# 將PDF文件轉換為Markdown文件C#
- php註釋生成介面文件 apidoc 安裝以及使用PHPAPI
- 介面自動化之介面整理(抓包)
- Vue框架下實現匯入匯出Excel、匯出PDFVue框架Excel
- NET 5.0 Swagger API 自動生成MarkDown文件SwaggerAPI
- 使用 VS Code + Markdown 編寫 PDF 文件
- Laravel-apidoc-generator 無法自動生成帶引數的 API 文件LaravelAPI
- 用Swagger2markup匯出介面文件Swagger
- 自動生成介面文件coreapiAPI
- DRF 自動生成介面文件
- freemark+dom4j實現自動化word匯出
- 一鍵實現自動化部署(灰度釋出)實踐
- markdown 文件標題樣式自動編號
- 使用apidoc文件神器,快速生成api文件API
- 自動化實踐篇丨教你逐步解析Selenium常用API介面API
- Java開發者的Python快速實戰指南:實用工具之PDF轉DOCX文件(視覺化介面)JavaPython視覺化
- PHP 匯出 PDFPHP
- 介面自動化之實現日誌記錄封裝封裝
- Excel模板匯出之動態匯出Excel
- vue 匯入.md檔案(markdown轉HTML)VueHTML
- API自動化測試實踐API
- 介面自動化測試實戰之智慧場景如何攻破
- CAD工具——匯出PDF
- 前端(vue)匯出pdf前端Vue
- 基於RestAssured實現介面自動化REST
- 沒有介面文件的情況下如何開展介面自動化測試?
- python介面自動化測試之介面資料依賴Python
- 介面自動化之引數動態生成替換