一、简介

在当下这个前后端分离的技术趋势下,前端工程师过度依赖后端工程师的接口和数据,给开发带来了两大问题:

问题一、后端接口查看难:要怎么调用?参数怎么传递?有几个参数?参数都代表什么含义?

问题二、返回数据操作难:数据返回不对或者不够怎么办?怎么才能灵活的操作数据?

这是很多公司前后端分离之后带来的困扰,那怎么来解决这些问题?

问题一的一般解决方案:后端团队共同维护一个在线文档,每次改接口再去改对应的文档,但难免会遗漏,花的大力气但却效果平平。

问题二的一般解决方案:自己搭建一个Mock服务器,然后一个接口一个接口手动去录规则,还是一个费力的体力活。

那有没有最优的解决方案,来解决以上两个问题呢?答案是肯定的,那就是将要登场的“Swagger”和“Easy Mock”。

1.1 Swagger介绍

Swagger是全球最流行的接口文档自动生成和测试的框架,几乎支持所有的开发语言。

1.2 Easy Mock介绍

Easy Mock是一个可视化,并且能快速生成 模拟数据 的持久化服务。

Easy Mock能一键导入Swagger所有接口,省去了手动录制接口的麻烦,而且能够完美的适配Swagger中的代码注释,可谓开发利器。

Easy Mock数据是保存在云端的,而且可以创建团队项目,可以真正的实现前端脱离后端进行项目开发。

接下来一起来看看怎么在项目中集成Swagger和Easy Mock吧。

1.3 开发环境

JDK 8

Spring Boot 2.0.4

Swagger 2.9.2

IDEA 2018.2

二、Swagger集成

本文介绍的Swagger是基于Spring Boot框架的,一起来看具体的实现步骤。

2.1 添加依赖

配置pom.xml,添加如下代码:

io.springfox

springfox-swagger2

2.9.2

io.springfox

springfox-swagger-ui

2.9.2

其中:

springfox-swagger2 用于JSON API文档的生成;

springfox-swagger-ui 用于文档界面展示。

更多版本请访问:

2.2 注册Swagger

在源码的根目录也就是Appliction.java的同级目录,创建Java类“SwaggerConfig.java”(命名无所谓),代码如下:

import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import springfox.documentation.service.ApiInfo;

import springfox.documentation.spi.DocumentationType;

import springfox.documentation.spring.web.plugins.Docket;

import springfox.documentation.swagger2.annotations.EnableSwagger2;

import static springfox.documentation.builders.PathSelectors.regex;

@Configuration

@EnableSwagger2

@ConditionalOnExpression("${swagger.enable:true}")

public class SwaggerConfig {

@Bean

public Docket swaggerSpringMvcPlugin() {

ApiInfo apiInfo = new ApiInfo(

"Spring Boot APIs",

"Spring Boot + Swagger2",

"1.0.0",

null,

"王磊的博客",

"作者:王磊",

"http://www.apigo.cn/");

Docket docket = new Docket(DocumentationType.SWAGGER_2)

.select()

.paths(regex("/api/.*"))

.build()

.apiInfo(apiInfo)

.useDefaultResponseMessages(false);

return docket;

}

}

其中“@ConditionalOnExpression”为Spring的注解,用户是否实例化本类,用于是否启用Swagger的判断(生产环境需要屏蔽Swagger)。

2.3 生产环境禁用Swagger

是否启用Swagger是在application.properties文件里配置的,配置如下:

swagger.enable=true

生产环境禁用,设置为false即可。

2.4 添加文档注释

完成以上三个步骤,已经完成了Spring Boot对Swagger的集成,但是文档不够友好,比如类、接口的中文说明、参数的说明,是没有的,需要在代码中完成。

如下代码:

@RestController

@RequestMapping("/api/user")

@Api(tags = "用户控制器")

public class UserController {

@ApiOperation(value = "打招呼", notes = "测试方法")

@ApiImplicitParam(name = "name", value = "姓名")

@RequestMapping(value = "/sayhi", method = RequestMethod.POST)

public String sayHi(String name) {

return "Hello," + name;

}

@ApiOperation(value = "获取所有用户", notes = "查询分页数据")

@RequestMapping(value = "/getall", method = RequestMethod.POST)

public String getAll() {

return "所有用户";

}

}

其中@Api是用来描述类的,@ApiOperation是用来描述方法的,@ApiImplicitParam是用来描述参数的,更多注解说明请看下文。

