如何使用 Swagger2 自动生成 RESTful API 文档

news2024/10/6 16:22:51

如何使用 Swagger2 自动生成 RESTful API 文档

在开发 RESTful API 的过程中,文档是非常重要的一部分。它可以帮助开发者了解 API 的功能和使用方法,同时也是接口设计和测试的重要依据。而手动编写 API 文档往往比较耗时且容易出错,这时候 Swagger2 可以帮我们自动生成 RESTful API 文档。

在这里插入图片描述

什么是 Swagger2

Swagger2 是一个开源的 API 文档工具,它可以帮助我们自动生成 RESTful API 文档。Swagger2 定义了一套 API 描述语言(Swagger Definition),可以用来描述 API 的请求和响应参数、接口路径、请求方法、响应状态码等信息。同时,Swagger2 还提供了一个 Web 界面,可以方便地查看和测试 API。

如何使用 Swagger2

1. 引入 Swagger2 依赖

在使用 Swagger2 之前,我们需要先引入它的依赖。在 Maven 项目中,我们可以在 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>3.0.0</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>3.0.0</version>
</dependency>

2. 配置 Swagger2

在引入 Swagger2 依赖之后,我们需要进行一些配置。在 Spring Boot 项目中,我们可以创建一个配置类来配置 Swagger2:

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
            .paths(PathSelectors.any())
            .build()
            .apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
            .title("Demo API 文档")
            .description("这是一个 Demo 的 API 文档")
            .version("1.0.0")
            .build();
    }
}

上面的代码中,我们首先使用 @Configuration 注解将该类声明为配置类,然后使用 @EnableSwagger2 注解启用 Swagger2。在 api() 方法中,我们创建了一个 Docket 对象,它是 Swagger2 的主要配置对象。我们通过 select() 方法进行 API 选择,使用 RequestHandlerSelectors 来指定 API 的扫描范围,这里我们指定为 com.example.demo.controller 包下的所有类。然后使用 PathSelectors.any() 来指定所有的 URL 都可以进行文档生成功能。最后,我们使用 apiInfo() 方法来设置 API 文档的基本信息,例如文档的标题、描述和版本号等。

3. 测试 Swagger2

在完成 Swagger2 的配置之后,我们可以启动 Spring Boot 应用程序并访问 http://localhost:8080/swagger-ui.html,就可以看到 Swagger2 的 Web 界面了。在这个界面中,我们可以查看 API 的请求和响应参数、接口路径、请求方法、响应状态码等信息,并且可以直接在页面上进行测试。此外,我们还可以将 API 的定义导出为 JSON 或 YAML 格式的文件,以便于进行文档的版本控制和共享。

Swagger2 的高级用法

除了基本的 API 文档生成外,Swagger2 还提供了一些高级用法,例如:

1. API 分组

在实际开发中,我们通常会有多个 API,如果将它们都放在一个文档中,可能会比较混乱。此时,我们可以使用 Swagger2 的 API 分组功能,将不同的 API 分别归为不同的组,方便用户查看。

