什么是Knife4j?

Knife4j是一个集Swagger2 和 OpenAPI3 为一体的增强解决方案 Knife4j是一个集Swagger2 和 OpenAPI3 为一体的增强解决方案。

什么是Swagger?

众所周知,Swagger是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。目标是使客户端和文件系统作为服务器以同样的速度来更新文件的方法,参数和模型紧密集成到服务器。

这个解释简单点来讲就是说,swagger是一款可以根据resutful风格生成的生成的接口开发文档,并且支持做测试的一款中间软件。

Swagger的使用

<!-- https://mvnrepository.com/artifact/io.springfox/springfox-boot-starter -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>
@EnableOpenApi
@SpringBootApplication
public class ApiDocApplication {

    public static void main(String[] args) {
        SpringApplication.run(ApiDocApplication.class, args);
    }

}

引用依赖,并启用openapi。编写一个接口看看效果

@RestController
@RequestMapping("/user/v1")
@Api(tags="用户管理")
public class UserController {

    @GetMapping("get")
    public UserEntity get(@ApiParam("用户id") @RequestParam("id") int id) {
        return UserEntity.builder().id(1).name("lee").build();
    }
}

启动程序后,访问 http://ip:port/context-path/swagger-ui/#/

可以看到,对应的接口的稳定就生成好了。点开对应的接口后可以进行调试,这样就不需要自己在postman或其他工具这编写接口文档以及调试了。

如果想的话还可以将其导入到postman、yapi等平台。这样就可以节省输出接口文档的时间了

Knife4j的使用

那么有了swagger要knife4j做啥呢?knife4j其实是基于swagger进行了增强。增强了什么呢?

上面是官方给出的增强功能列表。具体的大家可以自己去看看。但是我觉得最重要的就是重写了界面。吐槽下原来的swagge的ui是真的丑(个人观点)。

那怎么使用呢?首先引入依赖

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi3-spring-boot-starter</artifactId>
    <version>4.4.0</version>
</dependency>

配置如下

# springdoc-openapi项目配置
springdoc:
  swagger-ui:
    path: /swagger-ui.html
    tags-sorter: alpha
    operations-sorter: alpha
  api-docs:
    path: /v3/api-docs
  group-configs:
    - group: 'default'
      paths-to-match: '/**'
      packages-to-scan: club.mzli.apidoc.controller
# knife4j的增强配置,不需要增强可以不配
knife4j:
  enable: true
  setting:
    language: zh_cn

接口层使用如下:

@RestController
@RequestMapping("/user/v1")
@Tag(name = "用户管理")
public class UserController {

    @GetMapping("get")
    @Parameters({
            @Parameter(name = "id",description = "用户id",required = true,in= ParameterIn.QUERY)
    })
    public UserEntity get(@RequestParam("id") int id) {
        return UserEntity.builder().id(1).name("lee").build();
    }
}

启动后访问http://ip:port/context-path/doc.html

看,是不是比swagger原皮好看多了。

切换到调试是不是和postman很像?输入参数,进行请求。底下的结果还进行了json格式化。


切换到open。可以看到这就是单独这个接口的openapi文档。可以单个接口导入导出。

切换到script。可以看到前端请求的代码。可以直接copy使用。

好了,今天的推荐到此结束!感兴趣的同学自己去了解 Knfe4j官网