Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >OpenAPI规范3-Swagger2 的美化使用

OpenAPI规范3-Swagger2 的美化使用

作者头像
软件测试君
发布于 2022-01-24 01:32:18
发布于 2022-01-24 01:32:18
6.7K00
代码可运行
举报
文章被收录于专栏:测试人生测试人生
运行总次数:0
代码可运行

背景

本人自己使用的swagger2.0,鉴于颜值和OpenAPI规范,就想体验下,后续再补充各种情况的demo

一、什么是swagger?

OpenAPI规范(OpenAPI Specification 简称OAS)是Linux基金会的一个项目,试图通过定义一种用来描述API格式或API定义的语言,来规范Restful服务开发过程。目前V3.0版本的OpenAPI规范(也就是SwaggerV2.0规范)已经发布并开源在github上。即swagger2.0是基于 The Apache License, Version 2.0许可的OAS3.0实现。

二、为什么要用Swagger管理项目(Swagger特性)?

Swagger tools提供了多个模块用户构建文档,不同的模块拥有不同的作用,主模块如下:

1、设计接口

Swagger Editor:一个强大的编辑器中设计新的api或编辑现有的api,它可以直观地呈现您的狂妄定义,并提供实时的错误反馈。可以支持json和yaml(一般使用yaml)格式的数据类型。如下图:

2、构建

通过生成服务器存根和来自swagger的规范的客户端sdk,构建并启用OAS/Swagger 的可编程语言。

3、Swagger UI

Swagger需要在后台配置对于接口的相关信息并使用注解的方式将信息通过Swagger UI进行展示,自动生成了用于视觉交互的OAS规范中描述的所有文档,所以优点在于实时,减少沟通;缺点也在于使用注解的方式,过深的与代码本身交互。

三、Swagger UI2.0的实现

1、引入maven依赖
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.4.0</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.4.0</version>
</dependency>
2、Swagger配置及静态配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.ComponentScan;  
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.async.DeferredResult;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;  
  
  
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;  
/* 
 * Restful API 访问路径: 
 * http://IP:port/{context-path}/swagger-ui.html 
 * eg:http://localhost:8080/vrworldapi/api/swagger-ui.html 
 */
@Component
@EnableSwagger2  
@ComponentScan(basePackages = {"gevek.vr.controller"})
@Configuration
public class RestApiConfig extends WebMvcConfigurationSupport{
  
    @Bean  
    public Docket createRestApi() {  
        return new Docket(DocumentationType.SWAGGER_2) 
          .apiInfo(apiInfo())  
          /*.groupName("用户数据模块")*/
          .genericModelSubstitutes(DeferredResult.class)
//              .genericModelSubstitutes(ResponseEntity.class)
                .useDefaultResponseMessages(false)
                .forCodeGeneration(false)
                .select()
                .apis(RequestHandlerSelectors.basePackage("gevek.vr.controller"))
                .paths(PathSelectors.any())  
                .build();  
    }  
  
    private ApiInfo apiInfo() {  
        return new ApiInfoBuilder()  
                .title("XXXXRESTful APIs")
                .termsOfServiceUrl("http://www.lfly.com")  
                .contact("XXXX")  
                .version("1.1")
                .license("Apache 2.0")
                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")
                .build();  
    }  
    
    @Override
 public void addResourceHandlers(ResourceHandlerRegistry registry) {
  registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
  registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
 }
} 
3、使用注解配置Controller

核心部分,需要为每一个接口配置OpenAPI规范的所有信息。常用注解如下(具体配置参数参见官网):@Api:修饰整个类,描述Controller的作用

注解名称

描述

@ApiOperation

描述一个类的一个方法,或者说一个接口

@ApiOperation:

描述一个类的一个方法,或者说一个接口

@ApiParam:

单个参数描述

@ApiModel:

用对象来接收参数

@ApiProperty:

用对象接收参数时,描述对象的一个字段

@ApiResponse:

HTTP响应其中1个描述

@ApiResponses:

HTTP响应整体描述

@ApiIgnore:

使用该注解忽略这个API

@ApiClass

@ApiError

@ApiErrors

@ApiParamImplicit

@ApiParamsImplicit

4、效果

具体每个接口参数信息如下:

四、Swagger UI的扩展

基于Swagger的注解将API个路径、描述、参数、返回值、异常状况等进行描述,swagger UI 模块仅仅是一个前端渲染框架。由于swagger默认的UI的样式虽然基于其他方式的API文件已经非常不错了,但是页面任然不是特别的美观。于是出现了swagger-ui-layerSwagger-Bootstrap-UI等框架,其本质仅仅是一个更友好和美观的前端UI界面的实现,解析的数据来源于 /v2/api-docs,而底层依然依赖于swagger的注解功能。

1、swagger-ui-layer

pom.xml中引入swaggerswagger-ui-layer和依赖,其他与使用swagger2一致,maven依赖如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>com.github.caspar-chen</groupId>
    <artifactId>swagger-ui-layer</artifactId>
    <version>0.0.2</version>
</dependency>
 