三、Swagger文档注解

我们现在已经对Swagger有了初步的认识,本节重点来看Swagger注解的使用。

Swagger注解的作用是给接口添加注释的。

3.1 @Api 类注释

@Api:用来描述类的,属性如下:

tags 描述类的用途

value 对显示而言没有任何用途可以不用设置

代码示例:

@Api(tags = "文章接口")

3.2 @ApiOperation 方法注释

@ApiOperation:用来描述方法的,属性如下:

value 方法的描述

notes 方法备注说明

代码示例:

@ApiOperation(value = "获取所有文章", notes = "查询分页数据")

效果如下图:

3.3 @ApiImplicitParams 参数注释

@ApiImplicitParams:描述多参数

@ApiImplicitParam:描述单参数

属性如下:

name 参数

value 参数的描述

required 是否必传

paramType 参数存放位置:header、query、path(resuful接口)、body、form

dataType 参数类型

defaultValue 参数默认值

代码示例:

@ApiImplicitParams({

@ApiImplicitParam(name = "name", value = "姓名", required = true, paramType = "form"),

@ApiImplicitParam(name = "age", value = "年龄", required = true, paramType = "form"),

})

效果如下图:

3.4 @ApiModel 实体对象描述

@ApiModel:实体类名描述,属性如下:

description 类描述

@ApiModelProperty:字段描述,属性如下:

value 字段描述

示例如下:

@ApiModel(description= "返回响应数据")

public class RestMessage implements Serializable{

@ApiModelProperty(value = "是否成功")

private boolean success=true;

@ApiModelProperty(value = "返回对象")

private Object data;

@ApiModelProperty(value = "错误编号")

private Integer errCode;

@ApiModelProperty(value = "错误信息")

private String message;

/* getter/setter */

}

四、Easy Mock使用

Easy Mock是在线的Mock(模拟)服务器,注册账号即可使用,数据存储云端,使用简单不需要在本地进行任何配置,具体操作步骤如下文。

4.1 注册账号

4.2 配置Easy Mock项目

进入管理页面之后,点击演示个人演示项目(默认创建的可以直接拿来用),如下图:

进入接口列表,点击设置=>点击Swagger Docs API选择Upload(本地文件上传),如下图:

4.3 导出Swagger接口

浏览器访问:http://localhost:8080/v2/api-docs 就看到项目的所有接口JSON格式的,右键另存为文件,如下图:

继续4.2的操作,上传刚刚保存的JSON文件到Easy Mock。

4.4 更新接口

保存完JSON数据之后就返回到项目的设置页了,这个时候点击“同步Swagger”就看到所有接口了。如下图:

到此为所有的接口已经导入了,可以点击接口列表右侧的复制按钮,进行愉快的调用了。

这个时候就可以完全脱离后端了,点击接口详情,可以看出Easy Mock完美识别了Swagger注释也有了,如下图:

4.5 修改数据

接口的调用没问题,接下来就是修改操作数据了,点击右侧的相应接口的修改按钮,如下图:

进入编辑页面,你现在编辑的数据就是接口要返回的数据,数据是JSON格式的,并且是在线保存云端,无须担心数据丢失,如下图:

编辑完直接点击更新接口即可,注意编辑页面还有一个预览按钮,点入可以模拟请求,这下连Postman都省了,效果如下:

五、总结

到此为止所有内容已经演示完了,我们解决前后端分离带来接口管理难、数据操作难的问题。自动生成接口文档、一键模拟数据,让我们不再依赖后端,只专注前端的业务,等后端把接口写完之后,再进行联合调试就可以了,这样我们就不费吹灰之力搞定了所有难题,并且灵活的配置让我们可以不影响和污染生产环境,生产环境设置禁用Swagger即可,并且有了预览功能之后我们甚至连Postman都省了。

参考资料

