了解Swagger的作用和概念
了解前后端分离
在SpringBoot中集成Swagger
前后端分离
Vue+SpringBoot
后端时代:前端只用管理静态页面;html======》后端,模板引擎JSP===>后端是主力
前后端分离时代:
后端:后端控制层,服务层,数据访问层【后端团队】
前端:前端控制层,视图层 【前端团队】
伪造后端数据,json已经存在了,不需要后端,前端工程依旧能够跑起来。
前后端如何交互?====》API
前后端相对独立,松耦合
前后端甚至可以部署在不同的服务器上
产生一个问题:
前后端集成联调,前端人员和后端人员无法做到"即使协商,尽早解决”,最终导致问题集中爆发。
解决方案:
首先指定schema计划的提纲,实时更新最新的API,降低集成的风险。
早些年:指定word计划文档。
前后端分离:
前端测试后端接口:postman
后端提供接口,需要实时更新最新的消息及改动。
Swagger:号称世界上最流行的API框架
RestFul API文档在线自动生成工具===>API文档与API定义同步更新。
直接运行,可以在线测试API接口;
支持多种语言
swagger2
ui
在我之前的博客中提到使用idea创建SpringBoot web项目的详细步骤可以查看。
<!--swagger相关依赖-->
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
package com.swagger.demo.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
* package_name:com.swagger.demo.controller
*
* @author:徐亚远 Date:2020/6/14 10:40
* 项目名:swagger01
* Description:TODO
* Version: 1.0
**/
@RestController
public class HelloController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
return "hello World";
}
}
package com.swagger.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
/**
* package_name:com.swagger.demo.config
*
* @author:徐亚远 Date:2020/6/14 12:10
* 项目名:swagger01
* Description:TODO
* Version: 1.0
**/
@Configuration
@EnableSwagger2 //开启swagger2注解
public class SwaggerConfig {
//如何配置多个分组
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2).groupName("A");
}
@Bean
public Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2).groupName("B");
}
@Bean
public Docket docket3(){
return new Docket(DocumentationType.SWAGGER_2).groupName("C");
}
//配置swagger的docker的bean实例
@Bean
public Docket docket(Environment environment) {
//设置要显示swagger的环境
Profiles profiles = Profiles.of("dev","test");
// 通过 environment.acceptsProfiles(profiles) 判断是否处在自己设置的环境
Boolean flag = environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
// 配置是否启用swagger ,为false swagger不能在浏览器中使用
.enable(flag)
.groupName("亚远")
.select()
//RequestHandlerSelectors 配置要扫描接口的方式
//basePackage() 指定要扫描的包 推荐使用此种方式
//any() 扫描全部
//none 都不扫描
//withClassAnnotation() 扫描类上的注解
//withMethodAnnotation() 扫描方法上的注解
.apis(RequestHandlerSelectors.basePackage("com.swagger.demo"))
//paths() 过滤什么路径
//.paths(PathSelectors.ant("/hello"))
.build()
;
}
//配置swagger的ApiInfo信息
public ApiInfo apiInfo() {
//作者信息
Contact contact = new Contact("徐亚远", "http://www.aliwo.cn", "[email protected]");
return new ApiInfo(
"Swagger 学习",
"Swagger标签的服务学习",
"1.0",
"https://blog.csdn.net/weixin_43311650",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList<>());
}
}
我只希望我的swagger在生产环境中使用,在发布时不适用
判断是不是生产环境 flag = false
注入bean (flag)
@Bean
public Docket docket(Environment environment) {
//设置要显示swagger的环境
Profiles profiles = Profiles.of("dev","test");
// 通过 environment.acceptsProfiles(profiles) 判断是否处在自己设置的环境
Boolean flag = environment.acceptsProfiles(profiles);
.groupName("亚远")
//如何配置多个分组
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2).groupName("A");
}
@Bean
public Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2).groupName("B");
}
@Bean
public Docket docket3(){
return new Docket(DocumentationType.SWAGGER_2).groupName("C");
}
package com.swagger.demo.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* package_name:com.swagger.demo.entity
*
* @author:徐亚远 Date:2020/6/14 15:22
* 项目名:swagger01
* Description:TODO
* Version: 1.0
**/
@ApiModel("用户实体类")
public class User {
@ApiModelProperty("用户名")
/** 用户名*/
private String username;
@ApiModelProperty("密码")
/** 密码*/
private String password;
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
#配置开发环境
spring.profiles.active=dev
server.port=8080
server.servlet.context-path=/
server.port=8081
server.servlet.context-path=/
server.port=8082
server.servlet.context-path=/
package com.swagger.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SwaggerApplication {
public static void main(String[] args) {
SpringApplication.run(SwaggerApplication.class, args);
}
}
一:我们可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
二:接口文档实时更新
三:可以在线测试
Swagger是一个优秀的工具,几乎所有的大公司都有使用它。
注意点:在正式发布的时候,关闭Swagger!!!出于安全考虑,而且节省运行内存。
本项目源码可以联系博主来取噢:QQ:1462638689