天天看點

再見 Swagger UI,國人開源了一款超好用的 API 文檔生成架構,Star 4.7K+,真香……

最近,棧長發現某些國内的開源項目都使用到了 Knife4j 技術,看名字就覺得很鋒利啊!

是不是這樣的縮寫呢:

Knife4j = Knife for Java ?

Java 匕首?

看起來很牛逼的樣子,當然,這是我簡單的猜測,從字面上并不能猜到它是幹嘛用的!

那麼它究竟是一個什麼樣的架構呢?

Knife4j 簡介

Knife4j 的前身是 swagger-bootstrap-ui,其實就是一個純 Swagger UI 的皮膚項目,用過 Swagger 的應該都知道,Swagger UI 是不怎麼好用的,并不太适合國人,是以 swagger-bootstrap-ui 項目就誕生了。

swagger-bootstrap-ui 後面為了滿足許多個性化的需求,又加入了許多豐富的服務端特性,不再僅僅隻是專注于前端 UI 皮膚了,是以又改名:knife4j。

取名 knife4j 是希望它能像一把匕首一樣小巧、輕量,并且功能強悍,更是希望它能成為 Swagger 接口文檔服務的通用性增強型解決方案。

Knife4j 由國人程式員蕭明于 2017 年開源,到現在已經 4 年多了,看了下 Star 數已經超過 4.7k+ 了:

再見 Swagger UI,國人開源了一款超好用的 API 文檔生成架構,Star 4.7K+,真香……

Knife4j 還獲得了 GVP 項目稱号,即 Gitee 最有價值的開源項目,并且我發現現在越來越多的開源項目都在使用它,Swagger UI 可以扔掉了。。

官網位址:

https://doc.xiaominfo.com/knife4j/ 開源位址: https://gitee.com/xiaoym/knife4j

Knife4j 界面賞鑒

Knife4j 采用了 Vue + And Design Vue 元件進行重寫,相關界面拿出來供大家賞鑒。

接口文檔顯示界面:

再見 Swagger UI,國人開源了一款超好用的 API 文檔生成架構,Star 4.7K+,真香……
再見 Swagger UI,國人開源了一款超好用的 API 文檔生成架構,Star 4.7K+,真香……
再見 Swagger UI,國人開源了一款超好用的 API 文檔生成架構,Star 4.7K+,真香……
再見 Swagger UI,國人開源了一款超好用的 API 文檔生成架構,Star 4.7K+,真香……
支援導出離線 Markdown、Html:
再見 Swagger UI,國人開源了一款超好用的 API 文檔生成架構,Star 4.7K+,真香……
再見 Swagger UI,國人開源了一款超好用的 API 文檔生成架構,Star 4.7K+,真香……

knife4j 果然非常強大,整個界面基于左右菜單式的布局方式,支援多标簽同時打開展示、切換,文檔和調試也更清晰,感覺更符合國人的操作習慣吧。。

Knife4j 實戰

knife4j 目前主要支援以 Java 開發為主,并且支援 Spring MVC、Spring Boot、Spring Cloud 架構的內建使用。

本文棧長就以 Spring Boot 為基礎實戰下吧:

Spring Boot 2.5.0

Knife4j 2.0.9

Maven 3.6.3

JDK 1.8

注意: 使用 Knife4j 2.0.6+ 版本,Spring Boot 的版本要求 2.2.x+

1、Knife4j 依賴引入

再見 Swagger UI,國人開源了一款超好用的 API 文檔生成架構,Star 4.7K+,真香……

/**
 * Knife4j 配置類
 * 來源微信公衆号:Java技術棧
 * 作者:棧長
 */
@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfiguration {

    @Bean(value = "defaultDocket")
    public Docket defaultDocket() {
        // 聯系人資訊
        Contact contact = new Contact("公衆号:Java技術棧", "https://www.javastack.cn", "[email protected]");

        // 建立 Docket
        Docket docket = new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(new ApiInfoBuilder()
                        .title("Knife4j 測試")
                        .description("Knife4j Test")
                        .termsOfServiceUrl("https://www.javastack.cn")
                        .contact(contact)
                        .version("1.0")
                        .build())
                .groupName("1.x")
                .select()
                .apis(RequestHandlerSelectors.basePackage("cn.javastack.springboot.knife4j.api"))
                .paths(PathSelectors.any())
                .build();
        return docket;
    }

}      

