- 前后端集成联调,前端人员和后端人员无法做到“即使协商,尽早解决”,最终导致问题集中爆发;解决方案:
- 首先指定schema[计划的提纲],实时更新最新API,降低集成的风险;·早些年:指定word计划文档;
- 前后端分离:
。前端测试后端接口:postman
。后端提供接口,需要实时更新最新的消息及改动!
Swagger
- 解决以上问题
- 号称最流行的框架
Springboot集成Swagger
1.创建新springboot项目
2.导入jar包
<!-- 3.0.0需要加入启动包 -->
<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>
3.编写一个hello
@RestController
public class HelloController {
// /error
@RequestMapping(value = "/hello")
public String hello(){
return "hello";
}
}
4.写个Swagger配置
- config / SwaggerConfig
@Configuration
@EnableSwagger2 //开启swagger2
public class SwaggerConfig {
}
5.访问
http://localhost:8080/swagger-ui.html
配置Swagger信息
- config / SwaggerConfig
package com.tian.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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;
@Configuration
@EnableSwagger2 //开启swagger2
public class SwaggerConfig {
//配置了Swagger的Docket的bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo());
}
//配置Swagger信息
private ApiInfo apiInfo(){
//作者信息
Contact contact=new Contact("张三","www.baidu.com/","2545644870@qq.com");
return new ApiInfo(
"张三的Swagger日志",
"即使再小的帆也能远航",
"v1.0",
"www.baidu.com/",
contact,
"Apache2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList()
);
}
}
配置扫描接口及开关
配置接口扫描
- config/ SwaggerConfig
//配置了Swagger的Docket的bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//RequestHandlerSelectors,配置要扫描接口的方式
//basePackage: 指定要扫描的包
.apis(RequestHandlerSelectors.basePackage("com.tian.controller"))
//paths : 过滤什么路径
.paths(PathSelectors.ant("/tian/**"))
.build();
}
开关
- .enable(flag)
我只希望我的Swagger在生产环境中使用,在发布的时候不使用?
- 判断是不是生产环境 flag = false
- 注入enable (flag)
//配置了Swagger的Docket的bean实例
@Bean
public Docket docket(Environment environment){
Profiles profiles= Profiles.of("dev","test");
//获取项目的环境
boolean flag = environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.enable(flag)//enable是否启动swagger,如果为false,则swagger不能在浏览器中访问
.select()
//RequestHandlerSelectors,配置要扫描接口的方式
//basePackage: 指定要扫描的包
.apis(RequestHandlerSelectors.basePackage("com.tian.controller"))
//paths : 过滤什么路径
// .paths(PathSelectors.ant("/tian/**"))
.build();
}
配置API的分组
-
.groupName(“B”);
-
config / 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");
}
接口注释
1.pojo
@ApiModel("用户实体类")
public class User {
@ApiModelProperty("用户名")
public String username;
@ApiModelProperty("密码")
public String password;
}
2.配置
- config / SwaggerConfig
//只要我们的接口中,返回值存在实体类,他就会被扫描到Swagger中
@PostMapping(value = "/user")
public User user(){
return new User();
}
//ApiOperation 不是放在类上
@ApiOperation("Hello控制类")
@GetMapping(value = "/hello2")
public String hello(@ApiParam("用户名") String username){
return "hello"+username;
}
小结
- 我们可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
- 接口文档实时更新
- 可以在线测试
Swagger是一个优秀的工具,几乎所有大公司都有使用它
【注意点】在正式发布的时候,关闭Swagger! ! !出于安全考虑。而且节省运行的内存