Knife4j,拯救Swagger不那么美觀的頁(yè)面和差點(diǎn)意思的功能

swagger

前言:
Swagger現(xiàn)在已經(jīng)成了最流行的接口文檔生成與管理工具,但是你是否在用的時(shí)候也在吐槽,它是真的不好看,接口測(cè)試的json數(shù)據(jù)沒(méi)法格式化,測(cè)試地址如果更改了還要去改配置,接口測(cè)試時(shí)增加token驗(yàn)證是真的麻煩......等等,拿什么拯救你,swagger同學(xué)!
針對(duì)Swagger的種種缺點(diǎn),Knife4j就呼之欲出了。

正文:
一、先看一下它長(zhǎng)什么樣子吧

Knife4j

看一下官方的介紹
??Knife4j的前身是swagger-bootstrap-ui,前身swagger-bootstrap-ui是一個(gè)純swagger-ui的ui皮膚項(xiàng)目。
??一開(kāi)始項(xiàng)目初衷是為了寫一個(gè)增強(qiáng)版本的swagger的前端ui,但是隨著項(xiàng)目的發(fā)展,面對(duì)越來(lái)越多的個(gè)性化需求,不得不編寫后端Java代碼以滿足新的需求,在swagger-bootstrap-ui的1.8.5~1.9.6版本之間,采用的是后端Java代碼和Ui都混合在一個(gè)Jar包里面的方式提供給開(kāi)發(fā)者使用.這種方式雖說(shuō)對(duì)于集成swagger來(lái)說(shuō)很方便,只需要引入jar包即可,但是在微服務(wù)架構(gòu)下顯得有些臃腫。因此,項(xiàng)目正式更名為knife4j,取名knife4j是希望她能像一把匕首一樣小巧,輕量,并且功能強(qiáng)悍,更名也是希望把她做成一個(gè)為Swagger接口文檔服務(wù)的通用性解決方案,不僅僅只是專注于前端Ui前端.swagger-bootstrap-ui的所有特性都會(huì)集中在knife4j-spring-ui包中,并且后續(xù)也會(huì)滿足開(kāi)發(fā)者更多的個(gè)性化需求。
??主要的變化是,項(xiàng)目的相關(guān)類包路徑更換為com.github.xiaoymin.knife4j前綴,開(kāi)發(fā)者使用增強(qiáng)注解時(shí)需要替換包路徑后端Java代碼和ui包分離為多個(gè)模塊的jar包,以面對(duì)在目前微服務(wù)架構(gòu)下,更加方便的使用增強(qiáng)文檔注解(使用SpringCloud微服務(wù)項(xiàng)目,只需要在網(wǎng)關(guān)層集成UI的jar包即可,因此分離前后端),knife4j沿用swagger-bootstrap-ui的版本號(hào),第1個(gè)版本從1.9.6開(kāi)始,關(guān)于使用方法,請(qǐng)參考文檔。

二、插件的特點(diǎn):

1、非常簡(jiǎn)潔清爽的UI設(shè)計(jì),接口的快速搜索。

2、支持個(gè)性化設(shè)置,個(gè)性化設(shè)置包含:

  請(qǐng)求參數(shù)緩存

  動(dòng)態(tài)請(qǐng)求參數(shù)

  RequestMapping接口過(guò)濾

  HOST代理設(shè)置

3、全局參數(shù)設(shè)置,可以很方便的設(shè)置Token等權(quán)限認(rèn)證參數(shù)。

4、離線API文檔下載:

  Markdown(已支持)

  Html(已支持)

  Word(已支持)

  OpenApi(已支持)

5、對(duì) json 格式的數(shù)據(jù)有更好的支持,可以折疊展開(kāi)等。

三、Knife4j的集成

1、在Springboot中的集成

(1)在項(xiàng)目 pom.xml 文件中引入 jar 依賴。

<dependency>
  <groupId>com.github.xiaoymin</groupId>
  <artifactId>knife4j-springdoc-ui</artifactId>
  <!--在引用時(shí)請(qǐng)?jiān)趍aven中央倉(cāng)庫(kù)搜索3.X最新版本號(hào)-->
  <version>3.0.2</version>
</dependency>

完整的 pom.xml 示例

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.github.xiaoymin</groupId>
  <artifactId>knife4j-spring-boot-fast-demo</artifactId>
  <version>1.0</version>
  <name>knife4j-spring-boot-fast-demo</name>
  <description>Demo project for Spring Boot</description>
 
  <properties>
    <java.version>1.8</java.version>
  </properties>
 
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>com.github.xiaoymin</groupId>
      <artifactId>knife4j-spring-boot-starter</artifactId>
      <version>2.0.7</version>
    </dependency>
 
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <exclusions>
      <exclusion>
      <groupId>org.junit.vintage</groupId>
      <artifactId>junit-vintage-engine</artifactId>
      </exclusion>
      </exclusions>
    </dependency>
  </dependencies>
 
 <build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
  </plugins>
 </build>
</project>

(2)創(chuàng)建Swagger配置依賴,代碼如下

@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfiguration {

@Bean(value = "defaultApi2")
public Docket defaultApi2() {
        Docket docket=new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(new ApiInfoBuilder()
//.title("swagger-bootstrap-ui-demo RESTful APIs")
                        .description("# swagger-bootstrap-ui-demo RESTful APIs")
                        .termsOfServiceUrl("http://www.xx.com/")
                        .contact("xx@qq.com")
                        .version("1.0")
                        .build())
//分組名稱
                .groupName("2.X版本")
                .select()
//這里指定Controller掃描包路徑
                .apis(RequestHandlerSelectors.basePackage("com.github.xiaoymin.knife4j.controller"))
                .paths(PathSelectors.any())
                .build();
return docket;
    }
}

(3)啟動(dòng)項(xiàng)目,查看效果。

瀏覽器輸入:http://ip:端口/doc.html ,即可打開(kāi)Knife4j頁(yè)面

四、幾個(gè)比較重要的功能示例

(1)Token 認(rèn)證參數(shù)的設(shè)置。

文檔管理》全局參數(shù)設(shè)置》添加參數(shù)

全局參數(shù)設(shè)置

可選擇參數(shù)是放在 header 還是 query 中。

(2)離線文檔

離線文檔

離線文檔支持四種格式,Markdown、Html、Word、Open Api

Markdown 文檔預(yù)覽:

導(dǎo)出的MarkDown

Html 文檔預(yù)覽:

導(dǎo)出的Html

(3)Host 地址配置(適用于Nginx代理等場(chǎng)景中更換了請(qǐng)求地址)

文檔管理》個(gè)性化設(shè)置》Host設(shè)置

Host地址配置

(4)更友好的API調(diào)試頁(yè)面

頁(yè)面分為【文檔】【調(diào)試】【open】幾個(gè)部分。

API接口調(diào)試

類似于 PostMan 可以分別設(shè)置請(qǐng)求頭參數(shù)與請(qǐng)求體參數(shù),支持多種不同的參數(shù)類型,不需要的參數(shù)可以刪除。

API接口調(diào)試

(5)更強(qiáng)的 Json 支持

能夠很清晰標(biāo)準(zhǔn)的展示 json 格式數(shù)據(jù)。

支持json格式化

Json數(shù)據(jù)可以折疊。

最后:
關(guān)注公眾號(hào)【陽(yáng)光的充能小站】,獲取更多資源、知識(shí)分享、開(kāi)源代碼!

knife4j更多用法請(qǐng)請(qǐng)自己去官網(wǎng)發(fā)現(xiàn),官網(wǎng)的文檔講得非常的詳細(xì), Knife4J官網(wǎng)

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容