BlueXIII's Blog

热爱技术,持续学习

0%

研发规约-Swagger服务契约

整合springfox

修改父pom

添加springfox的依赖:

1
2
3
4
5
6
7
8
9
10
11
12
<!-- swagger -->
<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>

增加spring配置

新增配置类SwaggerConfiguration.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@EnableSwagger2
public class SwaggerConfiguration {
@Bean
public Docket getDocket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(new ApiInfoBuilder()
.title("swagger-demo")
.description("demo")
.version("1.0.0")
.build())
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.regex("/.*"))
.build();
}
}

相关路径

编码示例

Domain层

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@ApiModel("附件信息")
public class Attachment {
@ApiModelProperty(value = "附件ID", example = "1")
private String id = PublicUtils.uuid();

@ApiModelProperty(value = "附件名称", example = "1.docx")
private String name;

@ApiModelProperty(value = "附件类型", example = "text/plain")
private String genre;

@ApiModelProperty(value = "附件路径", example = "/tmp/1.docx")
private String path;

@ApiModelProperty(value = "附件大小", example = "100")
private double size;
}

Controller层

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@Api("附件管理")
@RestController
@RequestMapping("/attachment")
public class AttachmentController {
@Autowired
private AttachmentService service;

@ApiOperation("保存附件")
@PostMapping
public RestResponse save(@ApiParam("附件信息") @RequestBody Attachment attachment) {
service.save(attachment);
return RestResponse.result(attachment);
}

@ApiOperation("删除附件")
@DeleteMapping("/{id}")
public RestResponse delete(@ApiParam(value = "附件ID", example = "1") @PathVariable String id) {
service.delete(id);
return RestResponse.result(id);
}

@ApiOperation("查询附件")
@GetMapping
public RestResponse query(@ApiParam(value = "附件名称", example = "1.docx") @RequestParam(required = false) String name,
@ApiParam(value = "页数", example = "1") @RequestParam(required = false, defaultValue = "0") int pageNum,
@ApiParam(value = "每页条数", example = "10") @RequestParam(required = false, defaultValue = "10") int pageSize) {
PageInfo<Attachment> page = service.query(name, pageNum, pageSize);
return RestResponse.result(page);
}
}

注意事项

  1. 常用注解有@Api, @ApiOperation, @ApiParam, @ApiModelProperty
  2. @Produces, @ApiResponses受制于框架暂不使用,接口风格尽量向rest靠拢
  3. 尽量在注解中添加example属性,以方便后期在swagger-ui中做手工接口测试
  4. 注解在一定程度上可以替代/**/注释,具体看公司要求

swagge-ui

查看API信息

浏览器访问http://localhost:8090/zorrodemo/swagger-ui.html,打开swagger-ui的界面,可查看所有API的信息
2020-02-07-15-11-35

API测试验证

点击Try it out按钮,可对单个接口手工进行测试
2020-02-07-15-14-22

文档生成

  1. 通过swagger的原始描述json,可以使用各种工具生成多种格式的API文档(asciidoc/pdf/html/markdonwn)
  2. json api-docs的路径为: http://localhost:8090/zorrodemo/v2/api-docs
  3. 建议使用swagger-markdown工具生成markdown格式文档,方便后期格式转换、导出

介绍页面:
https://www.npmjs.com/package/swagger-markdown

安装及使用:

1
2
npm install -g swagger-markdown
swagger-markdown -i ./api-docs.json