idea swagger生成接口文档_Spring Boot(九)Swagger2自动生成接口文档和Mock模拟数据...相关推荐

  1. WPS文档如何设置或取消自动生成序号

    WPS文档如何设置或取消自动生成序号 文件  - 选项 - 编辑 - 取消勾选"自动编号"栏目下的"键入时自动应用自动编号列表",点击右下角的"确定& ...

  2. VUE开发环境下mock模拟数据与后端接口对接示例

    在以往的前端开发中,前端严重依赖后端,必须等待后端接口开发出来才能继续开发.使用mock,可以使得前后端开发异步进行,互不影响.Mock.js 是一个模拟数据生成器,使用它可以拦截ajax请求,直接模 ...

  3. java 生成mysql dto_如何根据动态SQL代码自动生成DTO

    当前的状况 一般做数据库相关开发, 除非学习, 否则很少有人愿意直接使用JDBC.本来Java代码就比较啰嗦了,而直接用JDBC写代码之啰嗦简直有些令人发狂!所以在实际开发过程中,我们通常都会使用一些 ...

  4. idea swagger生成接口文档_spring boot集成Swagger-UI接口文档

    本文介绍如何用spring boot集成Swagger-UI,实现项目在线接口文档 一.Swagger-UI简介 Swagger是一个Restful风格接口的文档在线自动生成和测试的框架 官网对Swa ...

  5. Spring Boot(九)Swagger2自动生成接口文档和Mock模拟数据

    一.简介 在当下这个前后端分离的技术趋势下,前端工程师过度依赖后端工程师的接口和数据,给开发带来了两大问题: 问题一.后端接口查看难:要怎么调用?参数怎么传递?有几个参数?参数都代表什么含义? 问题二 ...

  6. spring boot api文档_Spring Boot: Spring Doc生成OpenAPI3.0文档

    1. 概述 公司正好最近在整理项目的文档,且文档对于构建REST API来说是至关重要的.在这篇文章中,我将介绍Spring Doc , 一个基于OpenAPI 3规范简化了Spring Boot 1 ...

  7. java接口废弃注释_Spring Boot如何让Web API自动生成文档,并解决swagger-annotations的API注解description属性废弃的问题...

    前后端分离的系统架构中,前端开发人员需要查看后端WEB API的文档来进行开发.采用后端API文档自动生成的方式,可以大幅提高开发效率.swagger是一个被广泛使用的文档自动生成工具,可以与多种编程 ...

  8. oracle帮助文档_Spring Boot Config文档,使用IntelliJ IDEA的两种方法

    一个Spring Boot文档,两种方式. 在优锐课的java沙龙分享中,在现代软件开发中,应用程序由配置驱动. 如果可配置属性的数量很大,则很难记住每个属性的用途,结构或类型. 因此,有必要对这些属 ...

  9. springfox源码_Spring boot整合Springfox在线生成restful的api doc

    Springfox是什么,有什么用? Springfox基于Swagger,能更方便的集成到spring boot 中,Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTf ...

最新文章

  1. UI设计师培训入门都需要学习什么技术?
  2. webpack 读取文件变量
  3. 修改 PhpStorm 的字体和样式
  4. 循环——批量处理数据
  5. fibonacci数列的性质(ZOJ3707)
  6. java中枚举表示数据状态
  7. java.util.list e_E remove()
  8. 如何查找MySQL中查询慢的SQL语句
  9. 【堆】这是要搞事情啊——取出
  10. bat调用bat注意事项(不带上参数 /b 时 会直接退出)
  11. 下载代码的两种方式ssh 和 https
  12. cefsharp 网页另存为图片,CefSharp获取页面截图
  13. js距离米转换为千米_千米换算(千米与米之间的换算题)
  14. 基于MATLAB中的GUI设计的钢琴界面设计并能发声
  15. 【PR 基础】轨道遮罩键、交叉溶解的简单使用
  16. python语言要英语基础吗_学编程需要英语基础吗?
  17. P3084 [USACO13OPEN]照片Photo 差分约束
  18. Python开多次方根
  19. firefox linux 中文字体,Ubuntu下的Firefox字体配置方案
  20. Uni-app学习过程(1)

热门文章

  1. 2017 成为更好的自己需要做的事情
  2. cocosstdio之字体之文本和FNT字体
  3. 多线程的那点儿事(之多线程数据结构)
  4. 多线程的那点儿事(之原子锁)
  5. mysql支持多语言_多种语言连接MySQL-Go语言中文社区
  6. echarts折线图怎么从y轴开始_基于echarts的双y轴实时更新折线图
  7. java继承数组实例_【Java】理解封装、继承、多态和对象数组的综合实例(简易的租车系统,附代码)...
  8. centos7 文本编辑 不能移动光标_【200905】Linux系统的使用基础(CentOS 7)
  9. 广数980tc3从u盘复制到系统_广州数控GSK980TC3车床数控系统操作手册(选)
  10. mybatis如何在控制台打印执行的sql语句