@Configuration
@EnableSwagger2
public class SwaggerConfig {
   在上面的代码中,我们定义了两个 Docket 对象,分别用于分组名为 v1 和 v2 的 API。在每个 Docket 对象中,我们都通过 `groupName()` 方法指定了分组名称,通过 `select()` 方法指定了 API 的扫描范围。最后,我们通过 `apiInfo()` 方法设置了 API 文档的基本信息。

### 2. API 安全认证

在实际开发中,我们通常会需要对一些敏感的 API 进行安全认证。Swagger2 也提供了相应的功能,可以帮助我们在 API 文档中添加安全认证信息。我们可以通过以下方式来配置 API 安全认证:

```java
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
            .paths(PathSelectors.any())
            .build()
            .apiInfo(apiInfo())
            .securitySchemes(Collections.singletonList(apiKey()))
            .securityContexts(Collections.singletonList(securityContext()));
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
            .title("Demo API 文档")
            .description("这是一个 Demo 的 API 文档")
            .version("1.0.0")
            .build();
    }

    private ApiKey apiKey() {
        return new ApiKey("token", "token", "header");
    }

    private SecurityContext securityContext() {
        return SecurityContext.builder()
            .securityReferences(Collections.singletonList(new SecurityReference("token", new AuthorizationScope[]{new AuthorizationScope("global", "accessEverything")})))
            .forPaths(PathSelectors.any())
            .build();
    }
}

上面的代码中,我们通过 securitySchemes() 方法和 securityContexts() 方法分别添加了 API 的安全认证信息。在 securitySchemes() 方法中,我们使用了 ApiKey 对象来定义了一个名为 token 的 API Key,它将被作为 HTTP 请求头的一个自定义字段来传递。在 securityContexts() 方法中,我们使用了 SecurityContext 对象来定义了一个安全上下文,它指定了该 API 的安全认证方式为 token,并且对所有的 URL 都进行了安全认证。

3. API 接口描述

在 Swagger2 中,我们可以通过注解来添加 API 接口的描述信息。例如,在 SpringMVC 中,我们可以使用 @Api@ApiOperation@ApiParam 等注解来添加接口的描述信息。例如:

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

    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    @ApiOperation(value = "获取用户", notes = "根据用户 ID 获取用户信息")
    public User getUser(@PathVariable("id") Long id) {
        return userService.getUserById(id);
    }

    @PostMapping
    @ApiOperation(value = "创建用户", notes = "创建新用户")
    public User createUser(@ApiParam(name = "用户对象", value = "需要创建的用户对象") @RequestBody User user) {
        return userService.createUser(user);
    }
}

在上面的代码中,我们在 UserController 类上使用了 @Api 注解来添加了 API 的描述信息,指定了该 API 的标签为“用户管理”。在 getUser() 方法和 createUser() 方法上,我们分别使用了 @ApiOperation@ApiParam 注解来添加了接口的描述信息,例如接口的功能、参数的含义等。

总结

在本文中,我们介绍了如何使用 Swagger2 自动生成 RESTful API 文档。首先,我们引入了 Swagger2 的依赖,并对其进行了基本的配置,然后我们介绍了 Swagger2 的高级用法,包括 API 分组、API 安全认证和 API 接口描述等。通过使用 Swagger2,我们可以方便地生成 API 文档,并且提高了开发效率和文档的准确性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/668763.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【kubernetes】部署controller-manager与kube-scheduler

前言:二进制部署kubernetes集群在企业应用中扮演着非常重要的角色。无论是集群升级,还是证书设置有效期都非常方便,也是从事云原生相关工作从入门到精通不得不迈过的坎。通过本系列文章,你将从虚拟机准备开始,到使用二进制方式从零到一搭建起安全稳定的高可用kubernetes集…

NodeJS 配置HTTPS协议证书⑩⑤

文章目录 ✨文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持&#x1f618;前言HTTPS ❓配置证书工具 CertbotCertbot 使用步骤总结 ✨文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持&…

chatgpt赋能python:Python描述符详解

Python 描述符详解 Python 中的描述符是一种机制&#xff0c;用于控制属性&#xff08;attribute&#xff09;的访问。通过描述符&#xff0c;我们可以在属性被访问或者修改时加入特定的逻辑。 描述符是一个类&#xff0c;其中至少定义了以下三个方法&#xff1a; __get__(s…

docker入门手册

目录 1. docker基础 1. 1 docker介绍 1.2 docker架构与核心组件 1.3 docker安装和卸载 安装 卸载 docker加速器设置 -> 可选 1.4 权限问题 1.5 docker服务相关操作命令 2. docker镜像管理 2.1 镜像的搜索/获取/查看 镜像搜索 2.2 镜像别名/删除 2.3 镜像的导入…

Apache Atlas产品调研

元数据产品调研 &#x1f4a1; 思考可以构成一座桥&#xff0c;让我们通向新知识。—— 普朗克 一、什么是元数据 元数据是关于数据的数据&#xff0c;是为了描述数据的相关信息而存在的数据。 元数据是用数据管理数据&#xff0c;是快速查找数据、精确定位数据、准确理解数据…

CSS3-三大特性-继承性、层叠性、优先级

CSS三大特性 1 继承性 2 层叠性 3 优先级 1 继承性 特性&#xff1a;子元素有默认继承父元素样式的特点&#xff08;子承父业&#xff09; 可以继承的常见属性&#xff1a; 1 color 2 font-style、font-weight、font-size、font-family 3 text-indent、text-align 4 line-heigh…

io.netty学习(七)字节缓冲区 ByteBuf(下)

目录 前言 实现原理 ByteBuf 的使用案例 ByteBuf 的3种使用模式 堆缓冲模式 直接缓冲区模式 复合缓冲区模式 总结 前言 在了解了 ByteBuffer 的原理之后&#xff0c;再来理解Netty 的 ByteBuf 就比较简单了。 ByteBuf 是 Netty 框架封装的数据缓冲区&#xff0c;区别…

第5章 函数式编程

第5章 函数式编程 5.1 函数式编程思想 在之前的学习中&#xff0c;我们一直学习的就是面向对象编程&#xff0c;所以解决问题都是按照面向对象的方式来处理的。比如用户登陆&#xff0c;但是接下来&#xff0c;我们会学习函数式编程&#xff0c;采用函数式编程的思路来解决问…

【Python 随练】阶乘累加计算

题目&#xff1a; 求 12!3!…20!的和。 简介&#xff1a; 在本篇博客中&#xff0c;我们将解决一个数学问题&#xff1a;计算阶乘序列的和。我们将介绍阶乘的概念&#xff0c;并提供一个完整的代码示例来计算给定范围内阶乘数的和。 问题分析&#xff1a; 我们需要计算从1…

基于“遥感+”融合技术在碳储量、碳收支、碳循环等多领域监测与模拟

卫星遥感具有客观、连续、稳定、大范围、重复观测的优点&#xff0c;已成为监测全球碳盘查不可或缺的技术手段&#xff0c;卫星遥感也正在成为新一代 、国际认可的全球碳核查方法。本内容目的就是梳理碳中和与碳达峰对卫星遥感的现实需求&#xff0c;系统总结遥感技术在生态系统…

开源开放 | 开源知识图谱抽取工具发布大模型版DeepKE-LLM

DeepKE-LLM链接&#xff1a; https://github.com/zjunlp/DeepKE/tree/main/example/llm OpenKG地址&#xff1a; http://openkg.cn/tool/deepke Gitee地址&#xff1a; https://gitee.com/openkg/deepke/tree/main/example/llm 开放许可协议&#xff1a;Apache-2.0 license 贡献…

计算机网络核心

1、OSI开放式互联参考模型 1、物理层&#xff1a;机械、电子、定时接口通信信道上的原始比特流传输。2、数据链路层&#xff1a;物理寻址&#xff0c;同时将原始比特流转变为逻辑传输线路。3、网络层&#xff1a;控制子网的运行&#xff0c;如逻辑编址、分组传输、路由选择(IP…

chatgpt赋能python:Python捕获Ctrl+C信号

Python 捕获 CtrlC 信号 在 Python 中&#xff0c;我们通过按下键盘上的 CtrlC 快捷键可以中断程序的运行&#xff0c;但是在某些情况下&#xff0c;我们希望程序在收到 CtrlC 信号后进行一些特殊的处理&#xff0c;而非直接退出或崩溃。这就需要捕获 CtrlC 信号&#xff0c;并…

前端Vue自定义简单实用中国省市区三级联动选择器

前端Vue自定义简单实用中国省市区三级联动选择器&#xff0c; 请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13118 效果图如下&#xff1a; #### 使用方法 使用方法 <!-- themeColor:主题颜色 ref:设置唯一ref pickerValueDefault:默认选择…

C++技能系列 ( 6 ) - 可调用对象、std::function与std::bind【详解】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the…

单片机如何生成周期正弦波

一&#xff0c;简介 在某些场景需要使用单片机的IIS等外设播放正弦波音频数据。本文介绍一种“笨方法”来生成固定频率和固定幅度的正弦波定点型数据&#xff0c;记录总结学习使用。 二&#xff0c;步骤简介 总体步骤概述&#xff1a; 1&#xff0c;使用Audition生成制定波形…

chatgpt赋能python:Python异常捕获存在的问题

Python 异常捕获存在的问题 作为一门广受欢迎、应用广泛的编程语言&#xff0c;Python 在处理异常方面有着比较完善的设计。Python 提供了 try…except…finally 这样的异常处理机制&#xff0c;通过这些机制&#xff0c;开发者可以捕获、处理程序中产生的异常&#xff0c;从而…

【安全】awvs安装(一)

目录 一、简介 二、将安装文件传输到服务器 三、安装 3.1 赋权 3.2 执行安装 四、激活 4.1 复制激活文件到对应安装目录 4.2 赋权 4.3 运行激活文件 五、访问 六、设置不自动更新 七、设置开启 八、忘记密码 前言&#xff1a;安全漏洞扫描工具awvs的安装使用 一、简介…

Android DiskLruCache完全解析,硬盘缓存的最佳方案

概述 LruCache只是管理了内存中图片的存储与释放&#xff0c;如果图片从内存中被移除的话&#xff0c;那么又需要从网络上重新加载一次图片&#xff0c;这显然非常耗时。对此&#xff0c;Google又提供了一套硬盘缓存的解决方案&#xff1a;DiskLruCache(非Google官方编写&…

Nginx基础配置

Nginx的基础配置&#xff1a; Nginx的基础配置 一、实战案例&#xff1a;1.Nginx访问统计&#xff1a;2.基于授权的访问控制&#xff1a;3.基于客户端访问设置&#xff08;设置黑白名单&#xff09;&#xff1a;4.基于域名的nginx虚拟主机&#xff1a;5.基于IP的nginx虚拟主机…