Swagger介绍及使用

导语:

相信无论是前端还是后端开发,都或多或少地被接口文档折磨过。前端经常抱怨后端给的接口文档与实际情况不一致。后端又觉得编写及维护接口文档会耗费不少精力,经常来不及更新。其实无论是前端调用后端,还是后端调用后端,都期望有一个好的接口文档。但是这个接口文档对于程序员来说,就跟注释一样,经常会抱怨别人写的代码没有写注释,然而自己写起代码起来,最讨厌的,也是写注释。所以仅仅只通过强制来规范大家是不够的,随着时间推移,版本迭代,接口文档往往很容易就跟不上代码了。

Swagger是什么?它能干什么?

img

发现了痛点就要去找解决方案。解决方案用的人多了,就成了标准的规范,这就是Swagger的由来。通过这套规范,你只需要按照它的规范去定义接口及接口相关的信息。再通过Swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接口文档,生成多种语言的客户端和服务端的代码,以及在线接口调试页面等等。这样,如果按照新的开发模式,在开发新版本或者迭代版本的时候,只需要更新Swagger描述文件,就可以自动生成接口文档和客户端服务端代码,做到调用端代码、服务端代码以及接口文档的一致性。

但即便如此,对于许多开发来说,编写这个yml或json格式的描述文件,本身也是有一定负担的工作,特别是在后面持续迭代开发的时候,往往会忽略更新这个描述文件,直接更改代码。久而久之,这个描述文件也和实际项目渐行渐远,基于该描述文件生成的接口文档也失去了参考意义。所以作为Java届服务端的大一统框架Spring,迅速将Swagger规范纳入自身的标准,建立了Spring-swagger项目,后面改成了现在的Springfox。通过在项目中引入Springfox,可以扫描相关的代码,生成该描述文件,进而生成与代码一致的接口文档和客户端代码。这种通过代码生成接口文档的形式,在后面需求持续迭代的项目中,显得尤为重要和高效。

框架说明及使用

1.说明

现在SWAGGER官网主要提供了几种开源工具,提供相应的功能。可以通过配置甚至是修改源码以达到你想要的效果。

img

Swagger Codegen: 通过Codegen 可以将描述文件生成html格式和cwiki形式的接口文档,同时也能生成多钟语言的服务端和客户端的代码。支持通过jar包,docker,node等方式在本地化执行生成。也可以在后面的Swagger Editor中在线生成。

Swagger UI:提供了一个可视化的UI页面展示描述文件。接口的调用方、测试、项目经理等都可以在该页面中对相关接口进行查阅和做一些简单的接口请求。该项目支持在线导入描述文件和本地部署UI项目。

Swagger Editor: 类似于markendown编辑器的编辑Swagger描述文件的编辑器,该编辑支持实时预览描述文件的更新效果。也提供了在线编辑器和本地部署编辑器两种方式。

Swagger Inspector: 感觉和postman差不多,是一个可以对接口进行测试的在线版的postman。比在Swagger UI里面做接口请求,会返回更多的信息,也会保存你请求的实际请求参数等数据。

Swagger Hub:集成了上面所有项目的各个功能,你可以以项目和版本为单位,将你的描述文件上传到Swagger Hub中。在Swagger Hub中可以完成上面项目的所有工作,需要注册账号,分免费版和收费版。

PS:

Springfox Swagger: Spring 基于swagger规范,可以将基于SpringMVC和Spring Boot项目的项目代码,自动生成JSON格式的描述文件。本身不是属于Swagger官网提供的,在这里列出来做个说明,方便后面作一个使用的展开。

2.基于Spring框架的Swagger流程应用

这里不会介绍Swagger的工具具体如何使用,不会讲yml或者json格式描述文件的语法规范,也不会讲如何在SpringMVC或者Spring Boot中配置Springfox-swagger。这些都能从网上找到,而且配置起来都非常的简单。

这里想讲的是如何结合现有的工具和功能,设计一个流程,去保证一个项目从开始开发到后面持续迭代的时候,以最小代价去维护代码、接口文档以及Swagger描述文件。

