整合 Knife4j 于 Spring Cloud 网关:实现跨服务的 API 文档统一展示

🎯导读:本文档概述了构建和配置基于JDK 17、Spring Boot 3.0.7及Spring Cloud 2022.0.3的微服务系统,特别聚焦于集成Knife4j以增强API文档管理和接口测试功能。文中详细介绍了如何在Spring Boot应用中添加Knife4j依赖、配置Swagger UI路径和API分组,以及使用注解为接口添加描述信息。此外,文档还讲解了通过Spring Cloud Gateway聚合多个微服务的API文档的方法,并说明了如何设置白名单和基本认证来保护API文档访问。这些步骤旨在提升开发效率,确保API文档的准确性和易用性。
🏠️ HelloDam/场快订(场馆预定 SaaS 平台)

实践版本

  • JDK 17
  • SpringBoot 3.0.7
  • SpringCloud 2022.0.3
  • SpringCloudAlibaba 2022.0.0.0-RC2

Knife4j

https://doc.xiaominfo.com/

其他微服务引入Knife4j

参考文档:https://doc.xiaominfo.com/docs/quick-start#spring-boot-3

我这里以admin服务为例子

依赖

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

配置文件

注意需要修改接口的扫包路径,即packages-to-scan

# 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: com.vrs.controller
# knife4j的增强配置,不需要增强可以不配
knife4j:
  enable: true
  setting:
    language: zh_cn

添加接口描述

  • @Tag:添加类描述
  • @Operation:添加接口描述
@RestController
@RequestMapping("/user/")
@RequiredArgsConstructor
@Tag(name = "用户管理")
public class UserController {

    private final UserService userService;

    /**
     * 查询用户名是否存在
     */
    @Operation(summary = "查询用户名是否存在")
    @GetMapping("/v1/has-username")
    public Result<Boolean> hasUsername(@RequestParam("username") String username) {
        return Results.success(userService.hasUsername(username));
    }

}

访问接口文档

http://ip地址:端口/doc.html,如果设置了服务访问前缀,记得要加到/doc前面,例如的地址为http://localhost:7050/admin/doc.html

在这里插入图片描述

屏蔽请求参数字段

有时候接口接收的参数是一个json数据,但是其中一些字段是不需要的,例如idcreateTimeupdateTimeisDeleted,可以通过@Schema字段将其隐藏

@Schema(description = "id", hidden = true)
private Long id;

通过网关服务统一聚合访问

参考文档:https://doc.xiaominfo.com/docs/middleware-sources/spring-cloud-gateway/spring-gateway-introduction#%E4%BD%BF%E7%94%A8

依赖

需要在网关服务添加如下依赖

<!-- Knife4j API 小刀注解依赖 -->
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-gateway-spring-boot-starter</artifactId>
    <version>4.4.0</version>
</dependency>

配置文件

需要在网关服务的配置文件中的routes中设置每个微服务的接口访问地址,注意enabled一定要设置为true,才能开启聚合功能,注意如果微服务有设置接口前缀,一定要设置context-path

# knife4j的网关聚合配置 文档地址:http://{gateway.host}:{gateway.port}/doc.html
knife4j:
  # 聚合swagger文档
  gateway:
    # 是否开启Knife4j网关聚合功能(生产环境不建议开启)
    enabled: true
    # 排序规则(tag/operation排序自4.2.0版本新增)
    # 取值:alpha-默认排序规则,官方swagger-ui默认实现,order-Knife4j提供的增强排序规则,开发者可扩展x-order,根据数值来自定义排序
    tags-sorter: order
    operations-sorter: order
    # 指定聚合的策略(默认手动配置(manual),服务发现(discover))
    strategy: manual
    # 个性化定制的部分子服务分组情况
    routes:
      - name: admin模块
        # 服务名
        service-name: vrs-admin
        # 真实子服务访问url地址-提供OpenAPI的文档
        url: /admin/v3/api-docs?group=default
        # 路由前缀,兼容OpenAPI3规范在聚合时丢失contextPath属性的异常情况,由开发者自己配置contextPath,Knife4j的前端Ui做兼容处理,与url属性独立不冲突,仅OpenAPI3规范聚合需要,OpenAPI2规范不需要设置此属性,默认为(apiPathPrefix)
        context-path: /admin
        # 排序
        order: 1

白名单过滤 Knife4j 相关资源

通过http://网关服务ip:端口/doc.html访问,发现文档请求异常

在这里插入图片描述

通过查看网页请求的错误,发现是权限验证的问题

在这里插入图片描述

那只需要在网关层放开相应资源的权限控制即可,参考文档:https://doc.xiaominfo.com/docs/features/accessControl

将相应资源地址放到白名单中

在这里插入图片描述

再次访问文档url,发现其他服务的接口被聚合进来了。具体原理就是网关服务通过/admin/v3/api-docs去admin服务请求了接口数据,请求到之后将其放到当前接口文档中

在这里插入图片描述

用户名密码控制接口文档访问

参考文档:https://doc.xiaominfo.com/docs/features/accessControl

在网关服务的配置文件中添加如下配置

knife4j:
  gateway:
    basic:
      enable: true
      username: admin
      password: 12344321

接下来访问接口文档就需要使用账号密码来访问了

在这里插入图片描述

### 实现网关统一聚合API文档 为了实现在 `Spring Cloud Gateway` 中使用 `Knife4j` 进行 API 文档统一聚合,需遵循特定配置流程。 #### 添加依赖项 在网关服务项目的 `pom.xml` 文件中加入 Knife4j 的依赖: ```xml <!-- Knife4j API 小刀注解依赖 --> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-gateway-spring-boot-starter</artifactId> <version>4.4.0</version> </dependency> ``` 此操作确保项目能够利用 Knife4j 提供的功能来增强 Swagger UI 和 OpenAPI 规范的支持[^3]。 #### 修改应用配置文件 编辑 `application.yml` 或者 `application.properties` 来启用并自定义 Knife4j 行为。对于基于 Eureka 或其他注册中心的服务发现机制,默认情况下会自动识别已部署微服务中的Swagger资源,并将其集成到单个入口点下显示给开发者或使用者查看[^1]。 以下是部分可能涉及的关键设置参数示例(YAML格式): ```yaml spring: cloud: gateway: discovery: locator: enabled: true # 启用通过服务名路由至下游服务的能力 server: port: 8080 # 设置网关监听端口 swagger-resources: host: http://localhost:${server.port} # 主机地址用于构建完整的URL路径指向各个子系统的API描述页面 ``` 完成上述更改之后重启应用程序,在浏览器里打开指定链接如 `http://localhost:8080/swagger-ui/index.html` 即可看到由多个后端模块共同组成的综合版在线帮助手册界面[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello Dam

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值