Skip to content

OpenApi3 规范与 Springdoc 工具

相关概念

说到接口文档,常常会听到 OpenAPI、Swagger、Knife4j 等等词汇,它们都是什么?它们之间有什么关系呢?

OpenAPI 和 Swagger

OpenAPI 是一种用于描述和定义 RESTful API 的规范,它定义了 API 的结构、端点、参数、响应等信息。 Swagger 它是 SmartBear 这个公司的一个开源项目,里面提供了一系列工具,包括著名的 swagger-ui

目前 OpenApi 的版本:

  • OpenApi2 对应 Swagger 的实现版 Swagger2,Swagger2 已经于 17 年停止维护,对应的包名:io.swagger
  • OpenApi3 对应 Swagger 的实现版 Swagger3,Swagger3 于 17 年开始开发,对应的包名:io.swagger.core.v3

相关资料:

Springfox 不推荐

Springfox 是 Spring 生态的一个开源库,是 Swagger 与 OpenApi 规范的具体实现。

由于目前已经不再更新,Spring 官方推出了另一个库:Springdoc。

SpringDoc 推荐

SpringDoc 基于 OpenAPI 3 规范,用于 SpringBoot 项目中 API 文档的生成和维护的工具类,支持 Springboot3,推荐直接使用它。

相关资料:

Knife4j 增强方案

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

  • 基于 SpringFox2.x 版本提供 Swagger2 规范的增强扩展
  • 基于 Springdoc-openapi 项目提供 OAS3 规范的增强扩展

相关资料:

小结

推荐使用 Springdoc 或者 Knife4j。

SpringBoot - Springdoc 实践

看这一篇:秒懂 SpringBoot 之如何集成 SpringDoc

SpringCloud - Springdoc 实践

在 SpringCloud 中,由于存在网关进行路由转发,我们可以这样搭建接口平台:

  • 在各个微服务中引入 springdoc,仅开启 springdoc 的接口,关闭 swagger-ui 界面;
  • 网关模块开启 swagger-ui 和 springdoc 接口,通过 springdoc.swagger-ui.urls 进行分组

微服务示例:

yml
# springdoc 配置,关闭 swagger-ui,仅提供接口,统一由网关提供界面
springdoc:
  api-docs:
    enabled: true
    path: /springdoc # 自定义接口路径,请求这个接口会响应符合 openapi 规范的接口信息数据
  swagger-ui:
    enabled: false
# springdoc 配置,关闭 swagger-ui,仅提供接口,统一由网关提供界面
springdoc:
  api-docs:
    enabled: true
    path: /springdoc # 自定义接口路径,请求这个接口会响应符合 openapi 规范的接口信息数据
  swagger-ui:
    enabled: false

网关示例:

yml
springdoc:
  api-docs:
    enabled: true
    path: /springdoc # 自定义接口路径,请求这个接口会响应符合 openapi 规范的接口信息数据
  swagger-ui:
    path: /swagger-ui # 自定义 swagger-ui 界面路径
    # 接口分组,通常一个服务一组,url 为获取 openapi 数据的接口,path 第一部分为前缀,与路由保持一致;后面为子服务配置的 openapi 接口地址
    urls:
      - name: your-service-name
        url: /admin/springdoc
springdoc:
  api-docs:
    enabled: true
    path: /springdoc # 自定义接口路径,请求这个接口会响应符合 openapi 规范的接口信息数据
  swagger-ui:
    path: /swagger-ui # 自定义 swagger-ui 界面路径
    # 接口分组,通常一个服务一组,url 为获取 openapi 数据的接口,path 第一部分为前缀,与路由保持一致;后面为子服务配置的 openapi 接口地址
    urls:
      - name: your-service-name
        url: /admin/springdoc