2.1 项目开始阶段

一般来说,接口文档都是由服务端来编写的。在项目开发阶段的时候,服务端开发可以视情况来决定是直接编写服务端调用层代码,还是写Swagger描述文件。建议是如果项目启动阶段,就已经搭好了后台框架,那可以直接编写服务端被调用层的代码(即controller及其入参出参对象),然后通过Springfox-swagger 生成swagger json描述文件。如果项目启动阶段并没有相关后台框架,而前端对接口文档追得紧,那就建议先编写swagger描述文件,通过该描述文件生成接口文档。后续后台框架搭好了,也可以生成相关的服务端代码。

2.1 项目迭代阶段

到这个阶段,事情就简单很多了。后续后台人员,无需关注Swagger描述文件和接口文档,有需求变更导致接口变化,直接写代码就好了。把调用层的代码做个修改,然后生成新的描述文件和接口文档后,给到前端即可。真正做到了一劳永逸。

2.3流程

总结一下就是通过下面这两种流程中的一种,可以做到代码和接口文档的一致性,服务端开发再也不用花费精力去维护接口文档。

流程一

img

流程二

img

给Mock系统的正常请求及响应全流程数据

很多时候,如果你能在提供接口文档的同时,把所有接口的模拟请求响应数据也提供给前端。或者有Mock系统,直接将这些模拟数据录入到Mock系统中,那将会提高前端的开发效率,减少许多发生在联调时候才会发生的问题。

通过适当地在代码中加入swagger的注解,可以让你的接口文档描述信息更加详细,如果你把每个出入参数的示例值都配上,那前端就可以直接在接口文档中拿到模拟数据。相关的注解类及参数配置可以参考文末他人写的技术文章,这里也不作展开了。

相关示例注解代码和效果图如下:

#####Controller代码
@Override@ApiOperation(value = "post请求调用示例", notes = "invokePost说明", httpMethod = "POST")public FFResponseModel<DemoOutputDto> invokePost(@ApiParam(name="传入对象",value="传入json格式",required=true) @RequestBody @Valid DemoDto input) {log.info("/testPost is called. input=" + input.toString());return new FFResponseModel(Errcode.SUCCESS_CODE, Errcode.SUCCESS_MSG);}#####接口请求入参对象   
@Data
@ApiModel(value="演示类",description="请求参数类" )
public class DemoDto implements Serializable {private static final long serialVersionUID = 1L;@NotNull@ApiModelProperty(value = "defaultStr",example="mockStrValue")private String strDemo;@NotNull@ApiModelProperty(example="1234343523",required = true)private Long longNum;@NotNull@ApiModelProperty(example="111111.111")private Double doubleNum;@NotNull@ApiModelProperty(example="2018-12-04T13:46:56.711Z")private Date date;}#####接口请求出参公共类
@ApiModel(value="基础返回类",description="基础返回类")
public class FFResponseModel<T> implements Serializable {private static final long serialVersionUID = -2215304260629038881L;// 状态码@ApiModelProperty(example="成功")private String code;// 业务提示语@ApiModelProperty(example="000000")private String msg;// 数据对象private T data;...
}#####接口请求出参实际数据对象
@Data
public class DemoOutputDto {private String res;@NotNull@ApiModelProperty(value = "defaultOutputStr",example="mockOutputStrValue")private String outputStrDemo;@NotNull@ApiModelProperty(example="6666666",required = true)private Long outputLongNum;@NotNull@ApiModelProperty(example="88888.888")private Double outputDoubleNum;@NotNull@ApiModelProperty(example="2018-12-12T11:11:11.111Z")private Date outputDate;}

效果图

模拟请求数据报文:

img

img

模拟返回数据报文:

img

总结

其实归根到底,使用Swagger,就是把相关的信息存储在它定义的描述文件里面(yml或json格式),再通过维护这个描述文件可以去更新接口文档,以及生成各端代码。而Springfox-swagger,则可以通过扫描代码去生成这个描述文件,连描述文件都不需要再去维护了。所有的信息,都在代码里面了。代码即接口文档,接口文档即代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 安装libcurl4-gnutls-dev,curl / curl.h,libcurl,libcurl4-openssl-dev,libcurl4-nss-dev库之间的区别?...

