Swagger
文章目錄
- Swagger
- 1、Swagger的作用和概念
- 1、Swagger 的優勢
- 2、SwaggerUI 特點
- 2、SpringBoot集成Swagger
- 3、配置Swagger
- 4、物體配置
- 5、其他皮膚
1、Swagger的作用和概念
? 官方地址:https://swagger.io/
? Swagger 是一個規范且完整的框架,用于生成、描述、呼叫和可視化 RESTful 風格的 Web 服務以及 集成Swagger自動生成API檔案,
? Swagger 的目標是對 REST API 定義一個標準且和語言無關的介面,可以讓人和計算機擁有無須訪問原始碼、檔案或網路流量監測就可以發現和理解服務的能力,當通過 Swagger 進行正確定義,用戶可以理解遠程服務并使用最少實作邏輯與遠程服務進行互動,與為底層編程所實作的介面類似,Swagger 消除了呼叫服務時可能會有的猜測,
1、Swagger 的優勢
- 支持 API 自動生成同步的在線檔案:使用 Swagger 后可以直接通過代碼生成檔案,不再需要自己手動撰寫介面檔案了,對程式員來說非常方便,可以節約寫檔案的時間去學習新技術,
- 提供 Web 頁面在線測驗 API:光有檔案還不夠,Swagger 生成的檔案還支持在線測驗,引數和格式都定好了,直接在界面上輸入引數對應的值即可在線測驗介面,
2、SwaggerUI 特點
- 無依賴 UI可以在任何開發環境中使用,無論是本地還是在Web端中,
- 人性化允許最終開發人員輕松地進行互動,并嘗試API公開的每個操作,以方便使用,
- 易于瀏覽歸類整齊的檔案可快速查找并使用資源和端點,
- 所有瀏覽器支持 Swagger UI 在所有主要瀏覽器中均可使用,以適應各種可能的情況,
- 完全可定制 通過完整的源代碼訪問方式以所需方式設定和調整Swagger UI,
- 完整的OAS支持 可視化Swagger 2.0或OAS 3.0中定義的API
前后端分離:
現主流前后端開發:Vue + SpringBoot
后端時代:前端只用管理靜態頁面; html==》后端,模版引擎 JSP=>后端是主力
前后端分離時代:
-
后端:后端控制層、服務層、資料訪問層 【后端團隊】
-
前端:前端控制層、視圖層 【前端團隊】
-
- 偽造后端資料,json,在后端開發前資料以及存在,不需要后端,前端工程師依舊能將專案跑起來,
-
前后端如何互動?==>API
-
前后端相對獨立,松耦合;
-
前后端甚至可以部署在不同的服務器上,
產生一個問題
? 前后端集成聯調,前端人員和后端人員無法做到 “及時協商,盡早解決”,最終導致問題集中爆發;
SpringBoot中集成Swagger
解決方案:
-
首先指定scheme,實時更新最新的API,降低集成的風險,
-
早些年,制定Word計劃檔案
-
前后端分離:
-
- 前端測驗后端介面使用:Postman工具,
- 后端提供介面:需要實時更新最新改動和訊息,
這時Swagger很好的解決了這個問題
- 號稱世界上最流行的API框架,
- Restful API檔案在線自動生成工具 ,API檔案與API定義同步更新
- 直接運行,可以在線測驗API介面,
- 支持多種語言 如:Java 、Php等高級語言
2、SpringBoot集成Swagger
1、新建一個SpringBoot-web專案
2、導包
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
3、撰寫HelloController,測驗確保運行成功!
@RestController
public class HelloController {
@RequestMapping(value = "/hello")
public String Hello(){
return "Hello Swgger!";
}
}
4、要使用Swagger,需要撰寫一個配置類SwaggerConfig來配置 Swagger
@Configuration //配置類
@EnableSwagger2// 開啟Swagger2的自動配置
public class SwaggerConfig {
}
目錄:

5、訪問測驗 :http://localhost:8080/swagger-ui.html ,看到swagger的界面;

3、配置Swagger
1、Swagger實體Bean是Docket,所以通過配置Docket實體來配置Swaggger

@Configuration
@EnableSwagger2 // 開啟Swagger2的自動配置
public class SwaggerConfig {
//配置了Swagger的Docket的bean實體
@Bean
public Docket docket(Environment environment){
return new Docket(DocumentationType.SWAGGER_2);
}
2、通過apiInfo()屬性配置檔案資訊(全部)
package com.kk.swagger.config;
import com.kk.swagger.controller.HelloController;
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 org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.builders.PathSelectors;
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;
@Configuration
@EnableSwagger2 // 開啟Swagger2的自動配置
public class SwaggerConfig {
//分組
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2).groupName("KK1");
}
@Bean
public Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2).groupName("KK2");
}
@Bean
public Docket docket3(){
return new Docket(DocumentationType.SWAGGER_2).groupName("KK3");
}
//配置了Swagger的Docket的bean實體
//enable 是否啟動Swagger 如果為false 則Swagger 不能再瀏覽器中訪問
@Bean
public Docket docket(Environment environment){
//設定要顯示Swagger的環境
Profiles profiles=Profiles.of("dev","test");
//獲取專案的環境 通過environment.acceptsProfiles判斷是否處在自己的設定的環境當中
boolean flag = environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName("kk")
.enable(flag)
.select()
//RequestHandlerSelectors 配置要掃描介面的方式
//basePackage 指定要掃描的包
//any() 掃描全部
//none() 都不掃描
//withClassAnnotation 掃描方法上的注解 引數是一個注解的反射物件
.apis(RequestHandlerSelectors.basePackage("com.kk.swagger.controller"))
// .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class)) 這個只會掃描類上有RestController的方法
// .paths() 過濾什么路徑
// .paths(PathSelectors.ant("/kk/**"))
.build();
}
private static final Contact DEFAULT_CONTACT =new Contact("KK","HTTP","666@qq.com");
//配置Swagger資訊 apiInfo
private ApiInfo apiInfo(){
return new ApiInfo("KK的SwaggerAPI檔案", "Api Documentation",
"1.0", "urn:tos", DEFAULT_CONTACT,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0", new ArrayList());
}
}
application.properties
# 應用名稱
spring.application.name=swagger-springboot
# 應用服務 WEB 訪問埠
server.port=8080
spring.profiles.active=dev
application-dev.properties
server.port=8081
application-test.properties
server.port=8082
測驗

4、物體配置
1、新建一個物體類
package com.kk.swagger.pojo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
//@Api(注釋)
@ApiModel("用戶物體類")
public class User {
@ApiModelProperty("用戶名")
public String username;
@ApiModelProperty("密碼")
public String password;
}
2、只要這個物體在請求介面的回傳值上(即使是泛型),都能映射到物體項中:
//只要介面中,回傳值存在物體類,它就會被掃描到Swagger中
@PostMapping(value = "/user")
public User user(){
return new User();
}

測驗


可以給請求的介面配置一些注釋
//Operation 介面 不是放在類上的 而是放在方法上的
@ApiOperation("Hello控制類,Post測驗")
@PostMapping(value = "/postt")
public User postt(@ApiParam("用戶名") User user){
return user;
}

5、其他皮膚
導包
<!-- 換膚-->
<!-- https://mvnrepository.com/artifact/com.github.xiaoymin/swagger-bootstrap-ui -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
訪問 http://localhost:8080/doc.html
還有很多,可以網上查查
nrepository.com/artifact/com.github.xiaoymin/swagger-bootstrap-ui -->
com.github.xiaoymin
swagger-bootstrap-ui
1.9.6
**訪問 http://localhost:8080/doc.html**
==還有很多,可以網上查查==
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/308909.html
標籤:其他
