OpenAPI规范3-Swagger2_openapi3规范_it_lihongmin的博客-程序员秘密

技术标签: 基础工程  ApenAPI规范3  swagger2  swagger  

 

    Info:之前使用的swagger是1.0版本,现在想将该规范使用到现在的项目中时,发现已经是基于OpenAPI 3的2.0版本,并且可以比1.0更方便的集成使用(1.0版本需要将GitHub中的swagger的web部分拷贝到项目下,现只需要引入maven依赖即可),后续再补充各种情况的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依赖

<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配置及静态配置

package gevek.vr.swagger;  
  
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/");
	}
} 

    静态配置说明:静态文件swagger-ui的设置路径参见下图:

 

    3、使用注解配置Controller

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

 

@Api:修饰整个类,描述Controller的作用

@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-layer和Swagger-Bootstrap-UI等框架,其本质仅仅是一个更友好和美观的前端UI界面的实现,解析的数据来源于 /v2/api-docs,而底层依然依赖于swagger的注解功能。

    1、swagger-ui-layer

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

 

<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://${host}:${port}/docs.html,而美化的界面如下:

 

     和

    2、Swagger-Bootstrap-UI

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

 

<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://${host}:${port}/doc.html。

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

 

<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>

 

    效果图如下:

 

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/it_lihongmin/article/details/78829163

智能推荐

idea集成gitBash_idea git bash_A Mr Yang的博客-程序员秘密

1.登录gitHub2.git相关配置3.替换idea的终端为gitBash4.把本地项目交由git管理5.查看修改alt+9 打开git控制台6.在github上创建仓库7.快捷键commit ctrl+kcommit and push ctrl+alt+k更新github上的变更 ctrl+t8.代码冲突1.代码没有交集 合并2.代码有交集 最好先把更改并未commit的代码,做备份和你发生冲突的同事商议...

Yii2中$model->load($data)一直返回false问题_yii2 load_幽篁晓筑的博客-程序员秘密

上次使用$model-&gt;load()方法时一直返回false,数据添加不成功,这里记录一下:出错代码:$data = [ 'name' =&gt; 'test', 'phone' =&gt; '13000000000', 'email' =&gt; '[email protected]'];$model = new User();$model-&gt;l...

xss练习,alf.nu/alert1,1-12_weixin_30635053的博客-程序员秘密

觉得自己很菜,故找一些题来做,随便找了下。记一下通关攻略https://alf.nu/alert1第一关题目:warmupfunction escape(s) { return '&lt;script&gt;console.log("'+s+'");&lt;/script&gt;';}题解:");alert(1)//分析:简单闭合一下双引号即可第二关...

福昕解析pdf库解析pdf代码记录_pdf解析dll_u010654302的博客-程序员秘密

pdfium.dll的使用//#include"stdafx.h"//#include "Transcoding.h"//#if defined(_MSC_VER) &amp;&amp; (_MSC_VER &gt; 1000)//#include &lt;afxwin.h&gt;//#include &lt;afxdisp.h&gt;//#else//#include &lt;dlfcn.h&gt;//#endif#include&lt;tchar.h&gt;#include "Ge

Unity-WebGL基于JS实现网页录音_unity webgl 录音_青衫磊落长歌行的博客-程序员秘密

用网页原生的navigator.getUserMedia录音,然后传音频流给Unity进行转AudioClip播放。

随便推点

$18343167076shy_weixin_30538029的博客-程序员秘密

我目前使用的antd版本是2.13。现在最新的是3.0.1。 脚手架工具就是create-react-app。创建完成项目后,需添加配置,执行yarn eject 也就是打开配置的文档。 然后安装第三方依赖yarn add babel-plugin-import --save-dev 找到config文件夹。里面有2个配置文档, webpack.config.dev.js和webpack.conf...

程序员必须掌握哪些算法?_程序员必须掌握的算法拓扑_renyingcai520的博客-程序员秘密

初期(校赛及省赛水题难度):  一.基本算法:  枚举. (poj1753,poj2965)  贪心(poj1328,poj2109,poj2586)  递归和分治法.  递推.  构造法.(poj3295)  模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)  二.图算法:  图的深度优先遍历和广度优先遍历.  最短路径算法(dijkstra,bellm...

Typora编写博客 Markdown语法_朱慧杰_的博客-程序员秘密

Typora编写博客作为一个程序员写博客分享技术是最基本的素养Typora是我们首选的Markdown编辑器,下载链接Typora下载Markdown语法学习标题N级标题 &lt;=&gt; N个#+空格+标题字体斜体 &lt;=&gt; 两边*包裹粗体 &lt;=&gt; 两边**包裹斜体加粗 &lt;=&gt; 两边***包裹引用一个 &gt; 加要引用的内容图片图片语法 !+ [内写图片名](图片地址–网络或本地路径)超链接超链接语法 [名字]

java获取项目绝对路径_如何获取项目绝对路径?_weixin_39628105的博客-程序员秘密

展开全部用Jsp获取、用Java类获取或用servlet获取项目绝对32313133353236313431303231363533e4b893e5b19e31333363396465路径。一、用Jsp获取1、获取文件的绝对路径String file="文件";(例如:data.mdb)String path=application.getRealPath(file);2、获取文件的绝对路径Str...

MFC实例和C#与MFC的简单比较_c# mfc_PGmaster的博客-程序员秘密

其实我刚接触MFC时间不长,在这里就不王婆卖瓜了,借花献佛,为大家推荐两个网站,是由MFC学习的必要网站(我自己认为的)(1)codeproject 这个网站有很多的MFC源码,不过这个网站需要VPN(2)我个人呢是比较推荐这个网站的,因为这个网站里面有许多的项目实例,大家可以更好地学习MFC项目的修改与设计。接下来我就作为一个初学者自己来讲述一下C#与MFC做界面的区别:(1)总的来说,...

MFC实现简单C/S socket聊天程序(含源码、实验报告)_leisure-ZL的博客-程序员秘密

文章目录一、问题二、原理三、结果展示四、源码一、问题掌握socket基于异步消息机制的网络程序设计,掌握windows系统下输入字符unicode宽字符与char字符的转换处理,掌握与SOCKET接口的相关API的功能,掌握网络编程技术的基本方法,实现一个较好的人机界面聊天程序。程序实现可以基于TCP或UDP协议,实现聊天功能,选择完成语音功能,可以考虑完成视频功能。借鉴其他常见网络程序的协议方法,设计用户协议,实现完成用户管理功能与聊天功能,实验报告中要描述协议设计。可以查资料模仿QQ实现方法尽可能

推荐文章

热门文章

相关标签