我有以下curl标题,我仍然可以安装上面提到的libcurl4包 –kafkaMetamorphosis:~$ll /usr/include/curl/total 200drwxr-xr-x 2 root root 4096 Jan 16 13:29 ./drwxr-xr-x 51 root root 20480 Jan 16 13:29 ../-rw-r--r-- 1 root root 7303 Dec 18 01:11 curlbuild.h-rw-r--r--…

c语言输入四个成绩求最高分最低分,数组实现学生成绩录入、求最高分、最低分、平均分和排序...

/*使用数组实现10名学生的成绩录入&#xff0c;并输出这10名学生中成绩的最高分最低分平均分按照分数从大到小排序思考&#xff1a;如何实现从小到大排序&#xff1f;如果学院有5个班&#xff0c;每个班30人&#xff0c;如何处理&#xff1f;求所有成绩中的最高分是哪个班的&am…

c语言课设宿舍管理程序,C语言程序课程设计宿舍管理软件.doc

C语言程序课程设计宿舍管理软件.doc课程设计(论文)题 目 名 称 宿舍管理软件课 程 名 称 C语言程序课程设计学 生 姓 名学 号系 、专 业 信息工程系、信息大类指 导 教 师 黄 同 成目 录1 前言2 需求分析62.1要求62.2任务2.3运行环境2.4开发工具3 概要设计与详细设计73.1设计原…

接口文档生成工具Swagger2的使用

一、什么是Swagger Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法&#xff0c;参数和模型紧密集成到服务器端的代码&#xff0c;允许API来始终保…

Netty详解

一&#xff0e;Netty介绍 1.什么是netty Netty 是由 JBOSS 提供的一个 Java 开源框架。Netty 提供异步的、基于事件驱动的网络应用程序框架&#xff0c;用以快速开发高性能、高可靠性的网络 IO 程序,是目前最流行的 NIO 框架&#xff0c;Netty 在互联网领域、大数据分布式计算…

有没有检查c语言编译错误的软件,求大佬解答,为什么这个程序编译软件检查不出错误...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#include /* malloc()等 */#include#include#include /* exit() */#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status; /* Status是函数的类型,其值是函数结果状态代码&…

语法分析器c语言实验报告,词法分析实验报告(C++)..doc

词法分析实验报告(C).词法分析实验报告一、实验目的1. 掌握词法分析的原理。2. 熟悉保留字表等相关的数据结构与单词的分类方法。3. 掌握词法分析器的设计与调试。二、实验内容根据编译中的分词原理,用C语言编写一个C语言的词法分析程序:.三、实验要求1. 输入:任意一个C语言程序…

详解 Java NIO

详解 Java NIO 文件的抽象化表示&#xff0c;字节流以及字符流的文件操作等属于传统 IO 的相关内容&#xff0c;我们已经在前面的文章进行了较为深刻的学习了。 但是传统的 IO 流还是有很多缺陷的&#xff0c;尤其它的阻塞性加上磁盘读写本来就慢&#xff0c;会导致 CPU 使用…

转专业计算机c语言,转专业申请美国计算机专业研究生必须要做的准备

先修课——转专业申计算机时&#xff0c;补先修课是使自己match的重要的一步。1.纽约大学的计算机硕士项目(计算机系的M.S. in Computer Science和M.S. in Information Systems项目)对申请人的先修课要求&#xff1a;The minimum prerequisite background for admission to the…

使用between and查找时间范围时的日期边界问题

最近在一个项目的后台数据库查找中&#xff0c;需要根据表中的时间字段查找某一范围内的数据&#xff08;7天、15天、30天&#xff09;&#xff0c;这时我想用between and&#xff08;其实使用DateDiff函数就可以完成&#xff0c;详情请看另一片文章&#xff1a;SQL查询今天、昨…

c语言画爱心附带解释,用C语言画一个“爱心”

