前后端分离,Swagger框架

前后端分离,Swagger框架

1.简介
随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染、先后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远。 前端和后端的唯一联系,变成了API接口;API文档变成了前后端开发人员联系的纽带,变得越来越重要,swagger就是一款让你更好的书写API文档的框架,而且swagger可以完全模拟http请求,入参出参和实际情况差别几乎为零。
  没有API文档工具之前,大家都是手写API文档的(维护起来相当困难),在什么地方书写的都有,有在confluence上写的,有在对应的项目目录下readme.md上写的,每个公司都有每个公司的玩法,无所谓好坏。但是能称之为“框架”的,估计也只有swagger了
2.搭建项目
基于SpringBoot的
1.pom.xml

<!-- swagger -->
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>2.7.0</version>
    </dependency>
    <!-- swagger-ui -->
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger-ui</artifactId>
      <version>2.7.0</version>
    </dependency>
    <!-- swagger end-->

2.配置类

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
            .enable(true)
            .apiInfo(apiInfo())
            .select() //返回ApiSelectorBuilder
            .apis(RequestHandlerSelectors.basePackage("com.ls.controller"))
            .paths(PathSelectors.any()) //只给product路径产生API文档
            .build();
    }
    //文档基础信息
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
            // 文档标题
            .title("swagger")
            // 文档描述
            .description("user接口文档")
            .termsOfServiceUrl("http://localhost:8080")
            .version("v1.0")
            .build();
    }
}

3.Controller

@RestController
@RequestMapping("/user")
@Api(value = "用户接口",tags = {"user"})
public class UserController {

    @ApiOperation(value="分页条件查询用户列表")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "userName",value = "用户姓名",required = false,paramType = "query",dataType = "string"),
        @ApiImplicitParam(name = "email",value = "用户邮箱",required = false,paramType = "query",dataType = "string"),
        @ApiImplicitParam(name = "status",value = "状态",required = false,paramType = "query",dataType = "integer"),
        @ApiImplicitParam(name = "pageNum",value= "当前页数", required = true,paramType = "query",dataType = "integer"),
        @ApiImplicitParam(name = "pageSize",value= "每页显示数量", required = true,paramType = "query",dataType = "integer")
    })
    @GetMapping("/query")
    public List<User>  query(@ApiIgnore User user,Integer pageNum, Integer pageSize){
        System.out.println(user);

        System.out.println(pageNum);
        System.out.println(pageSize);
        return null;
    }
    @GetMapping("/add")
    @ApiOperation("新增用户")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "userName",value = "用户姓名",required = false,paramType = "query",dataType = "string"),
        @ApiImplicitParam(name = "email",value = "用户邮箱",required = false,paramType = "query",dataType = "string"),
        @ApiImplicitParam(name = "password",value = "用户密码",required = false,paramType = "query",dataType = "string"),

    })
    public Boolean add(@ApiIgnore User user){
        System.out.println(user);
        return true;
    }

    @GetMapping("/delete")
    @ApiOperation("删除用户")
    public Boolean delete(@ApiParam(value = "用户id",required = true) @RequestParam Integer userId ){
        System.out.println(userId);
        return true;
    }

}

4.User类

@Data
public class User {
    private Integer userId;
    private String userName;
    private String password;
    private  Integer status;
    private String email;
    private Date createTime;
    private Date modifyTime;


}

5.访问:http://localhost:8080/swagger-ui.html
前后端分离,Swagger框架
swagger注解说明

注解 作用 说明
@Api 用在请求的类上,表示对类的说明 tags="说明该类的作用,可以在UI界面上看到的注解, value="该参数没什么意义,在UI界面上也看到,所以不需要配置”
@ApiOperation 用在请求的方法上,说明方法的用途、作用 value=“说明方法的用途、作用”,notes=“方法的备注说明”
@ApiImplicitParams 用在请求的方法上,表示一组参数说明
@ApiImplicitParam 用在@ApiImplicitParams注解中,指定一个请求参数的各个方面 name:参数名, value:参数的汉字说明、解释, required:参数是否必须传;paramType:参数放在哪个地方· header --> 请求参数的获取:@RequestHeader, query --> 请求参数的获取:@RequestParam, · path(用于restful接口)–> 请求参数的获取:@PathVariable,· body(不常用), · form(不常用) ;dataType:参数类型,默认String,其它值dataType=“Integer” ; defaultValue:参数的默认值
@ApiResponses 用在请求的方法上,表示一组响应 @ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息 code:数字,例如400,message:信息,例如"请求参数没填好"response:抛出异常的类
@ApiModel 用于响应类上,表示一个返回响应数据的信息 (这种一般用在post创建的时候,使用@RequestBody这样的场景,请求参数无法使用@ApiImplicitParam注解进行描述的时候),@ApiModelProperty:用在属性上,描述响应类的属性
@ApiIgnore() 用于类,方法,方法参数 表示这个方法或者类被忽略