Spring Boot之Restful服务与Swagger框架:构建易用的API文档与测试工具

简介: 本篇详细介绍了如何在Spring Boot应用中构建Restful服务,并结合Swagger框架实现自动生成API文档和提供API测试工具的方法。通过编写Controller类定义Restful API,以及配置Swagger框架,读者可以轻松地生成API文档和进行API测试,从而提升开发效率和项目可维护性。该博文帮助读者了解了如何使用Spring Boot和Swagger框架来简化API文档编写和测试的过程,为Web应用开发提供了有力的支持。

概述

在现代的Web应用中,使用Restful风格的API成为了一种常见的设计方式。本篇技术长博文将详细介绍如何在Spring Boot应用中构建Restful服务,并结合Swagger框架实现自动生成API文档和提供API测试工具。

1.RESTful介绍

1、RESTful是目前流行的互联网软件服务架构设计风格。
2、REST(Representational State Transfer,表述性状态转移)一词是由Roy Thomas Fielding在2000年的博士论文中提出的,它定义了互联网软件服务的架构原则,如果一个架构符合REST原则,则称之为RESTful架构。
3、REST并不是一个标准,它更像一组客户端和服务端交互时的架构理念和设计原则,基于这种架构理念和设计原则的Web API更加简洁,更有层次。

2.RESTful的特点

1、每一个URI代表一种资源
2、客户端使用GET、POST、PUT、DELETE四种表示操作方式的动词对服务端资源进行操作:GET用于获取资源,POST用于新建资源(也可以用于更新资源),PUT用于更新资源,DELETE用于删除资源。
3、通过操作资源的表现形式来实现服务端请求操作。
4、资源的表现形式是JSON或者HTML。
5、客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都包含必需的信息。

3.RESTful API

1、符合RESTful规范的Web API需要具备如下两个关键特性:
2、安全性:安全的方法被期望不会产生任何副作用,当我们使用GET操作获取资源时,不会引起资源本身的改变,也不会引起服务器状态的改变。
3、幂等性:幂等的方法保证了重复进行一个请求和一次请求的效果相同(并不是指响应总是相同的,而是指服务器上资源的状态从第一次请求后就不再改变了),在数学上幂等性是指N次变换和一次变换相同。

4.HTTP Method

1、HTTP提供了POST、GET、PUT、DELETE等操作类型对某个Web资源进行Create、Read、Update和Delete操作。
2、一个HTTP请求除了利用URI标志目标资源之外,还需要通过HTTP Method指定针对该资源的操作类型,一些常见的HTTP方法及其在RESTful风格下的使用:

HTTP 方法 操作 返回值 特定返回值
GET 获取资源的信息。 200 OK 资源的详细信息。
POST 创建新资源。 201 Created 新资源的URL,以及可能的资源信息。
PUT 更新现有资源或创建新资源。 200 OK 更新后的资源信息。
PATCH 部分更新资源。 200 OK 更新后的资源信息。
DELETE 删除资源。 204 No Content 无。
HEAD 获取资源的头部信息。 200 OK 与GET相同的头部信息,但不返回实际数据。
OPTIONS 获取服务器支持的HTTP方法等信息。 200 OK 支持的方法列表以及其他元数据。

需要注意的是,这里的HTTP状态码是典型的示例,实际应用中可能会根据情况而有所不同。此外,特定返回值也可能因应用程序而异。在实际开发中,您应该根据自己的应用需求和设计选择合适的HTTP状态码和返回值。

5.HTTP状态码

1、HTTP状态码就是服务向用户返回的状态码和提示信息,客户端的每一次请求,服务都必须给出回应,回应包括HTTP状态码和数据两部分。
2、HTTP定义了40个标准状态码,可用于传达客户端请求的结果。状态码分为以下5个类别:
3、1xx:信息,通信传输协议级信息
4、2xx:成功,表示客户端的请求已成功接受
5、3xx:重定向,表示客户端必须执行一些其他操作才能完成其请求
6、4xx:客户端错误,此类错误状态码指向客户端
7、5xx:服务器错误,服务器负责这写错误状态码
RESTful API中使用HTTP状态码来表示请求执行结果的状态,适用于REST API设计的代码以及对应的HTTP方法。

