有了Swagger2,再也不用為寫Api文件頭疼了
阿新 • • 發佈:2021-08-29
1、為什麼要寫Api文件
現在,前後端分離的開發模式已經非常流行,後端開發工程師只負責完成後端介面,前端頁面的開發和渲染完全由前端工程師完成。
問題來了,前端工程師怎麼知道後端介面的具體定義呢?答案是由後端工程師撰寫。
2、寫Api文件很頭疼嗎
答案是一定的,這對後端工程師來說,是額外的工作,編碼已經很耗費精力了,這時前端工程師來催文件,不頭疼才怪:),當然這也不是前端工程師的問題,都是為專案的進度著急。
3、Swagger2
現在好了,一個自動撰寫Api文件的神器出現了,他就是 Swagger2,Swagger2通過美觀的WEB介面展示了所有介面的定義,非常方便,還能直接在介面上進行測試呼叫,有助於除錯。
後端工程師,定義好介面,加幾個註解,便能自動生成線上介面定義,前端工程師可以實時的看到。
下面就來講講如何把 Swagger2 整合到專案中來。
4、介面介紹
這裡以一個簡單的介面作為例子,介面的功能是輸入使用者ID,獲取使用者資料。
5、引入依賴
<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>
6、增加Swagger2配置類
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; 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; @Configuration @EnableSwagger2 public class Swagger2 { // swagger2配置 @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) // 指定api型別為swagger2 .apiInfo(apiInfo()) // 用於定義api文件彙總資訊 .select() .apis(RequestHandlerSelectors .basePackage("cn.zhuifengren.controller")) // 指定掃描的controller包 .paths(PathSelectors.any()) // 所有controller .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("hello工程介面api") // 文件頁標題 .contact(new Contact("hello", "", "")) // 聯絡人資訊 .description("專為hello工程提供的api文件") // 詳細資訊 .version("1.0.0") // 文件版本號 .termsOfServiceUrl("") // 網站地址 .build(); } }
7、在Controller類中增加Swagger2註解
import cn.zhuifengren.model.Result; import cn.zhuifengren.model.User; import cn.zhuifengren.service.UserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/user") @Api(value = "UserController", tags = "使用者介面") public class UserController { @Autowired private UserService userService; @GetMapping("/info/{id}") @ApiOperation(value = "獲取使用者資訊") public Result<User> getUserInfo(@ApiParam(value = "使用者ID") @PathVariable("id") String id) { User userInfo = userService.getUserInfo(id); Result<User> result = new Result<>(); result.setCode(200); result.setMessage("success"); result.setData(userInfo); return result; } }
https://www.cnblogs.com/w84422/p/15194549.html
故鄉明