<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          還在用Swagger?試試這款零注解侵入的API文檔生成工具,跟Postman絕配!

          共 4923字,需瀏覽 10分鐘

           ·

          2021-11-04 03:45

          點擊關(guān)注公眾號,Java干貨及時送達

          前后端接口聯(lián)調(diào)需要API文檔,我們經(jīng)常會使用工具來生成。之前經(jīng)常使用Swagger來生成,最近發(fā)現(xiàn)一款好用的API文檔生成工具smart-doc, 它有著很多Swagger不具備的特點,推薦給大家。

          聊聊Swagger

          在我們使用Swagger的時候,經(jīng)常會需要用到它的注解,比如@Api@ApiOperation這些,Swagger通過它們來生成API文檔。比如下面的代碼:

          Swagger對代碼的入侵性比較強,有時候代碼注釋和注解中的內(nèi)容有點重復(fù)了。有沒有什么工具能實現(xiàn)零注解入侵,直接根據(jù)代碼注釋生成API文檔呢?smart-doc恰好是這種工具!

          smart-doc簡介

          smart-doc是一款A(yù)PI文檔生成工具,無需多余操作,只要你規(guī)范地寫好代碼注釋,就能生成API文檔。同時能直接生成Postman調(diào)試文件,一鍵導(dǎo)入Postman即可調(diào)試,非常好用!

          smart-doc具有如下優(yōu)點:

          生成API文檔

          接下來我們把smart-doc集成到SpringBoot項目中,體驗一下它的API文檔生成功能。

          • 首先我們需要在項目中添加smart-doc的Maven插件,可以發(fā)現(xiàn)smart-doc就是個插件,連依賴都不用添加,真正零入侵啊;
          <plugin>
          ????<groupId>com.github.shalousungroupId>
          ????<artifactId>smart-doc-maven-pluginartifactId>
          ????<version>2.2.8version>
          ????<configuration>
          ????????
          ????????<configFile>./src/main/resources/smart-doc.jsonconfigFile>
          ????????
          ????????<projectName>mall-tiny-smart-docprojectName>
          ????configuration>
          plugin>
          • 接下來在項目的resources目錄下,添加配置文件smart-doc.json,屬性說明直接參考注釋即可;
          {
          ??"serverUrl":?"http://localhost:8088",?//指定后端服務(wù)訪問地址
          ??"outPath":?"src/main/resources/static/doc",?//指定文檔的輸出路徑,生成到項目靜態(tài)文件目錄下,隨項目啟動可以查看
          ??"isStrict":?false,?//是否開啟嚴(yán)格模式
          ??"allInOne":?true,?//是否將文檔合并到一個文件中
          ??"createDebugPage":?false,?//是否創(chuàng)建可以測試的html頁面
          ??"packageFilters":?"com.macro.mall.tiny.controller.*",?//controller包過濾
          ??"style":"xt256",?//基于highlight.js的代碼高設(shè)置
          ??"projectName":?"mall-tiny-smart-doc",?//配置自己的項目名稱
          ??"showAuthor":false,?//是否顯示接口作者名稱
          ??"allInOneDocFileName":"index.html"?//自定義設(shè)置輸出文檔名稱
          }
          • 打開IDEA的Maven面板,雙擊smart-doc插件的smart-doc:html按鈕,即可生成API文檔;
          • 此時我們可以發(fā)現(xiàn),在項目的static/doc目錄下已經(jīng)生成如下文件;
          • 運行項目,訪問生成的API接口文檔,發(fā)現(xiàn)文檔非常詳細(xì),包括了請求參數(shù)和響應(yīng)結(jié)果的各種說明,訪問地址:http://localhost:8088/doc/index.html
          • 我們回過來看下實體類的代碼,可以發(fā)現(xiàn)我們只是規(guī)范地添加了字段注釋,生成文檔的時候就自動有了;
          public?class?PmsBrand?implements?Serializable?{
          ????/**
          ?????*?ID
          ?????*/

          ????private?Long?id;

          ????/**
          ?????*?名稱
          ?????*?@required
          ?????*/

          ????private?String?name;

          ????/**
          ?????*?首字母
          ?????*?@since?1.0
          ?????*/

          ????private?String?firstLetter;

          ????/**
          ?????*?排序
          ?????*/

          ????private?Integer?sort;

          ????/**
          ?????*?是否為品牌制造商(0,1)
          ?????*/

          ????private?Integer?factoryStatus;

          ????/**
          ?????*?顯示狀態(tài)(0,1)
          ?????*?@ignore
          ?????*/

          ????private?Integer?showStatus;

          ????/**
          ?????*?產(chǎn)品數(shù)量
          ?????*/

          ????private?Integer?productCount;

          ????/**
          ?????*?產(chǎn)品評論數(shù)量
          ?????*/

          ????private?Integer?productCommentCount;

          ????/**
          ?????*?品牌logo
          ?????*/

          ????private?String?logo;

          ????/**
          ?????*?專區(qū)大圖
          ?????*/

          ????private?String?bigPic;

          ????/**
          ?????*?品牌故事
          ?????*/

          ????private?String?brandStory;
          ????//省略getter、setter方法
          }
          • 再來看下Controller中代碼,我們同樣規(guī)范地在方法上添加了注釋,生成API文檔的時候也自動有了;
          /**
          ?*?商品品牌管理
          ?*/

          @Controller
          @RequestMapping("/brand")
          public?class?PmsBrandController?{
          ????@Autowired
          ????private?PmsBrandService?brandService;
          ????
          ????/**
          ?????*?分頁查詢品牌列表
          ?????*
          ?????*?@param?pageNum?頁碼
          ?????*?@param?pageSize?分頁大小
          ?????*/

          ????@RequestMapping(value?=?"/list",?method?=?RequestMethod.GET)
          ????@ResponseBody
          ????@PreAuthorize("hasRole('ADMIN')")
          ????public?CommonResult>?listBrand(@RequestParam(value?=?"pageNum",?defaultValue?=?"1")
          ????????????????????????????????????????????????????????????????Integer?pageNum,
          ????????????????????????????????????????????????????????@RequestParam(value?=?"pageSize",?defaultValue?=?"3")
          ????????????????????????????????????????????????????????????????Integer?pageSize)?{
          ????????List?brandList?=?brandService.listBrand(pageNum,?pageSize);
          ????????return?CommonResult.success(CommonPage.restPage(brandList));
          ????}
          }
          • 當(dāng)然smart-doc還提供了自定義注釋tag,用于增強文檔功能;

            • @ignore:生成文檔時是否要過濾該屬性;
            • @required:用于修飾接口請求參數(shù)是否必須;
            • @since:用于修飾接口中屬性添加的版本號。
          • 為了寫出優(yōu)雅的API文檔接口,我們經(jīng)常會對返回結(jié)果進行統(tǒng)一封裝,smart-doc也支持這樣的設(shè)置,在smart-doc.json中添加如下配置即可;

          {
          ??"responseBodyAdvice":{?//統(tǒng)一返回結(jié)果設(shè)置
          ????"className":"com.macro.mall.tiny.common.api.CommonResult"?//對應(yīng)封裝類
          ??}
          }
          • 我們也經(jīng)常會用枚舉類型來封裝狀態(tài)碼,在smart-doc.json中添加如下配置即可;
          {
          ??"errorCodeDictionaries":?[{?//錯誤碼列表設(shè)置
          ????"title":?"title",
          ????"enumClassName":?"com.macro.mall.tiny.common.api.ResultCode",?//錯誤碼枚舉類
          ????"codeField":?"code",?//錯誤碼對應(yīng)字段
          ????"descField":?"message"?//錯誤碼描述對應(yīng)字段
          ??}]
          }
          • 配置成功后,即可在API文檔中生成錯誤碼列表
          • 有時候我們也會想給某些接口添加自定義請求頭,比如給一些需要登錄的接口添加Authorization頭,在smart-doc.json中添加如下配置即可;
          {
          ??"requestHeaders":?[{?//請求頭設(shè)置
          ????"name":?"Authorization",?//請求頭名稱
          ????"type":?"string",?//請求頭類型
          ????"desc":?"token請求頭的值",?//請求頭描述
          ????"value":"token請求頭的值",?//請求頭的值
          ????"required":?false,?//是否必須
          ????"since":?"-",?//添加版本
          ????"pathPatterns":?"/brand/**",?//哪些路徑需要添加請求頭
          ????"excludePathPatterns":"/admin/login"?//哪些路徑不需要添加請求頭
          ??}]
          }
          • 配置成功后,在接口文檔中即可查看到自定義請求頭信息了。

          使用Postman測試接口

          我們使用Swagger生成文檔時候,是可以直接在上面測試接口的,而smart-doc的接口測試能力真的很弱,這也許是它擁抱Postman的原因吧,畢竟Postman是非常好用的接口測試工具,下面我們來結(jié)合Postman使用下!

          • smart-doc內(nèi)置了Postman的json生成插件,可以一鍵生成并導(dǎo)入到Postman中去,雙擊smart-doc:postman按鈕即可生成;
          • 此時將在項目的static/doc目錄下生成postman.json文件;
          • postman.json文件直接導(dǎo)入到Postman中即可使用;
          • 導(dǎo)入成功后,所有接口都將在Postman中顯示,這下我們可以愉快地測試接口了!

          總結(jié)

          smart-doc確實是一款好用的API文檔生成工具,尤其是它零注解侵入的特點。雖然它的接口測試能力有所不足,但是可以一鍵生成JSON文件并導(dǎo)入到Postman中去,使用起來也是非常方便的!

          參考資料

          官方文檔:https://gitee.com/smart-doc-team/smart-doc/wikis/HOME

          項目源碼地址

          https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-smart-doc


          1、致歉!抖音Semi Design承認(rèn)參考阿里Ant Design

          2、對比7種分布式事務(wù)方案,還是偏愛阿里開源的Seata,真香!

          3、Redis存儲結(jié)構(gòu)體信息,選hash還是string?

          4、掃盲 docker 常用命令

          5、最全分布式Session解決方案

          6、21 款 yyds 的 IDEA插件

          7、真香!用 IDEA 神器看源碼,效率真高!

          點分享

          點收藏

          點點贊

          點在看

          瀏覽 50
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人激情四射网 | 操操操逼逼逼视频网站 | 亚洲无码视频一区 | 无码人妻丰满熟妇精品区 | 在线人妻av|