<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>

          再見丑陋的 SwaggerUI,這款A(yù)PI文檔生成神器界面更炫酷,逼格更高!

          共 4377字,需瀏覽 9分鐘

           ·

          2022-02-14 06:19

          往期熱門文章:

          1、員工春節(jié)加班猝死!反轉(zhuǎn)了,B站深夜發(fā)長文回應(yīng)!
          2、1 個月崩 3 次!盤點一下 2021 年的 10 個宕機名場面
          3這類視頻遭破解,大量上傳B站,行為惡劣!
          4、滴滴程序員被親戚鄙視:年薪八十萬還不如二本教書的...
          5、IT界驚現(xiàn)文豪!華為領(lǐng)導(dǎo)及阿里P10遭吐槽

          一般在使用 Spring Boot 開發(fā)前后端分離項目的時候,都會用到 Swagger。Swagger 是一個規(guī)范和完整的框架,用于生成、描述、調(diào)試和可視化 RESTful 風(fēng)格的 Web ?API 服務(wù)框架。
          但隨著系統(tǒng)功能的不斷增加,接口數(shù)量的爆炸式增長,Swagger 的使用體驗就會變得越來越差,比如請求參數(shù)為 JSON 的時候沒辦法格式化,返回結(jié)果沒辦法折疊,還有就是沒有提供搜索功能。
          剛好最近發(fā)現(xiàn) Knife4j 彌補了這些不足,賦予了 Swagger 更強的生命力,于是就來給大家安利一波。

          一、關(guān)于 Knife4j

          Knife4j 的前身是 swagger-bootstrap-ui,是 springfox-swagger-ui 的增強 UI 實現(xiàn)。swagger-bootstrap-ui 采用的是前端 UI 混合后端 Java 代碼的打包方式,在微服務(wù)的場景下顯得非常臃腫,改良后的 Knife4j 更加小巧、輕量,并且功能更加強大。
          springfox-swagger-ui 的界面長這個樣子,說實話,確實略顯丑陋。
          swagger-bootstrap-ui 增強后的樣子長下面這樣。單純從直觀體驗上來看,確實增強了。
          改良后的 Knife4j 不僅在界面上更加優(yōu)雅、炫酷,功能上也更加強大:后端 Java 代碼和前端 UI 模塊分離了出來,在微服務(wù)場景下更加靈活;更提供了專注于 Swagger 的增強解決方案。
          官方文檔:
          https://doc.xiaominfo.com/knife4j/documentation/
          碼云地址:
          https://gitee.com/xiaoym/knife4j
          示例地址:
          https://gitee.com/xiaoym/swagger-bootstrap-ui-demo

          二、整合 Swagger

          為了對比 Knife4j 和 Swagger,我們先來整合體驗一把 Swagger。
          第一步,在 pom.xml 中添加 springfox 的官方 Swagger 依賴:

          ????io.springfox
          ????springfox-boot-starter
          ????3.0.0

          第二步,添加 Swagger 的 Java 配置,只需要配置基本的 API 信息和需要掃描的類路徑即可。
          @Configuration
          public?class?SwaggerConfig?{
          ????@Bean
          ????public?Docket?docket()?{
          ????????Docket?docket?=?new?Docket(DocumentationType.OAS_30)
          ????????????????.apiInfo(apiInfo()).enable(true)
          ????????????????.select()
          ????????????????//apis:?添加swagger接口提取范圍
          ????????????????.apis(RequestHandlerSelectors.basePackage("com.codingmore.controller"))
          ????????????????.paths(PathSelectors.any())
          ????????????????.build();

          ????????return?docket;
          ????}

          ????private?ApiInfo?apiInfo()?{
          ????????return?new?ApiInfoBuilder()
          ????????????????.title("編程貓學(xué)習(xí)網(wǎng)站的?admin?管理端?API")
          ????????????????.description("codingmore")
          ????????????????.contact(new?Contact("沉默王二&石磊",?"https://tobebetterjavaer.com",?"[email protected]"))
          ????????????????.version("1.0")
          ????????????????.build();
          ????}
          }
          第二步,訪問 API 文檔,訪問地址如下所示:
          http://localhost:9002/swagger-ui/
          在項目路徑后面添加上 swagger-ui 就可以了。
          在 Controller 類中,可以看到常見的 Swagger 注解 @Api 和 @ApiOperation:
          @Controller
          @Api(tags?=?"文章?")
          @RequestMapping("/posts")
          public?class?PostsController?{
          ????@RequestMapping(value?=?"/delete",?method?=?RequestMethod.GET)
          ????@ResponseBody
          ????@ApiOperation("刪除")
          ????public?ResultObject?delete(long?postsId)?{
          ????????return?ResultObject.success(postsService.removePostsById(postsId)???"刪除成功"?:?"刪除失敗");
          ????}
          }
          • @Api 注解用在類上,該注解將一個 Controller 類標(biāo)記位一個 Swagger 資源(API)。默認情況下,Swagger 只會掃描解析具有 @Api 注解的類。

          • @ApiOperation 注解用在方法上,該注解在指定的方法上,對一個方法進行描述。

          Swagger 還有很多其他的注解,比如說 @ApiParam、@ApiResponses 等等,這里就不再一一說明。

          三、整合 Knife4j

          Knife4j 完全遵循了 Swagger 的使用方式,所以可以無縫切換。
          第一步,在 pom.xml 文件中添加 Knife4j 的依賴(不需要再引入 springfox-boot-starter)。

          ????com.github.xiaoymin
          ????knife4j-spring-boot-starter
          ????
          ????3.0.2

          第二步,在 Java 配置類上添加 @EnableOpenApi 注解,開啟 Knife4j 增強功能。
          @Configuration
          @EnableOpenApi
          public?class?SwaggerConfig?{}
          第三步,重新運行 Spring Boot 項目,訪問 API 文檔,查看效果。
          訪問地址:http://localhost:9002/doc.html
          如果項目中加了權(quán)限認證的話,記得給 Knife4j 添加白名單。我的項目用的是 SpringSecurity,所以需要在 application.yml 文件中添加。
          secure:
          ??ignored:
          ????urls:?#安全路徑白名單
          ??????-?/doc.html
          ??????-?/swagger-ui/**
          ??????-?/swagger/**
          ??????-?/swagger-resources/**
          ??????-?/**/v3/api-docs

          四、Knife4j 的功能特點

          1)支持登錄認證
          Knife4j 和 Swagger 一樣,也是支持頭部登錄認證的,點擊「authorize」菜單,添加登錄后的信息即可保持登錄認證的 token。
          如果某個 API 需要登錄認證的話,就會把之前填寫的信息帶過來。
          2)支持 JSON 折疊
          Swagger 是不支持 JSON 折疊的,當(dāng)返回的信息非常多的時候,界面就會顯得非常的臃腫。Knife4j 則不同,可以對返回的 JSON 節(jié)點進行折疊。
          3)離線文檔
          Knife4j 支持把 API 文檔導(dǎo)出為離線文檔(支持 markdown 格式、HTML 格式、Word 格式),
          使用 Typora 打開后的樣子如下,非常的大方美觀。
          4)全局參數(shù)
          當(dāng)某些請求需要全局參數(shù)時,這個功能就很實用了,Knife4j 支持 header 和 query 兩種方式。
          之后進行請求的時候,就會把這個全局參數(shù)帶過去。
          5)搜索 API 接口
          Swagger 是沒有搜索功能的,當(dāng)要測試的接口有很多的時候,當(dāng)需要去找某一個 API 的時候就傻眼了,只能一個個去拖動滾動條去找。
          在文檔的右上角,Knife4j 提供了文檔搜索功能,輸入要查詢的關(guān)鍵字,就可以檢索篩選了,是不是很方便?
          目前支持搜索接口的地址、名稱和描述。

          五、尾聲

          除了我上面提到的增強功能,Knife4j 還提供了很多實用的功能,大家可以通過官網(wǎng)的介紹一一嘗試下,生產(chǎn)效率會提高不少。
          https://doc.xiaominfo.com/knife4j/documentation/enhance.html
          如果項目中之前使用過 Swagger 生成接口文檔,切換到 Knife4j 可以說是非常的絲滑,只需要兩步:
          • 在 pom.xml 文件中把 springfox-boot-starter 替換為 knife4j-spring-boot-starter
          • 訪問地址由原來的 http://${host}:${port}/swagger-ui.html 切換到 http://${host}:${port}/doc.html,如果有權(quán)限限制的話,記得開白名單。


          往期熱門文章:

          1、歷史文章分類導(dǎo)讀列表!精選優(yōu)秀博文都在這里了!》

          2、上海地鐵乘車碼“變紅”,嚇倒一眾乘客,官方:為營造節(jié)日氣氛……
          3、Spring Boot 項目打成 .exe 程序?實戰(zhàn)來了!
          4、Spring Boot太重,Vert.x真香!
          5、中美程序員不完全對比
          6、Spring Boot 3.0 M1 發(fā)布,正式棄用 Java 8,最低要求 Java 17。。。
          7、一個“扛住100億次請求”的春晚紅包系統(tǒng)
          8、你覺得HTTPS能防止重放攻擊嗎?
          9、數(shù)據(jù)一致性,為什么不推薦雙寫?
          10、Spring Boot實現(xiàn)抽獎大轉(zhuǎn)盤

          瀏覽 69
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  www.999av四虎 | 在线无码骚骚 | 天天爱三级 | 黄色三级网站 | 抖荫女生裸体 |