markdown 寫 api 系統
空氣越來越越糟糕,不得不上路了
在我還是個實習生的時候,我就困擾,這個世界上難道沒有寫完api文件之後,這個api文件自動幫你生成mock的測試資料,造福前後端的嗎? 知道2年後,我看到了這個工具 blue print api ,這是官網 ofollow,noindex">apiblueprint.org/documentati…
總體感受一遍
把你的文件寫成這個樣子,大體上是markdown
# GroupUserController ## 使用者登陸 [POST /users/login] + Request (application/json) { "login": "tester",(string,required) -使用者名稱或者手機號 ,必填 "password": "12346" (number,required) 密碼 ,必填 } + Response 200 (application/json) { "token": "fesrglkthtgrtgktlttthy" (string)使用者令牌 } + Exception ParameterException("Invalid user name or password.")- 400, 使用者名稱/電話/電郵/密碼不對 UserAccountException("User account suspended.")- 401, 帳戶已被暫停 UserAccountException("User account terminated.")- 401, 帳戶已被刪除 複製程式碼
之後 自動生成html 檔案,長這個樣子

mock 測試資料功能,長這個樣子

開始操作
前提條件
- node 安裝
- vscode編輯器
node 安裝
下載安裝 : nodejs.org/dist/v10.13…
vscode編輯器
下載安裝: vscode.cdn.azure.cn/stable/5f24…
下載api文件倉庫 demo
##你還需要aglio, drakov aglio 用來生成 把markdown 生成 html drakov 用來生成 把markdown 生成 mock server
根據 aglio drakov express寫一個 服務系統
index.js
var hercule = require('hercule') var utils = require('./utils/utils') var fs = require('fs') function getFileStr() { var _files = fs.readdirSync("./controllers"); _files = utils.MyMap(_files, item => item = "./controllers/" + item) return _files } function getObjects() { var _files = fs.readdirSync("./objects"); _files = utils.MyMap(_files, item => item = "./objects/" + item) _files = utils.mergeArray(["./z_dataStructures.apib"], _files) return _files } function getHeaderFile() { return ["./a_header.apib"] } function set_IndexApi() { var _files = utils.mergeArray(getHeaderFile(), getFileStr()) _files = utils.mergeArray(_files, getObjects()) var fileStr = "" for (var i = 0; i < _files.length; i++) { var file = _files[i] var _content = `:[${file.slice(2, file.length)}](${file})\n\n` fileStr += _content } fs.writeFileSync("./_index.apib", fileStr) } function changeEvent() { set_IndexApi() hercule.transcludeFile("./_index.apib", (err, output) => { if (err) console.log(err) // console.log(output); fs.writeFileSync("./index.apib", output) var aglio = require('aglio') aglio.render(fs.readFileSync('./index.apib', 'utf-8'), {}, function (err, html, warnings) { // if (err) return console.log(err); // if (warnings) console.log(warnings); fs.writeFileSync("./views/index.html", html) }); }); } var chokidar = require('chokidar'); var watcher = chokidar.watch(['controllers', "objects"], { ignored: /(^|[\/\\])\../, persistent: true }); watcher.on('change', path => { console.log(`File ${path} has been changed`) changeEvent() }) changeEvent() console.log("index.html create done"); var express = require('express') var app = express() app.use(express.static('./views')) app.listen("9000") console.log("html in9000") 複製程式碼
根據步驟執行程式
cd ./專案根目錄 npm i npm i drakov -g //開啟html文件 開啟瀏覽器 localhost:9000 npm run start //開啟mock server開啟postman localhost:9002 測試 npm run mock 複製程式碼
編輯
在 ./api資料夾下面新建新的 *.apib 檔案 根據apiblueprint 語法 編輯檔案,開啟localhost:9000檢視效果 複製程式碼