java-api-doc
勵(lì)志做java屆最好的文檔生成工具,自動(dòng)解析代碼生成api接口文檔,前后臺(tái)分離開發(fā)的福音,零代碼入侵,零注釋入侵
https://github.com/liupeng328/java-api-doc/tree/master?tdsourcetag=s_pctim_aiomsg
https://gitee.com/lovepeng/apidoc2
解決的痛點(diǎn)
通常的文檔生成工具,都需要開發(fā)人員編寫注解或注釋,代碼入侵太強(qiáng),而且費(fèi)事,我希望工具自動(dòng)解析代碼,然后根據(jù)代碼生成文檔,如果有注釋就自動(dòng)掃描注釋,沒有就以代碼為準(zhǔn),生成的文檔如果有不合理的地方,可以在頁面進(jìn)行修改,利用web頁面的表單編輯修改要比在代碼里處理方便直觀。
頁面布局
如下圖(圖片拼接左側(cè)菜單可能模糊或重影,湊合看):

左側(cè)為菜單,菜單分為兩級(jí),一級(jí)表示模塊,二級(jí)表示接口信息,一級(jí)菜單就是你定義的模塊名稱,二級(jí)菜單是對(duì)外接口的方法名,如果你的方法上有注釋,這里會(huì)自動(dòng)解析方法的注釋作為二級(jí)菜單。菜單拖拽可以排序。
右側(cè)為接口詳細(xì)信息,主要包括:模擬測試功能,接口詳細(xì)信息說明,請(qǐng)求參數(shù)說明,響應(yīng)參數(shù)說明,參數(shù)的詳細(xì)信息也是默認(rèn)解析代碼,如有注釋優(yōu)先展示注釋,支持對(duì)象的泛型,多維數(shù)組,自嵌套,互相嵌套,并根據(jù)參數(shù)信息生成一個(gè)演示的例子表明接口的使用方式
頁面操作
- 左側(cè)二級(jí)菜單可以雙擊修改,失去焦點(diǎn)時(shí)自動(dòng)保存

- 左側(cè)一級(jí),二級(jí)菜單可以拖拽排序

- 所有帶 “編輯”按鈕的地方都可以編輯保存,textarea編輯時(shí)可以帶回車換行,自動(dòng)記錄你的文本格式


- 請(qǐng)求參數(shù)和響應(yīng)參數(shù),本身是一個(gè)樹結(jié)構(gòu),所有編輯的時(shí)候跟普通的編輯樹一樣操做,包括添加一級(jí)數(shù)據(jù),添加子數(shù)據(jù),修改,刪除,保存等等,鼠標(biāo)移入會(huì)有提示,如下圖

5.如果需要給接口提供默認(rèn)值,修改參數(shù)的默認(rèn)值后,會(huì)自動(dòng)重構(gòu)json參數(shù),告訴你接口怎么使用,清晰明了

- 工具提供自動(dòng)化測試,支持默認(rèn)數(shù)據(jù)填充,前后臺(tái)都拋棄PostMan等第三方測試工具吧

代碼使用
- 引入jar包(暫未上傳maven,近期上傳maven)
<!--Maven jar包引入方式-->
<dependency>
<groupId>com.apidoc</groupId>
<artifactId>apidoc</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/apidoc-1.0.0.jar</systemPath>
</dependency>
</dependencies>
- 修改配置文件
#是否開啟apidoc
apidoc=true
# datasource 數(shù)據(jù)源配置,目前僅支持mysql,如果需要其他數(shù)據(jù)庫,請(qǐng)自行修改com.apidoc.dao數(shù)據(jù)庫操作層的sql,或者聯(lián)系我修改(需要付費(fèi))
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/apidoc?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=UTF-8&characterSetResults=UTF-8&allowMultiQueries=true&&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
- 增加springboot快速配置類
/**
* 配置類
* 讓springboot自動(dòng)掃描并管理apidoc工具下的所有class
*/
@Configuration
@EnableTransactionManagement//啟動(dòng)事務(wù)
@ComponentScan("com.apidoc")//掃描組件類
@MapperScan("com.apidoc.dao")//掃描數(shù)據(jù)庫操作層的類
@EntityScan("com.apidoc.entity")//掃描實(shí)體類
public class ApiDocConfig {
@Bean
public ApiDocService generator() {
//所有的常量都在Const類下,需要修改常量的在這里配置即可
//配置代碼的絕對(duì)路徑,方便掃描代碼的注釋,因?yàn)樽⑨尵幾g之后就被jvm剔除了,只能掃描源碼,不配置則不掃描注釋
//默認(rèn)路徑為{項(xiàng)目路徑}+src/main/java
Const.codePath = Const.projectPath + "apidoc-demo" + File.separator + "src" + File.separator + "main" + File.separator + "java" + File.separator;
return new ApiDocService();
}
}
- 在你的controller類上增加注解
@Api("這里寫模塊名稱"),這里一個(gè)@Api對(duì)應(yīng)頁面的一個(gè)一級(jí)菜單,即模塊,模塊可以由多個(gè)類組成,只需設(shè)置每個(gè)類的模塊名稱一樣,程序會(huì)自動(dòng)把模塊名稱一樣的class組裝成同一模塊。 - 瀏覽器訪問地址
http://localhost:8080/apidoc/index.html?packageName=com.demo即可。如果一個(gè)項(xiàng)目有多個(gè)文檔,比如前端頁面一個(gè)文檔,后臺(tái)管理一個(gè)文檔等等,可以用java的包區(qū)分。一個(gè)包代表一個(gè)文檔,不同的文檔使用不同的包即可。即url后的參數(shù):packageName=你的包名
特別說明&&高級(jí)模式
目前僅支持SpringMVC/SpringBoot+Mybatis+MySQL技術(shù)架構(gòu),如果您使用其他技術(shù),可以下載我的源碼稍作修改,或聯(lián)系我修改(需要付費(fèi))
工具是標(biāo)準(zhǔn)的前后臺(tái)分離開發(fā)架構(gòu),后臺(tái)為MVC開發(fā)模式,如果你的技術(shù)跟我使用的不一樣選擇性替換相應(yīng)的代碼層即可。
- 路由控制層:替換這一個(gè)類即可com.apidoc.controller.ApiDocController
- 數(shù)據(jù)庫操作層:修改這個(gè)包的sql即可com.apidoc.dao
- 頁面中所有的常量都可以配置,包括路由等等,具體見常量類com.apidoc.common.Const
- 嫌棄前端頁面丑陋:apidoc/front這個(gè)路徑下是我的所有前端代碼,我才用的是最新版的angualr做的,你可以選擇你喜歡的任何前端技術(shù)重構(gòu)自己的頁面,然后對(duì)接后臺(tái)接口即可??偣踩缦陆涌冢捎脴?biāo)準(zhǔn)的RESTful風(fēng)格
//api接口
export const apis={
isOpenApiDoc:"/apidoc/isOpenApiDoc",
info:"/apidoc/info",
modules:"/apidoc/modules",
actions:"/apidoc/actions",
detail:"/apidoc/detail",
updateInfo: "/apidoc/updateInfo",
updateAction: "/apidoc/updateAction",
updateActionDescription: "/apidoc/updateActionDescription",
updateDetail: "/apidoc/updateDetail",
updateModulesSort: "/apidoc/updateModulesSort",
updateActionsSort: "/apidoc/updateActionsSort",
addParam:"/apidoc/addParam",
updateParam:"/apidoc/updateParam",
deleteParam:"/apidoc/deleteParam",
};