HTTP 状态码 返回值 HTTP 方法 特定返回值
200 OK 请求成功完成,有响应数据。 GET, POST, PUT, PATCH 请求的资源数据或操作结果。
201 Created 资源创建成功。 POST, PUT 包含新资源的URL和可能的资源信息。
204 No Content 请求成功完成,无响应数据。 DELETE 无。
400 Bad Request 请求无效,服务器无法理解。 任何方法 包含错误信息的响应体。
401 Unauthorized 请求要求身份验证或认证失败。 任何方法 包含错误信息的响应体。
403 Forbidden 服务器理解请求,但拒绝执行。 任何方法 包含错误信息的响应体。
404 Not Found 请求的资源不存在。 任何方法 包含错误信息的响应体。
405 Method Not Allowed 请求方法对指定的资源不适用。 任何方法 包含错误信息的响应体,以及支持的方法列表。
500 Internal Server Error 服务器遇到错误,无法完成请求。 任何方法 包含错误信息的响应体。

请注意,这些是HTTP状态码的常见示例,实际应用中可能会根据情况而有所不同。在开发中,您应该根据HTTP规范和应用需求选择合适的状态码,并为特定的状态码提供适当的返回值和错误信息。

6.Spring Boot实现RESTful API

1、Spring Boot提供的spring-boot-starter-web组件完全支持开发RESTful API,提供了与REST操作方式(GET、POST、PUT、2、DELETE)对应的注解。
2、@GetMapping:处理GET请求,获取资源。
3、@PostMapping:处理POST请求,新增资源。
4、@PutMapping:处理PUT请求,更新资源。
5、@DeleteMapping:处理DELETE请求,删除资源。
6、@PatchMapping:处理PATCH请求,用于部分更新资源。
1、在RESTful架构中,每个网址代表一种资源,所以URI中建议不要包含动词,只包含名词即可,而且所用的名词往往与数据库的表格名对应。
2、用户管理模块API示例:

HTTP 方法 接口地址 接口说明
GET /api/user/{id} 获取特定用户的信息。
POST /api/user 创建新用户。
PUT /api/user/ 更新用户的信息。
DELETE /api/user/{id} 删除特定用户。

这些示例API表示了一个基本的用户管理模块,包括获取用户列表、获取特定用户信息、创建新用户、更新用户信息以及删除用户的功能。在实际应用中,您可以根据需求添加更多的API和功能。接口地址中的{id}表示一个动态的用户ID,实际使用时会替换为具体的用户ID。

@ApiOperation("获取用户")
   @GetMapping("/user/{id}")
   public String getUserById(@PathVariable int id){
   
       System.out.println(id);
       return "根据ID获取用户信息";
  }
   @PostMapping("/user")
   public String save(User user){
   
       return "添加用户";
  }
   @PutMapping("/user")
   public String update(User user){
   
       return "更新用户";
  }
   @DeleteMapping("/user/{id}")
   public String deleteById(@PathVariable int id){
   
       System.out.println(id);
       return "根据ID删除用户";
  }

什么是Swagger

1、Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务,是非常流行的API表达工具。
2、Swagger能够自动生成完善的RESTful API文档,,同时并根据后台代码的修改同步更新,同时提供完整的测试页面来调试API

1. 创建Spring Boot项目

首先,确保在IDE中创建了一个新的Spring Boot项目,包含Web依赖等。

2.导包

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

2. 配置Swagger

package com.yu.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration // 告诉Spring容器,这个类是一个配置类
@EnableSwagger2 // 启用Swagger2功能
public class SwaggerConfig {
   
   /**
    * 配置Swagger2相关的bean
    */
   @Bean
   public Docket createRestApi() {
   
       return new Docket(DocumentationType.SWAGGER_2)
              .apiInfo(apiInfo())
              .select()
              .apis(RequestHandlerSelectors.basePackage("com"))// com包下所有API都交给Swagger2管理
              .paths(PathSelectors.any()).build();
  }

   /**
    * 此处主要是API文档页面显示信息
    */
   private ApiInfo apiInfo() {
   
       return new ApiInfoBuilder()
              .title("演示项目API") // 标题
              .description("演示项目") // 描述
              .version("1.0") // 版本
              .build();
  }
}

3. 注意事项

Spring Boot 2.6.X后与Swagger有版本冲突问题,需要在application.properties中加入以下配置:

spring.mvc.pathmatch.matching-strategy=ant_path_matcher

4. 运行与测试

运行Spring Boot应用,访问http://localhost:****/swagger-ui.html,即可在Swagger UI界面中查看生成的API文档和测试API。
image.png

5.Swagger常用注解