需要注意的一点是 swagger api 的默认地址是/v2/api-docs 所以swagger-ui-layer也读取的是默认地址, 所以在new Docket()的时候不能指定group参数,否则 swagger api的地址会在后面加入group的参数导致swagger-ui-layer不能正确请求到数据。即使用自定义后的ui不能使用分组功能将同一类型的api进行拆分。swagger-ui-layer 的默认访问地址是 http://{port}/docs.html,而美化的界面如下:

2、Swagger-Bootstrap-UI

Swagger-Bootstrap-UIswagger-ui-layer大致相同,需要引入的依赖如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>swagger-bootstrap-ui</artifactId>
    <version>1.6</version>
</dependency>

swagger-bootstrap-ui默认访问地址是:http://{port}/doc.html

需要注意:swagger封装给出的请求地址默认是/v2/api-docs,所以swagger-bootstrap-ui调用后台也是/v2/api-docs,不能带后缀,且需返回json格式数据,框架如果是spring boot的可以不用修改,直接使用,如果是Spring MVCweb.xml中配置了DispatcherServlet,则需要追加一个url匹配规则,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<servlet>
    <servlet-name>cmsMvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:config/spring.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
 
<!--默认配置,.htm|.do|.json等等配置-->
<servlet-mapping>
    <servlet-name>cmsMvc</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>
<!-- 配置swagger-bootstrap-ui的url请求路径-->
<servlet-mapping>
    <servlet-name>cmsMvc</servlet-name>
    <url-pattern>/v2/api-docs</url-pattern>
</servlet-mapping>
 
效果图如下:
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Swagger 3.0 官方教材出炉,野生的可以扔了!
链接:blog.csdn.net/wangzhihao1994/article/details/108408420
开发者技术前线
2020/11/23
1.9K0
Swagger 3.0 官方教材出炉,野生的可以扔了!
SpringBoot 集成 Swagger-Bootstrap-UI,页面更清爽!
之前在创业公司待的时候,用过swagger,因为我第一天来这家公司工作,第一个任务就是做接口文档自动化。
猿天地
2020/12/03
7520
SpringBoot 集成 Swagger-Bootstrap-UI,页面更清爽!
Swagger笔记—Swagger3详细配置
Swagger是一组围绕 OpenAPI 规范构建的开源工具,可帮助您设计、构建、记录和使用 REST API。主要的 Swagger 工具包括:Swagger Editor – 基于浏览器的编辑器,您可以在其中编写 OpenAPI 规范。Swagger UI – 将 OpenAPI 规范呈现为交互式 API 文档。Swagger2于17年停止维护,现在最新的版本为 Swagger3(Open Api3)。
软件测试君
2022/01/24
6.3K0
Swagger笔记—Swagger3详细配置
在线问题反馈模块实战(七):安装部署swagger2
       接下来的这几期,bug菌想跟大家分享一下自己昨天刚接到一个临时的需求,热乎着呢,想分享一下自己是如何面对临时需求并制定整个开发周期,其中包括从梳理业务到创建业务表再到实现业务逻辑形成闭环再到与前端对接,其中会穿插一些业务拓展及功能性拓展,这一条龙流程在线与大家一起见证,分享给刚入门的小伙伴,希望对你们有所帮助。