Spring Boot 基礎就不介紹了,送你一份《Spring Boot 學習筆記》,高清理論+實戰版,照着學習,沒有不會的,最新版正在努力更新中,可以持續關注公衆号 Java技術棧,會第一時間分享給大家。

3、新增測試接口

新增兩個測試接口,一個登入(POST),一個問好(GET)。

/**
 * Knife4j 測試接口
 * 來源微信公衆号:Java技術棧
 * 作者:棧長
 */
@Api(tags = "測試子產品")
@RestController
public class Knife4jController {

    /**
     * Knife4j 測試接口問好
     * 來源微信公衆号:Java技術棧
     * 作者:棧長
     */
    @ApiImplicitParam(name = "name", value = "名稱", required = true)
    @ApiOperation(value = "公衆号Java技術棧向你問好!")
    @ApiOperationSupport(order = 2, author = "棧長")
    @GetMapping("/knife4j/hi")
    public ResponseEntity<String> hello(@RequestParam(value = "name") String name) {
        return ResponseEntity.ok("Hi:" + name);
    }

    /**
     * Knife4j 測試接口登入
     * 來源微信公衆号:Java技術棧
     * 作者:棧長
     */
    @ApiImplicitParams({
            @ApiImplicitParam(name = "username", value = "使用者名", required = true),
            @ApiImplicitParam(name = "password", value = "密碼", required = true)
    })
    @ApiOperation(value = "接口登入!")
    @ApiOperationSupport(order = 1, author = "棧長")
    @PostMapping("/knife4j/login")
    public ResponseEntity<String> login(@RequestParam(value = "username") String username,
                                        @RequestParam(value = "password") String password) {
        if (StringUtils.isNotBlank(username) && "javastack".equals(password)) {
            return ResponseEntity.ok("登入成功:" + username);
        }
        return ResponseEntity.ok("使用者名或者密碼有誤:" + username);
    }

}      

上面為了支援接口順序和接口作者,使用了 Knife4j 的 @ApiOperationSupport 注解,其他的均為 Swagger 自帶的注解,從該目錄下看還支援下面的注解:

再見 Swagger UI,國人開源了一款超好用的 API 文檔生成架構,Star 4.7K+,真香……

更多可去官網進行學習。

完整的 Demo 代碼就不一一帖了,本節教程所有實戰源碼已上傳到這個倉庫:

https://github.com/javastacks/spring-boot-best-practice

4、Knife4j 測試

啟動應用,打開 Knife4j 文檔頁:

http://localhost:8080/doc.html

再見 Swagger UI,國人開源了一款超好用的 API 文檔生成架構,Star 4.7K+,真香……

首頁會顯示一些已經配置好的文檔參數及接口統計資訊,并且在首頁子產品菜單中也看到了我們的測試子產品的兩個接口。

接口文檔:

再見 Swagger UI,國人開源了一款超好用的 API 文檔生成架構,Star 4.7K+,真香……
再見 Swagger UI,國人開源了一款超好用的 API 文檔生成架構,Star 4.7K+,真香……

調試一下:

再見 Swagger UI,國人開源了一款超好用的 API 文檔生成架構,Star 4.7K+,真香……
再見 Swagger UI,國人開源了一款超好用的 API 文檔生成架構,Star 4.7K+,真香……

這裡棧長使用了接口排序、還有接口作者功能,另外還支援分組排序、自定義文檔、Swagger 資源保護、導出 Markdown、參數緩存等衆多強大功能,增強功能多達 29 項,有興趣的可以自行嘗試...

總結

好了,今天棧長給大家介紹了國人程式員開源的一款 Knife4j 項目,也就是 Swagger 的增強版,毫無疑問要比 Swagger UI 更強大,更好用,也符合國人的習慣!

如果你也在使用 Swagger,可以考慮使用 Knife4j,它不僅有更強大的 UI,更有多達 29 項的增強功能,它們并不是替代關系,就像 Mybatis Plus 和 Mybatis 的關系一樣,它能助你更進一步提高開發生産力。

如果你也在使用 Knife4j,歡迎留言分享哦!

本節教程所有實戰源碼已上傳到這個倉庫:

好了,今天的分享就到這裡了,後面棧長會分享更多好玩的 Java 技術和最新的技術資訊,關注公衆号Java技術棧第一時間推送,我也将主流 Java 面試題和參考答案都整理好了,在公衆号背景回複關鍵字 "面試" 進行刷題。

最後,覺得我的文章對你用收獲的話,動動小手,給個在看、轉發,原創不易,棧長需要你的鼓勵。