注解 属性 说明 示例
@Api tags String[] 描述API的标签。 @Api(tags = "用户管理")
value String API的简要描述。 @Api(value = "用户管理API", tags = "用户管理")
@ApiOperation value String 操作的简要描述。 @ApiOperation(value = "获取用户信息", notes = "根据ID获取用户详细信息")
notes String 操作的详细描述。 @ApiOperation(value = "获取用户信息", notes = "根据ID获取用户详细信息,需要提供用户ID作为参数。")
@ApiParam name String 参数的名称。 @ApiParam(name = "id", value = "用户ID", required = true)
value String 参数的描述。 @ApiParam(name = "id", value = "用户ID", required = true, example = "123")
@ApiResponse code int HTTP响应状态码。 @ApiResponse(code = 200, message = "成功", response = User.class)
message String 响应消息。 @ApiResponse(code = 404, message = "用户不存在")
@ApiResponses value ApiResponse[] 多个响应的集合。 @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = User.class), @ApiResponse(code = 404, message = "用户不存在")})
@ApiModel value String 模型的名称。 @ApiModel(value = "User", description = "用户实体")
description String 模型的描述。 @ApiModel(value = "User", description = "用户实体,包含用户的基本信息。")

这些Swagger注解用于描述API的元数据,包括API的描述、操作的描述、参数的描述、响应的描述以及数据模型的描述等。在实际使用Swagger构建API文档时,您可以根据需要使用这些注解来提供详细的API信息。请注意,上述示例中的属性和值仅为示范,实际应用中需要根据您的API需求进行适当的配置。

总结

本文详细介绍了在Spring Boot应用中构建Restful服务并结合Swagger框架生成API文档和测试工具的步骤。通过编写Controller类定义Restful API,并配置Swagger框架,你可以轻松地生成API文档、进行API测试,并提供给前端开发人员或其他团队使用。通过学习本文,你可以更好地掌握构建易用的API文档和测试工具的技巧,提升开发效率和项目可维护性。

相关文章
|
2月前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
153 11
|
3天前
|
人工智能 自然语言处理 测试技术
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
AxBench 是由斯坦福大学推出,用于评估语言模型可解释性方法的基准测试框架,支持概念检测和模型转向任务,帮助研究者系统地比较不同控制技术的有效性。
30 5
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
|
1月前
|
分布式计算 Shell MaxCompute
odps测试表及大量数据构建测试
odps测试表及大量数据构建测试
|
24天前
|
小程序 前端开发 关系型数据库
uniapp跨平台框架,陪玩系统并发性能测试,小程序源码搭建开发解析
多功能一体游戏陪练、语音陪玩系统的开发涉及前期准备、技术选型、系统设计与开发及测试优化。首先,通过目标用户分析和竞品分析明确功能需求,如注册登录、预约匹配、实时语音等。技术选型上,前端采用Uni-app支持多端开发,后端选用PHP框架确保稳定性能,数据库使用MySQL保证数据一致性。系统设计阶段注重UI/UX设计和前后端开发,集成WebSocket实现语音聊天。最后,通过功能、性能和用户体验测试,确保系统的稳定性和用户满意度。
|
1月前
|
存储 测试技术 API
pytest接口自动化测试框架搭建
通过上述步骤,我们成功搭建了一个基于 `pytest`的接口自动化测试框架。这个框架具备良好的扩展性和可维护性,能够高效地管理和执行API测试。通过封装HTTP请求逻辑、使用 `conftest.py`定义共享资源和前置条件,并利用 `pytest.ini`进行配置管理,可以大幅提高测试的自动化程度和执行效率。希望本文能为您的测试工作提供实用的指导和帮助。
109 15
|
2月前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
501 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
2月前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
89 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
2月前
|
安全 API 数据安全/隐私保护
自学记录HarmonyOS Next DRM API 13:构建安全的数字内容保护系统
在完成HarmonyOS Camera API开发后,我深入研究了数字版权管理(DRM)技术。最新DRM API 13提供了强大的工具,用于保护数字内容的安全传输和使用。通过学习该API的核心功能,如获取许可证、解密内容和管理权限,我实现了一个简单的数字视频保护系统。该系统包括初始化DRM模块、获取许可证、解密视频并播放。此外,我还配置了开发环境并实现了界面布局。未来,随着数字版权保护需求的增加,DRM技术将更加重要。如果你对这一领域感兴趣,欢迎一起探索和进步。
94 18
|
2月前
|
安全 Ubuntu Linux
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
60 9
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
|
2月前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。

热门文章

最新文章