Swagger簡介
學習目標:
瞭解Swagger的作用和概念
瞭解前後端分離
在SpringBoot中集成Swagger
前後端分離
Vue+SpringBoot
後端時代:前端只用管理靜態頁面;html======》後端,模板引擎JSP===>後端是主力
前後端分離時代:
後端:後端控制層,服務層,數據訪問層【後端團隊】
前端:前端控制層,視圖層 【前端團隊】
僞造後端數據,json已經存在了,不需要後端,前端工程依舊能夠跑起來。
前後端如何交互?====》API
前後端相對獨立,松耦合
前後端甚至可以部署在不同的服務器上
產生一個問題:
前後端集成聯調,前端人員和後端人員無法做到"即使協商,儘早解決”,最終導致問題集中爆發。
解決方案:
首先指定schema計劃的提綱,實時更新最新的API,降低集成的風險。
早些年:指定word計劃文檔。
前後端分離:
前端測試後端接口:postman
後端提供接口,需要實時更新最新的消息及改動。
Swagger:號稱世界上最流行的API框架
RestFul API文檔在線自動生成工具===>API文檔與API定義同步更新。
直接運行,可以在線測試API接口;
支持多種語言
在項目中使用Swagger需要SpringBox
swagger2
ui
SpringBoot集成Swagger開發
第一步:新建一個SoringBoot web項目
在我之前的博客中提到使用idea創建SpringBoot web項目的詳細步驟可以查看。
第二步導入jar包
<!--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>
第三步:編寫一個hello word程序
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";
}
}
第四步:配置Swagger
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);
配置API文檔的分組
.groupName("亞遠")
如何配置API文檔的多個分組
//如何配置多個分組
@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;
}
}
application.properties文件
#配置開發環境
spring.profiles.active=dev
server.port=8080
server.servlet.context-path=/
application-dev.properties文件
server.port=8081
server.servlet.context-path=/
application-pro.properties文件
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是一個優秀的工具,幾乎所有的大公司都有使用它。
注意點:在正式發佈的時候,關閉Swagger!!!出於安全考慮,而且節省運行內存。
本項目源碼可以聯繫博主來取噢:QQ:1462638689