10、Swagger
Swagger是什么?
- 号称世界上最流行的API框架
- Restful Api 文档在线自动生成器 => API 文档 与API 定义同步更新
- 直接运行,在线测试API接口(其实就是controller requsetmapping)
- 支持多种语言 (如:Java,PHP等)
- 官网:https://swagger.io/
为什么学习Swagger?
**前后端分离**
- 前端 -> 前端控制层、视图层
- 后端 -> 后端控制层、服务层、数据访问层
- 前后端通过API进行交互
- 前后端相对独立,且松耦合
**产生的问题**
-前后端集成,前端或者后端无法做到“及时协商,尽早解决”,
-最终导致问题集中爆发
**解决方案**
首先定义schema [ 计划的提纲 ],并实时跟踪最新的API,降低集成风险
早些年制定word计划文档
前后端分离:前端测试后端接口:postman
后端提供接口,需要实时更新最新的消息及改动!
**Swagger**
* 号称世界上最流行的API框架
* 同步更新数据 解决前后端沟通成本和矛盾
* Restful Api 文档在线自动生成器 => API 文档 与API 定义同步更新
* 直接运行,在线测试API接口(其实就是controller requsetmapping)
* 支持多种语言 (如:Java,PHP等)
* 官网:https://swagger.io/
怎么学习Swagger?
Springboot整合Swagger
-
注意
注解:@EnableSwagger2
可视化链接:Swagger UI
1、导入依赖
<!-- springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
2、配置文件(开发环境的转换)
**方法:**判断是不是生产环境的yml ;注入enable(flag)
-
application.yml
spring: profiles: active: dev
-
application-dev.yml
server: port: 8080
-
application-test.yml
server: port: 8081
3、后端代码
-
SwaggerConfig(config)【重点】
@Configuration @EnableSwagger2 public class SwaggerConfig { // 配置SwaggerBean实例 @Bean public Docket getDocker(Environment environment) { // 判断是否是生产环境的配置文件 Profiles profiles = Profiles.of("dev"); boolean flag = environment.acceptsProfiles(profiles); return new Docket(DocumentationType.SWAGGER_2) // 是否启用swagger,则浏览器不能访问 // .enable(false) // 这里判断是dev生产环境才开启Swagger .apiInfo(apiInfo()) .groupName("4") // 配置分组 .enable(flag) .select() // 扫描接口:,点进去看源码有很多种方式指定扫描方式 .apis(RequestHandlerSelectors.basePackage("com.hui.controller")) // 扫描路劲:过滤路径 .paths(PathSelectors.any()) .build(); } //配置文档信息 private ApiInfo apiInfo() { Contact contact = new Contact("联系人名字", "https://xxx.xxx.com/联系人访问链接", "联系人邮箱"); return new ApiInfo( "Swagger学习", // 标题 "学习演示如何配置Swagger", // 描述 "v1.0", // 版本 "https://terms.service.url/组织链接", // 组织链接 contact, // 联系人信息 "Apache 2.0 许可", // 许可 "许可链接", // 许可连接 new ArrayList<>()// 扩展 ); } }
设置docket分组
配置多个不同名注入bean,供多人开发使用
@Bean public Docket docket2() { return new Docket(DocumentationType.SWAGGER_2) .groupName("AA"); }
-
HelloController(controller)
@RestController public class HelloController { @RequestMapping(value = "/hello") public String hello() { return "hello"; } @RequestMapping("/getUser") public User getUser(){ return new User(); } }
-
User(pojo)
@ApiModel("用户实体") public class User { @ApiModelProperty("用户名") public String username; @ApiModelProperty("密码") public String password; }