背景
在傳統的公司裡,傳統的spring項目裡,會出現接口文檔丢失,遺漏,謬誤的情況。那麼有沒有什麼辦法能一鍵生成準确的接口文檔?目前比較常用的管理工具是swagger,但是存在一個問題是說老的代碼很多沒有采用swagger注解的方式,肉眼可見在傳統企業的數字化轉型中會有很多這樣的系統,是以想開發一個小工具,基于代碼,不需要任何侵入性生成接口文檔。
相關工具
swagger
swagger 通過注解接口生成文檔,包括接口名,請求方法,參數,傳回資訊等。但是老系統代碼改造,存在一定困難。springfox支援如下注解:
詳見 Springfox Reference Documentation
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI2EzX4xSZz91ZsAzNfRHLGZkRGZkRfJ3bs92YsAjMfVmepNHLsVXS2wWdJZDb1lkNsVXS2U3VyVTQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL4EDN3AjM0ETM3ETOwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
javaparser
javaparser将java源碼解析為一棵文法樹,然後基于這棵樹對java代碼進行分析和修改的工具。其可以認為是一個靜态的代碼分析工具,常用于做代碼規範檢查,代碼格式化,java代碼分析等。依賴于AST文法樹,可以用來作為接口文檔自動化工具。業内很多工具依賴于javaparser,比較知名的有JApiDocs, 對比與swagger,主要優勢為:
無須swagger中必須的注解,核心依賴于較為基礎的javadoc,形如下圖格式即可生成文檔。
如上圖可以看出,還是需要依賴@param指出參數類型,雖然通常來說IDEA會幫我們自動完成該步驟,但是還有可能未辨別@param。
想要達成的目标
能否完全不依賴新加的注解,即無須對代碼進行任何改動,生成準确的接口文檔。最終達成如下圖效果(已達成)
技術思路
- 設計接口的資料結構
- 基于spring IOC機制擷取所有接口清單
- 處理接口URI,type,name等基礎資訊
- 基于java reflection 處理接口入參,分為query參數,body參數
- 基于java reflection 處理接口出參
- 處理出參的泛型場景
- 基于模闆引擎生成離線markdown格式接口文檔
此下為目前還未實作的思路
- 依賴javaparser抓取注釋内容