作者:刘小标
Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。如何按照新的开发模式,在版本开发或者迭代版本的时候,只需要更新 Swagger 描述文件,就可以自动生成接口文档和客户端服务端代码,做到调用端代码、服务端代码以及接口文档的一致性。
即便如此,编写 yml 或 json 格式的描述文件,本身也是有一定负担的工作,特别是在持续迭代开发的时候,更容易忽略更新这个描述文件。久而久之,这个描述文件也和实际项目渐行渐远,基于改描述文件生成的文档也失去了参考意义。
所以, Spring 作为 Java 领域服务端的大佬,迅速讲 Swagger 规范纳入自身的标准,简历了 Spring-swagger 项目,后面改成了 Springfox。通过在项目种引入 Springfox,可以扫描相关的代码,生成该描述文件,进而生成与代码一致的接口文档和客户端代码
总结:swagger 就是一个用来定义接口标准,接口规范,根据代码自动生成接口文档的工具。
Swagger Codegen:通过 Codegen 可以将描述文件生成 html 格式和 cwiki 形式的接口文档,同时也能生成多种语言的服务端和客户端的代码。支持通过 jar 包,docker,node 等方式在本地化执行生成。也可以在后面的 Swagger Editor 中在线生成。
Swagger Editor:编辑 Swagger 描述文件的编辑器(类似 Markdown 的编辑器),该编辑器支持实时预览描述文件的更新效果。也提供了在线编辑器和本地部署编辑器两种方式。
Swagger UI:提供了一个可视化的 UI 页面展示描述文件。接口的调用方、测试、项目经理等都可以在该页面中对相关接口进行查阅和做一些简单的接口请求。该项目支持在线导入描述文件和本地化部署 UI 项目。
Swagger Inspector:是一个可以对接口进行测试的在线版的 postman。
Swagger Hub:集成了上面所有项目的各个功能,你可以以项目和版本为单位,将你的描述文件上传到 SwaggerHub 中。在 Swagger Hub 中可以完成上面项目的所有工作,需要注册账号,分为免费版和收费版。
Springfox Swagger:Spring 基于 swagger 规范,可以将基于 SpringMVC 和 Spring Boot 项目的代码,自动生成 JSON 格式的描述文件。不属于 Swagger 官网提供的。
<!--swagger2依赖-->
<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>
/**
* @author Lauxb
* @version 1.0.0
* @description
* @date Created in 2020/7/17 14:57
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//为当前包路径
.apis(RequestHandlerSelectors.basePackage("com.dist.customer.controller"))
.paths(PathSelectors.any())
.build();
}
//构建 api文档的详细信息函数,注意这里的注解引用的是哪个
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
//页面标题
.title("标题:SpringBoot集成Swagger")
//创建人
.contact(new Contact("lauxb", "https://www.dist.com.cn", "liuxb@dist.com.cn"))
//版本号
.version("3.0")
//描述
.description("SpringBoot集成Swagger的详细描述信息。")
.build();
}
}
访问 swagger 的 ui 界面: http://localhost:8081/assets/img/swagger-ui.html
@RestController
@RequestMapping("userTable")
@Api(tags = "用户接口说明")
public class UserTableController extends ApiController {
......
}
@PostMapping
@ApiOperation(value = "新增一条用户信息",notes = "<font color='blue'>描述:</font> 新增一条用户信息")
public R insert(@RequestBody UserTable userTable) {
return success(this.userTableService.save(userTable));
}
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@ApiModel(description = "用户模型信息")
public class UserTable extends Model<UserTable> {
...
}
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@ApiModel(description = "用户模型信息")
public class UserTable extends Model<UserTable> {
@TableId(type = IdType.AUTO)
@ApiModelProperty(name = "id", value = "用户id", hidden = true)
private Long id;
@ApiModelProperty(name = "name", value = "用户名称", dataType = "String", example = "java", position = 1)
private String name;
@ApiModelProperty(name = "sex", value = "用户性别", dataType = "String", example = "it", position = 2)
private String sex;
@ApiModelProperty(name = "tel", value = "用户电话", dataType = "String", example = "001 001", position = 3)
private String tel;
@ApiModelProperty(name = "addr", value = "用户地址", dataType = "String", example = "pc", position = 4)
private String addr;
}
@GetMapping("{id}")
@ApiOperation(value = "查询指定用户的信息",notes = "<font color='red'>描述:</font>用来查询指定用户信息的接口")
@ApiImplicitParam(name = "id",value = "用户id",dataType = "Serializable",defaultValue = "0")
public R selectOne(@PathVariable Serializable id) {
return success(this.userTableService.getById(id));
}
@DeleteMapping
@ApiResponses({
@ApiResponse(code = 200,message = "请求成功。"),
@ApiResponse(code = 401,message = "未授权!"),
@ApiResponse(code = 403,message = "禁用!"),
@ApiResponse(code = 404,message = "未找到!")
})
public R delete(@RequestParam("idList") List<Long> idList) {
return success(this.userTableService.removeByIds(idList));
}