/*每个main函数代表一种形状*/#includeusing namespacestd;#include#include/*int main(void){for(float y 1.5f;y > -1.5f;y - 0.06f){for(float x -1.5f;x < 1.5f;x 0.03f){float a x * x y * y - 1;putchar(a * a * a - x * x * y * y * y < 0.0f?^: );}putc…

SQL查询今天、昨天、7天内、30天

今天的所有数据&#xff1a;select * from 表名 where DateDiff(dd,datetime类型字段,getdate())0 昨天的所有数据&#xff1a;select * from 表名 where DateDiff(dd,datetime类型字段,getdate())1 7天内的所有数据&#xff1a;select * from 表名 where DateDiff(dd,dateti…

C语言入门I love China,C语言从入门到精通

如何学习C语言 Ⅰ第1篇 基础知识开启C语言编程世界之门。第1章 步入C的世界——Hello C 2视频教学录像&#xff1a;1小时34分钟你可能已经听说或知道一点C语言&#xff0c;也可能没有任何基础&#xff0c;没关系&#xff0c;本章就带领你进入C语言的编程世界。1.1 了解C语…

电气工程及其自动化学不学c语言,电气工程及其自动化学什么 就业方向有哪些...

电气工程及其自动化学什么 就业方向有哪些2019-05-05 11:16:29文/刘美娟电气工程及其自动化专业是电气信息领域的一门新兴学科&#xff0c;触角伸向各行各业&#xff0c;小到一个开关的设计&#xff0c;大到宇航飞机的研究&#xff0c;都有它的身影。由于和人们的日常生活以及工…

Tomcat(一):简介

一、概念 Tomcat 服务器是一个开源的轻量级Web应用服务器&#xff0c;在中小型系统和并发量小的场合下被普遍使用&#xff0c;是开发和调试Servlet、JSP 程序的首选。 二、原理 Tomcat结构图&#xff1a; ​ Tomcat主要组件&#xff1a;服务器Server&#xff0c;服务Serv…

Tomcat(二):server.xml配置

一、server.xml详解 Tomcat各组件关系图 ​ 1、Server ​ server.xml的最外层元素。 常用属性&#xff1a; ​ port&#xff1a;Tomcat监听shutdown命令的端口。 ​ shutdown&#xff1a;通过指定的端口&#xff08;port&#xff09;关闭Tomcat所需的字符串。修改shutd…

c语言的表达式2 4 6 8的值,C语言程序设计测试题二

一、判断题(每题2分&#xff0c;共8分)1.若有int ⅰ10, j0; 则执行完语句if (j0)ⅰ ; else ⅰ- -;ⅰ的值为11。()2.若有 int ⅰ5, j10; 则执行完语句switch ( i ){case 4: j ;case 5: j- - ;case 6: j ;case 7: j- 2;default: ;}后j的值为8。 ( )3.若有 int i10, j2;则执行完ⅰ…

Tomcat(三):日志

一、Tomcat 日志概述 日志分为两种&#xff0c;系统日志和控制台日志。 系统日志主要包含运行中日志和访问日志&#xff0c;分为5类&#xff1a;catalina、localhost、manager、localhost_access、host-manager。在logging.properties文件中进行配置。 控制台日志包含了cata…

Tomcat(四):发布和优化

一、发布Web项目的三种方式 1、在server.xml文件中找到标签元素&#xff0c;在其下使用标签配置&#xff0c;一个标签就代表一个web应用。 path属性&#xff1a;虚拟目录的名称&#xff0c;也就是对外访问路径。 docBase属性&#xff1a;web应用所在硬盘中目录地址 reloada…

c语言中foreach的用法,详解JavaScript中的forEach()方法的使用

JavaScript数组的 forEach()方法调用数组中的每个元素。语法array.forEach(callback[, thisObject]);下面是参数的详细信息&#xff1a;callback : 函数测试数组的每个元素。thisObject : 对象作为该执行回调时使用。返回值:返回创建数组。兼容性&#xff1a;这种方法是一个Jav…