`

Spring Boot中使用Swagger2构建强大的RESTful API文档

 
阅读更多

由于Spring Boot能够快速开发、便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API。而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端。

这样一来,我们的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发、Android开发或是Web开发等。为了减少与其他团队平时开发期间的频繁沟通成本,传统做法我们会创建一份RESTful API文档来记录所有接口细节,然而这样的做法有以下几个问题:

  • 由于接口众多,并且细节复杂(需要考虑不同的HTTP请求类型、HTTP头部信息、HTTP请求内容等),高质量地创建这份文档本身就是件非常吃力的事,下游的抱怨声不绝于耳。
  • 随着时间推移,不断修改接口实现的时候都必须同步修改接口文档,而文档与代码又处于两个不同的媒介,除非有严格的管理机制,不然很容易导致不一致现象。

为了解决上面这样的问题,本文将介绍RESTful API的重磅好伙伴Swagger2,它可以轻松的整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档。它既可以减少我们创建文档的工作量,同时说明内容又整合入实现代码中,让维护文档和修改代码整合为一体,可以让我们在修改代码逻辑的同时方便的修改文档说明。另外Swagger2也提供了强大的页面测试功能来调试每个RESTful API。具体效果如下图所示:

alt=alt=

下面来具体介绍,如果在Spring Boot中使用Swagger2。首先,我们需要一个Spring Boot实现的RESTful API工程,若您没有做过这类内容,建议先阅读
Spring Boot构建一个较为复杂的RESTful APIs和单元测试

下面的内容我们会以教程样例中的Chapter3-1-1进行下面的实验(Chpater3-1-5是我们的结果工程,亦可参考)。

添加Swagger2依赖

pom.xml中加入Swagger2的依赖


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

创建Swagger2配置类

Application.java同级创建Swagger2的配置类Swagger2


@Configuration
@EnableSwagger2
public class Swagger2 {

@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.didispace.web"))
.paths(PathSelectors.any())
.build();
}

private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Spring Boot中使用Swagger2构建RESTful APIs")
.description("更多Spring Boot相关文章请关注:http://blog.didispace.com/")
.termsOfServiceUrl("http://blog.didispace.com/")
.contact("程序猿DD")
.version("1.0")
.build();
}

}

如上代码所示,通过@Configuration注解,让Spring来加载该类配置。再通过@EnableSwagger2注解来启用Swagger2。

再通过createRestApi函数创建Docket的Bean之后,apiInfo()用来创建该Api的基本信息(这些基本信息会展现在文档页面中)。select()函数返回一个ApiSelectorBuilder实例用来控制哪些接口暴露给Swagger来展现,本例采用指定扫描的包路径来定义,Swagger会扫描该包下所有Controller定义的API,并产生文档内容(除了被@ApiIgnore指定的请求)。

添加文档内容

在完成了上述配置后,其实已经可以生产文档内容,但是这样的文档主要针对请求本身,而描述主要来源于函数等命名产生,对用户并不友好,我们通常需要自己增加一些说明来丰富文档内容。如下所示,我们通过@ApiOperation注解来给API增加说明、通过@ApiImplicitParams@ApiImplicitParam注解来给参数增加说明。


@RestController
@RequestMapping(value="/users") // 通过这里配置使下面的映射都在/users下,可去除
public class UserController {

static Map<Long, User> users = Collections.synchronizedMap(new HashMap<Long, User>());

@ApiOperation(value="获取用户列表", notes="")
@RequestMapping(value={""}, method=RequestMethod.GET)
public List<User> getUserList() {
List<User> r = new ArrayList<User>(users.values());
return r;
}

@ApiOperation(value="创建用户", notes="根据User对象创建用户")
@ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
@RequestMapping(value="", method=RequestMethod.POST)
public String postUser(@RequestBody User user) {
users.put(user.getId(), user);
return "success";
}

@ApiOperation(value="获取用户详细信息", notes="根据url的id来获取用户详细信息")
@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long")
@RequestMapping(value="/{id}", method=RequestMethod.GET)
public User getUser(@PathVariable Long id) {
return users.get(id);
}

@ApiOperation(value="更新用户详细信息", notes="根据url的id来指定更新对象,并根据传过来的user信息来更新用户详细信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long"),
@ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
})
@RequestMapping(value="/{id}", method=RequestMethod.PUT)
public String putUser(@PathVariable Long id, @RequestBody User user) {
User u = users.get(id);
u.setName(user.getName());
u.setAge(user.getAge());
users.put(id, u);
return "success";
}

@ApiOperation(value="删除用户", notes="根据url的id来指定删除对象")
@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long")
@RequestMapping(value="/{id}", method=RequestMethod.DELETE)
public String deleteUser(@PathVariable Long id) {
users.remove(id);
return "success";
}

}

完成上述代码添加上,启动Spring Boot程序,访问:http://localhost:8080/swagger-ui.html
。就能看到前文所展示的RESTful API的页面。我们可以再点开具体的API请求,以POST类型的/users请求为例,可找到上述代码中我们配置的Notes信息以及参数user的描述信息,如下图所示。

altalt

API文档访问与调试

在上图请求的页面中,我们看到user的Value是个输入框?是的,Swagger除了查看接口功能外,还提供了调试测试功能,我们可以点击上图中右侧的Model Schema(黄色区域:它指明了User的数据结构),此时Value中就有了user对象的模板,我们只需要稍适修改,点击下方“Try it out!”按钮,即可完成了一次请求调用!

此时,你也可以通过几个GET请求来验证之前的POST请求是否正确。

相比为这些接口编写文档的工作,我们增加的配置内容是非常少而且精简的,对于原有代码的侵入也在忍受范围之内。因此,在构建RESTful API的同时,加入swagger来对API文档进行管理,是个不错的选择。

完整结果示例可查看Chapter3-1-5

参考信息

分享到:
评论

相关推荐

    Spring Boot 中使用 Swagger2 构建 RESTful APIs

    Spring Boot 中使用 Swagger2 构建 RESTful APIs Swagger 是一系列 RESTful API 的工具,通过 Swagger 可以获得项目的交互式文档,客户端 SDK 的自动生成等功能。Swagger 的目标是为 REST APIs 定义一个标准的、与...

    Spring Boot中使用Swagger2构建RESTful APIs

    Swagger是一个广泛使用的...以上是在Spring Boot中使用Swagger2构建RESTful APIs的相关知识点。了解和掌握这些知识点,可以帮助开发者更高效地开发、测试和维护RESTful API,同时使得API文档的管理更加规范化和自动化。

    Spring Boot Swagger2 构建RESTful API

    在Spring Boot项目中集成Swagger2,可以帮助我们快速地构建和维护高质量的RESTful API。以下将详细讲解如何利用Spring Boot与Swagger2进行集成,并展示其主要功能和步骤。 **一、集成Swagger2** 1. 添加依赖:首先...

    14springboot+Swagger2构建强大的RESTful API文档1

    .title("Spring Boot 中使用 Swagger2 构建 RESTful APIs") .contact("Zj") .version("1.0") .build(); } } ``` 配置完成后,Swagger2会自动扫描指定的包路径下的Controller,生成对应的API文档。但为了提供更...

    Spring Boot集成 Swagger2 展现在线接口文档

    在 Spring Boot 项目中使用 Swagger2,需要导入 Maven 依赖。当前官方最高版本是 2.8.0,但我们建议使用 2.2.2 版本,该版本稳定,界面友好。 ``` &lt;groupId&gt;io.springfox &lt;artifactId&gt;springfox-swagger2 ...

    spring boot 2.6.11+springcloud Swagger3构建微服务项目源码

    在Spring Boot应用中集成Swagger3,我们可以生成清晰的API文档,方便开发者理解和使用接口。Swagger UI允许我们在浏览器中直接测试API,极大地提高了开发效率和用户体验。Swagger3相比于之前的版本,提供了更多强大...

    Spring Boot 2.7.5 集成 Swagger 3

    Spring Boot 2.7.5 是一...通过这种方式,开发者可以构建一个交互式的API文档,提高开发效率,促进前后端协作。在实际项目中,还可以进一步细化配置,比如添加分组、隐藏敏感信息、设置安全策略等,以满足不同的需求。

    Spring Boot技术知识点:Spring Boot2.7以上支持使用Swagger3

    在Spring Boot 2.7及以上版本,它开始支持Swagger 3,这是一个强大的API文档工具,帮助开发者构建清晰、易于理解的RESTful API接口。 Swagger 3,也称为OpenAPI Specification 3.0,是Swagger的最新版本,基于...

    2023最新《Spring Boot基础教程》

    Spring Boot 2.x基础教程:使用Swagger2构建强大的API文档 Spring Boot 2.x基础教程:JSR-303实现请求参数校验 Spring Boot 2.x基础教程:Swagger接口分类与各元素排序问题详解 Spring Boot 2.x基础教程:Swagger...

    spring boot 整合 swagger2

    Swagger2是一个流行的API开发工具,它可以自动生成API文档,方便开发者理解和使用API。在Spring Boot项目中整合Swagger2,可以让我们轻松地管理和展示API接口,极大地提高了开发效率和协作体验。 首先,我们需要在...

    在Spring Boot中使用swagger-bootstrap-ui的方法

    在Spring Boot中使用swagger-bootstrap-ui可以提供一个更加友好的API文档和交互方式。本文将介绍在Spring Boot中使用swagger-bootstrap-ui的方法。 首先,需要在pom.xml文件中引入swagger和swagger-bootstrap-ui的...

    springboot整合Swagger2,构建接口管理界面

    整合到Spring Boot中,构建强大RESTful API文档。省去接口文档管理工作,修改代码,自动更新,Swagger2也提供了强大的页面测试功能来调试RESTful API。 2、Swagger2常用注解 Api:修饰整个类,描述Controller的作用...

    Swagger3生成API文档配置(Demo)

    总结,Swagger3是Spring Boot项目中用于生成API文档的强大工具,通过注解和配置,我们可以轻松地创建和管理RESTful API的文档。通过运行应用,我们可以利用Swagger UI进行接口的测试和调试,极大地提高了开发效率和...

    spring-boot集成swagger

    将 Swagger 集成到 Spring Boot 中,可以实现自动化地生成 API 文档,提高开发效率。 **一、Spring Boot 集成 Swagger 前置知识** 1. **Spring Boot**:基于 Spring 框架的快速开发工具,提供自动配置、内嵌服务器...

    java的HTTP API文档生成中间件Swagger使用教程.zip

    `Spring Boot中使用Swagger2构建强大的RESTful API文档 - 简书.url`等链接提供了关于如何在Spring Boot项目中集成Swagger2的步骤,包括添加依赖、配置 Swagger 初始化、编写API注解以及如何通过Swagger UI进行交互式...

    Spring Boot 整合Swagger实现API管理-教案.pdf

    该类中需要创建一个Docket的Bean,Docket是Swagger的核心配置类,用于定义如何构建API文档。 ```java package com.yuandengta.boot.config; import org.springframework.context.annotation.Bean; import org....

    Spring Boot整合swagger的使用方法详解教程.docx

    Spring Boot 整合 Swagger 是一种常见的方式,用于构建RESTful API的交互式文档。Swagger 提供了一种标准化的方式来描述 RESTful API,使得开发者能够轻松地理解接口的使用方法,并进行在线调试。以下是对如何在 ...

    swagger2集成spring boot2.zip

    Swagger2 是一个流行的 API 文档化工具,它允许开发者通过注解轻松地在 Spring Boot2 应用程序中创建和管理 RESTful API 的文档。Swagger2 提供了一个交互式的 UI,使得开发人员能够测试、浏览和理解 API。下面将...

Global site tag (gtag.js) - Google Analytics