最近大前端概念愈來愈火,本着學習的目的,寫了一個自動化解析API Blueprint
文檔的模板代碼生成工具,爲了提升開發效率,本工具使用nodejs
開發,vue.js
做爲可定製化的輸出模板的輔助,本項目娛樂爲主,但願能給你們提供一些思路,擴展下技術棧javascript
GitHub:github.com/free46000/A…html
npm install
命令,安裝依賴包,本過程當中在會有一些安裝 .NET Framework 2.0
的相關錯誤提示,能夠忽略node bin/www
命令,啓動服務器http://localhost:3000
便可訪問頁面,頁面中能夠自定義Api文檔Git地址,若是Api文檔沒有上傳Git,也能夠把Api文檔拷貝到頁面輸入框指定的路徑下,能夠自動識別,點擊生成按鈕,解析結果會展示在當前頁面中注意:源碼中是過濾了以.apib
結尾的文件列表,此處若是有須要能夠聯繫做者,修改成傳遞參數控制前端
DockerFile
貼出來,你們有須要能夠修改代碼後自行buildjson
數據結構vue.js
生成html
的模板代碼API Blueprint是一套基於markdown的API描述語言規範,基於此規範能夠方便的生成mock接口,這樣前端,移動端,後端能夠並行開發,好處多多,但願你們也多使用。 vue
Git.Clone
克隆API Blueprint文檔Repository.fetchAll
fetch到最新文檔Repository.mergeBranches
合併分支,源碼中是把develop分支代碼合併到master中,代碼邏輯在git_handler.js
中node
的fs
模塊,讀取文件列表,源碼中是過濾了下以.apib
結尾的文件列表,此處若是有須要能夠聯繫做者,修改成傳遞參數控制 drafter.parse
解析API Blueprint文檔,解析後的格式爲{
"element": "parseResult",
"content": [
{
"element": "category",
"meta": {
"classes": [
"api"
],
"title": ""
},
"content": [
{
"element": "category",
"meta": {
"classes": [
"resourceGroup"
],
"title": ""
},
"content": [
... ...
}複製代碼
apib_parser.js
中,解析以後的格式爲:[{
href:'',//請求路徑:/get/task/{taskid}
hrefName:'',//路徑對應name:GetTask
title:'',//請求標題:獲取任務
hrefVariables:[ //路徑對應Variable"content": "taskid"
{"element": "String","content": "post_id"}
],
subTitle:'',//請求標題:經過id獲取任務
tip:'',//相關提示
method:'',//請求類型 POST or GET ...
response:{},//響應實體{'taskId':1,'taskName':'任務'}
param:{}//請求參數taskId
}]複製代碼
{'taskId':1,'taskName':'任務'}
,nodejs
的服務端完成,通訊採用ajax
,取得數據後咱們把HttpTransaction中請求響應的json
數據轉換爲對生成實體類友好的結構,處理邏輯主要在to_bean.js
中,處理以後的格式爲:[{
className: className,//實體類中名字
fields: [{ //實體類中含有的屬性列表
name: taskName,
type: String
}],
importTypes: [{//須要import的類型列表
'java.util.List'
}]
}]複製代碼
vue.js
渲染html
代碼模板,代碼都在bean_template.html
中,目前寫了java實體類和Api接口類的模板,可自行擴展其餘模板。下面貼出一段實體類的模板代碼:<div id="bean" v-if="beans">
<div :id="bean.className" style="background: cornsilk">
<p>package com.bean.response;</p>
<p v-for="imp in bean.importTypes">import {{imp}};</p>
<p>public class {{ bean.className }} {</p>
<div v-for="field in bean.fields">
private {{field.type}} {{field.name}};
</div>
<div v-for="field in bean.fields">
public void set{{ firstToUpperCase(field.name) }}({{field.type}} {{ field.name }}) {<br>
this.{{field.name}} = {{field.name}};<br>
}<br><br>
public {{field.type}} get{{ firstToUpperCase(field.name) }}() {<br>
return this.{{field.name}};<br>
}<br><br>
</div>
<p>}</p>
</div>
</div>複製代碼
DockerFile
代碼: # 選擇image
FROM node:latest
# 建立源碼目錄並設置當前工做路徑
RUN mkdir -p /usr/app
WORKDIR /usr/app
# 拷貝源碼到目標路徑
COPY ./bin /usr/app/bin
COPY ./public /usr/app/public
COPY ./routes /usr/app/routes
COPY ./views /usr/app/views
COPY ./app.js /usr/app/app.js
COPY ./package.json /usr/app/package.json
RUN npm install .
CMD [ "node", "/usr/app/bin/www" ]複製代碼
目前代碼只是在html中進行輸出,原本計劃下一步在指定目錄生成類文件,可是有兩個問題沒有辦法很好解決,因此就暫時放棄了,一是實體類的命名;還有實體類去重,例如:任務列表和詳情接口一樣都會有任務的實體,自動化生成代碼會生成兩個類。 java
本項目主要是爲了熟悉NodeJS
vue
等前端開發知識,娛樂爲主,主要寫寫實現的思路,雖然寫的比較簡陋,可是裏面用了一些比較好的開源組件API Blueprint
nodegit
docker
等,很是值得學習,歡迎留言交流,但願能夠幫助到你們。node
最後請容許打個小廣告:做者開源了一個一個優雅的實現多類型的RecyclerView類庫 支持DataBinding Form表單錄入,Github地址:github.com/free46000/M…git