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月前
|
JSON 缓存 JavaScript
深入浅出:使用Node.js构建RESTful API
在这个数字时代,API已成为软件开发的基石之一。本文旨在引导初学者通过Node.js和Express框架快速搭建一个功能完备的RESTful API。我们将从零开始,逐步深入,不仅涉及代码编写,还包括设计原则、最佳实践及调试技巧。无论你是初探后端开发,还是希望扩展你的技术栈,这篇文章都将是你的理想指南。
|
1月前
|
JSON JavaScript 前端开发
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将引导您步入Node.js的奇妙世界,通过实践操作,掌握如何使用这一强大的JavaScript运行时环境构建高效、可扩展的RESTful API。我们将一同探索Express框架的使用,学习如何设计API端点,处理数据请求,并实现身份验证机制,最终部署我们的成果到云服务器上。无论您是初学者还是有一定基础的开发者,这篇文章都将为您打开一扇通往后端开发深层知识的大门。
50 12
|
2月前
|
监控 安全 API
深入浅出:构建高效RESTful API的最佳实践
在数字化时代,API已成为连接不同软件和服务的桥梁。本文将带你深入了解如何设计和维护一个高效、可扩展且安全的RESTful API。我们将从基础概念出发,逐步深入到高级技巧,让你能够掌握创建优质API的关键要素。无论你是初学者还是有经验的开发者,这篇文章都将为你提供实用的指导和启示。让我们一起探索API设计的奥秘,打造出色的后端服务吧!
|
2月前
|
Java 测试技术 API
详解Swagger:Spring Boot中的API文档生成与测试工具
详解Swagger:Spring Boot中的API文档生成与测试工具
58 4
|
2月前
|
JSON 缓存 测试技术
构建高效RESTful API的后端实践指南####
本文将深入探讨如何设计并实现一个高效、可扩展且易于维护的RESTful API。不同于传统的摘要概述,本节将直接以行动指南的形式,列出构建RESTful API时必须遵循的核心原则与最佳实践,旨在为开发者提供一套直接可行的实施框架,快速提升API设计与开发能力。 ####
|
2月前
|
JavaScript NoSQL API
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发如同一座灯塔,指引着数据的海洋。本文将带你航行在Node.js的海域,探索如何从一张白纸到完成一个功能完备的RESTful API。我们将一起学习如何搭建开发环境、设计API结构、处理数据请求与响应,以及实现数据库交互。准备好了吗?启航吧!
|
2月前
|
JSON API 数据格式
探索后端开发:从零构建简易RESTful API
在数字时代的浪潮中,后端开发如同搭建一座桥梁,连接着用户界面与数据世界。本文将引导读者步入后端开发的殿堂,通过构建一个简易的RESTful API,揭示其背后的逻辑与魅力。我们将从基础概念出发,逐步深入到实际操作,不仅分享代码示例,更探讨如何思考和解决问题,让每一位读者都能在后端开发的道路上迈出坚实的一步。
|
2月前
|
存储 API 数据库
使用Python和Flask构建简单的RESTful API
使用Python和Flask构建简单的RESTful API
|
2月前
|
JSON 关系型数据库 测试技术
使用Python和Flask构建RESTful API服务
使用Python和Flask构建RESTful API服务
|
2月前
|
缓存 API 数据库
Python哪个框架合适开发速卖通商品详情api?
在跨境电商平台速卖通的商品详情数据获取与整合中,Python 语言及其多种框架(如 Flask、Django、Tornado 和 FastAPI)提供了高效解决方案。Flask 简洁灵活,适合快速开发;Django 功能全面,适用于大型项目;Tornado 性能卓越,擅长处理高并发;FastAPI 结合类型提示和异步编程,开发体验优秀。选择合适的框架需综合考虑项目规模、性能要求和团队技术栈。
33 2
下一篇
开通oss服务