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

相关文章
|
4月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
151 2
|
9天前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
2月前
|
Web App开发 JSON 测试技术
API测试工具集合:让接口测试更简单高效
在当今软件开发领域,接口测试工具如Postman、Apifox、Swagger等成为确保API正确性、性能和可靠性的关键。Postman全球闻名但高级功能需付费,Apifox则集成了API文档、调试、Mock与自动化测试,简化工作流并提高团队协作效率,特别适合国内用户。Swagger自动生成文档,YApi开源但功能逐渐落后,Insomnia界面简洁却缺乏团队协作支持,Paw仅限Mac系统。综合来看,Apifox是国内用户的理想选择,提供中文界面和免费高效的功能。
|
3月前
|
存储 安全 Java
Spring Boot 编写 API 的 10条最佳实践
本文总结了 10 个编写 Spring Boot API 的最佳实践,包括 RESTful API 设计原则、注解使用、依赖注入、异常处理、数据传输对象(DTO)建模、安全措施、版本控制、文档生成、测试策略以及监控和日志记录。每个实践都配有详细的编码示例和解释,帮助开发者像专业人士一样构建高质量的 API。
129 9
|
4月前
|
Java 测试技术 API
详解Swagger:Spring Boot中的API文档生成与测试工具
详解Swagger:Spring Boot中的API文档生成与测试工具
174 4
|
4月前
|
人工智能 Java API
Spring AI Fluent API:与AI模型通信的流畅体验
【11月更文挑战第24天】随着人工智能(AI)技术的飞速发展,越来越多的应用场景开始融入AI技术以提升用户体验和系统效率。在Java开发中,与AI模型通信成为了一个重要而常见的需求。为了满足这一需求,Spring AI引入了ChatClient,一个提供流畅API(Fluent API)的客户端,用于与各种AI模型进行通信。本文将深入探讨ChatClient的底层原理、业务场景、概念、功能点,并通过Java代码示例展示如何使用Fluent API与AI模型进行通信。
99 0
|
3天前
|
存储 供应链 监控
1688商品数据实战:API搜索接口开发与供应链分析应用
本文详细介绍了如何通过1688开放API实现商品数据的获取与应用,涵盖接入准备、签名流程、数据解析存储及商业化场景。开发者可完成智能选品、价格监控和供应商评级等功能,同时提供代码示例与问题解决方案,确保法律合规与数据安全。适合企业开发者快速构建供应链管理系统。
|
1月前
|
API PHP 开发者
速卖通商品详情接口(速卖通API系列)
速卖通(AliExpress)是阿里巴巴旗下的跨境电商平台,提供丰富的商品数据。通过速卖通开放平台(AliExpress Open API),开发者可获取商品详情、订单管理等数据。主要功能包括商品搜索、商品详情、订单管理和数据报告。商品详情接口aliexpress.affiliate.productdetail.get用于获取商品标题、价格、图片等详细信息。开发者需注册账号并创建应用以获取App Key和App Secret,使用PHP等语言调用API。该接口支持多种请求参数和返回字段,方便集成到各类电商应用中。
|
1月前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
72 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
18天前
|
机器学习/深度学习 JSON 算法
淘宝拍立淘按图搜索API接口系列的应用与数据解析
淘宝拍立淘按图搜索API接口是阿里巴巴旗下淘宝平台提供的一项基于图像识别技术的创新服务。以下是对该接口系列的应用与数据解析的详细分析