­

有了Swagger2,再也不用為寫Api文檔頭疼了

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;
    }

}

其中 @Api註解 放在類上,用於對類的描述,@ApiOperation註解 放在方法上,用於對接口方法的描述。

8、模型類中增加Swagger2註解

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

@ApiModel(value = "用戶實體", description = "用戶實體")
public class User {

    @ApiModelProperty(value = "用戶id", name = "id", example = "1")
    private String id;
    @ApiModelProperty(value = "用戶姓名", name = "name", example = "小李")
    private String name;
    @ApiModelProperty(value = "用戶年齡", name = "age", example = "36")
    private Integer age;

其中 @ApiModel註解 放在類上,用於對模型類的描述,@ApiModelProperty註解 放在屬性上,用於對模型屬性的描述。

9、啟動項目查看效果

啟動項目後,進入地址://localhost:8080/swagger-ui.html,即可看到Swagger2 WEB頁面,點擊【Try it out】按鈕,還可以對接口進行測試,是不是很方便呢,趕快去用一下吧