bug菌
2023/05/27
4190
在线问题反馈模块实战(七):安装部署swagger2
SpringBoot集成Swagger-Bootstrap-UI,页面更清爽!
之前在创业公司待的时候,用过swagger,因为我第一天来这家公司工作,第一个任务就是做接口文档自动化。后来觉得它不太好用,在浏览技术网站的时候,偶然发现swagger-bootstrap-ui,于是便重构了,把swagger-bootstrap-ui整合进来,后来发现不仅仅对我们后端有帮助,主要方便我们将接口进行归类,同样对安卓小伙伴也有帮助,他们可以看这个接口文档进行联调。当初我使用swagger-boostrap-ui的时候,那个时候还是1.x版本,如今swagger-bootsrap-ui到2.x,同时也更改名字knife4j,适用场景从过去的单体到微服务。也算是见证咱们国人自己的开源项目从小到大。
搜云库技术团队
2021/04/28
6810
SpringBoot集成Swagger-Bootstrap-UI,页面更清爽!
十一.SpringBoot配置Swagger3
1.简介 ▌swagger介绍 Swagger 是一套基于 OpenAPI 规范(OpenAPI Specification,OAS)构建的开源工具,后来成为了 Open API 标准的主要定义者,现在最新的版本为17年发布的 Swagger3(Open Api3)。 国内绝大部分人还在用过时的swagger2(17年停止维护并更名为swagger3) 对于 Rest API 来说很重要的一部分内容就是文档,Swagger 为我们提供了一套通过代码和注解自动生成文档的方法,这一点对于保证API 文档的及时
十分钟空间
2022/08/17
3.2K0
十一.SpringBoot配置Swagger3
SpringBoot中使用Swagger详解
Swagger是一套基于OpenAPI规范构建的开源工具,可以帮助我们设计、构建、记录以及使用Rest API。Swagger主要包括了一下三个部分:
秋名山码神
2023/01/13
6950
Swagger 3.0使用教程
由于Spring的流行,Marty Pitt编写了一个基于Spring的组件swagger-springmvc,用于将swagger集成到springmvc中来,而springfox则是从这个组件发展而来。
小黑同学
2020/11/24
28.3K0
Swagger 3.0使用教程
Swagger技术(swagger2/swagger3/knife4j)
接口文档对于前后端开发人员都十分重要。 尤其近几年流行前后端分离后接口文档又变成重中之重。 接口文档固然重要,但是由于项目周期等原因后端人员经常出现无法及时更新, 导致前端人员抱怨接口文档和实际情况不一致。 很多人员会抱怨别人写的接口文档不规范,不及时更新。 当时自己写的时候确实最烦去写接口文档。这种痛苦只有亲身经历才会牢记于心。 如果接口文档可以实时动态生成就不会出现上面问题。 Swagger 可以完美的解决上面的问题。
时间静止不是简史
2022/12/02
2.5K0
Swagger技术(swagger2/swagger3/knife4j)
Spring Boot 使用 Swagger3 生成 API 接口文档
在之前的文章中,我们已经讲了如何利用 Spring Boot 来集成 Swagger2,详情可戳:Spring Boot 集成 Swagger2,构建强大的 API 文档[1]。但其实 Swagger2 中主流的 2.9.2 自 2018 年发布后就已经好久没更新了,而在时隔两年之后的 2020 年,Swagger3 终于发布了。
村雨遥
2022/01/19
27.4K1
Spring Boot 使用 Swagger3 生成 API 接口文档
Swagger 3.0配置整合使用教程
SpringBoot项目整合swagger2需要用到两个依赖:springfox-swagger2和springfox-swagger-ui,用于自动生成swagger文档。
小黑同学
2022/05/10
4K0
Swagger 3.0配置整合使用教程
springboot Swagger3 更新配置详解
4.访问 127.0.0.1:8081/swagger-ui/index.html
FHAdmin
2021/06/30
4.5K0
SpringBoot实战:整合Swagger3实现在线Api文档
├── controller — 控制层(将请求通过 url 匹配,分配到不同的接收器/方法进行处理,然后返回结果)
栗筝i
2022/12/11
1.3K0
SpringBoot实战:整合Swagger3实现在线Api文档
前端嫌弃原生Swagger界面太low,于是我给她开通了超级VIP
接口文档想必是许多开发小伙伴的噩梦,不仅要写详细,还要及时维护文档与后端代码保持一致,稍有没及时更新接口文档,前端同学肯定会抱怨后端同学给的文档与实际情况不一致。
陈皮的JavaLib
2021/03/28
6910
前端嫌弃原生Swagger界面太low,于是我给她开通了超级VIP
集成Swagger 学习
产生的问题 前后端集成,前端或者后端无法做到“及时协商,尽早解决”,最终导致问题集中爆发
默 语
2024/11/20
920
集成Swagger 学习
Swagger+knife4j 易于整合SpringBoot的OpenAPI文档生成利器
前端和后端的联调离不开API文档,而手动编写API文档是一项耗时又费力的操作。Swagger正是基于简化API文档的输出的一个优秀的开源框架,通过OpenAPI的规范呈现接口信息,方便的提供测试和联调。这样,如果按照新的开发模式,在开发新版本或者迭代版本的时候,只需要更新Swagger描述文件,就可以自动生成接口文档和客户端服务端代码,做到调用端代码、服务端代码以及接口文档的一致性。
Dream城堡
2022/01/07
1.6K0
Swagger+knife4j 易于整合SpringBoot的OpenAPI文档生成利器
最新版Swagger 3升级指南和新功能体验!
Swagger 3.0 发布已经有一段时间了,它于 2020.7 月 发布,但目前市面上使用的主流版本还是 Swagger 2.X 版本和少量的 1.X 版本,然而作为一名合格的程序员怎么能不折腾新技术呢?所以本期就大家带来一篇最新版 Swagger 的内容,本文会带大家看最新版 Swagger 有哪些改变?又是如何将老版本 Swagger 升级到新版的?
磊哥
2021/03/15
6.3K0
代码自动生成文档 - Springfox(Swagger2)
完成以上步骤后,启动项目后可以在浏览器中打开连接http://localhost:18080/swagger-ui.html,则可以看到接口文档,并且可以直接测试接口(参考第一幅图)
十毛
2019/03/27
1.6K0
代码自动生成文档 - Springfox(Swagger2)
SpringBoot集成Swagger-Bootstrap-UI,页面更清爽!
之前在创业公司待的时候,用过swagger,因为我第一天来这家公司工作,第一个任务就是做接口文档自动化。
好好学java
2021/04/30
5470
SpringBoot集成Swagger-Bootstrap-UI,页面更清爽!
SpringBoot集成Swagger
bootstrap-ui 访问 http://localhost:8081/doc.html
shaoshaossm
2022/12/27
2910
SpringBoot集成Swagger
相关推荐
Swagger 3.0 官方教材出炉,野生的可以扔了!
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验