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文档和测试工具的技巧,提升开发效率和项目可维护性。

相关文章
|
6天前
|
Web App开发 编解码 Java
B/S基层卫生健康云HIS医院管理系统源码 SaaS模式 、Springboot框架
基层卫生健康云HIS系统采用云端SaaS服务的方式提供,使用用户通过浏览器即能访问,无需关注系统的部署、维护、升级等问题,系统充分考虑了模板化、配置化、智能化、扩展化等设计方法,覆盖了基层医疗机构的主要工作流程,能够与监管系统有序对接,并能满足未来系统扩展的需要。
33 4
|
1月前
|
数据可视化 Linux API
如何在Linux使用docker部署Swagger Editor并实现无公网IP远程协同编辑API文档
如何在Linux使用docker部署Swagger Editor并实现无公网IP远程协同编辑API文档
|
1月前
|
存储 Java 数据库
|
2月前
|
NoSQL Java Redis
springboot搭建后台框架 (二)整合Redis
springboot搭建后台框架 (二)整合Redis
41 0
|
2月前
|
SQL Java 关系型数据库
springboot搭建后台框架 (一)整合tkMapper
springboot搭建后台框架 (一)整合tkMapper
19 0
|
1月前
|
Java Spring
使用JDBCTemplate实现与Spring结合,方法公用 ——测试(EmpDaoImplTest)
使用JDBCTemplate实现与Spring结合,方法公用 ——测试(EmpDaoImplTest)
9 0
|
2月前
|
缓存 安全 Java
Shiro框架以及Spring Boot整合Shiro
Shiro框架以及Spring Boot整合Shiro
Shiro框架以及Spring Boot整合Shiro
|
3天前
|
Java Nacos 开发者
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
|
30天前
|
Java fastjson Apache
Spring Boot+Gradle+ MyBatisPlus3.x搭建企业级的后台分离框架
Spring Boot+Gradle+ MyBatisPlus3.x搭建企业级的后台分离框架
31 1
|
1月前
|
Java Spring
使用spring实现邮件的发送(含测试,源码,注释)
使用spring实现邮件的发送(含测试,源码,注释)
7 0

热门文章

最新文章