tags: [swagger]
categories: [工具]


前言

swagger一般都很熟悉了,一个可以生成Rest风格接口文档的工具,虽然使用了侵入代码式的方式,但却减少了重复变更接口带来的繁杂操作,但是在我周围实际使用中,真的很少又在用它来测试接口功能,它的风格似乎不符合国人的审美,更多的是使用PostMan来测试
最近发现了一个新的美化版的Swagger工具,Knif4J,基本可以满足简单的测试需求

官方文档传送门:传送门

配置使用

这里默认用户是JAVA语言,SpringBoot开发的

引入依赖

推荐使用starter依赖,如下

  1. <!-- https://mvnrepository.com/artifact/com.gitee.sophis/spring-boot-knif4j-starter -->
  2. <dependency>
  3. <groupId>com.gitee.sophis</groupId>
  4. <artifactId>spring-boot-knif4j-starter</artifactId>
  5. <version>latest version</version>
  6. </dependency>

或者你也可以使用以下依赖组合,效果是一致的

  1. <dependency>
  2. <groupId>io.springfox</groupId>
  3. <artifactId>springfox-swagger2</artifactId>
  4. <version>2.9.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.github.xiaoymin</groupId>
  8. <artifactId>swagger-bootstrap-ui</artifactId>
  9. <version>${lastVersion}</version>
  10. </dependency>

编写Swagger2Config配置文件

和Swagger2是一致的,这里读取的是yml配置信息,所以多了个yml处理器

  1. @Configuration
  2. @EnableSwagger2
  3. @EnableKnife4j
  4. @Setter
  5. @PropertySource(value = "classpath:config/swagger.yml", factory = YamlPropertyResourceFactory.class)
  6. @ConfigurationProperties(prefix = "swagger")
  7. public class SwaggerConfiguration {
  8. private String title;
  9. private String version;
  10. private String description;
  11. private String name;
  12. private String url;
  13. private String email;
  14. @Bean
  15. public Docket createRestApi() {
  16. return new Docket(DocumentationType.SWAGGER_2)
  17. .apiInfo(apiInfo())
  18. .select()
  19. .apis(RequestHandlerSelectors.basePackage("com.bwensun.web"))
  20. .paths(PathSelectors.any())
  21. .build();
  22. }
  23. private ApiInfo apiInfo() {
  24. return new ApiInfoBuilder()
  25. .contact(new Contact(name, url, email))
  26. .title(title)
  27. .description(description)
  28. .termsOfServiceUrl("https://www.zoombar.fun")
  29. .version(version)
  30. .build();
  31. }
  32. }
  1. public class YamlPropertyResourceFactory implements PropertySourceFactory {
  2. /**
  3. * Create a {@link PropertySource} that wraps the given resource.
  4. *
  5. * @param name the name of the property source
  6. * @param encodedResource the resource (potentially encoded) to wrap
  7. * @return the new {@link PropertySource} (never {@code null})
  8. * @throws IOException if resource resolution failed
  9. */
  10. @Override
  11. public PropertySource<?> createPropertySource(@Nullable String name, EncodedResource encodedResource) throws IOException {
  12. String resourceName = Optional.ofNullable(name).orElse(encodedResource.getResource().getFilename());
  13. //yaml资源文件
  14. if (Objects.requireNonNull(resourceName).endsWith(".yml") || resourceName.endsWith(".yaml")) {
  15. List<PropertySource<?>> yamlSources = new YamlPropertySourceLoader().load(resourceName, encodedResource.getResource());
  16. return yamlSources.get(0);
  17. } else {//返回空的Properties
  18. return new PropertiesPropertySource(resourceName, new Properties());
  19. }
  20. }
  21. }
  1. swagger:
  2. title: Zoombar后端服务
  3. version: 1.0.0
  4. description: Zoombar游戏论坛
  5. name: 孙博文
  6. url: www.bwensun.top
  7. email: bwensun@foxmail.com

测试使用

可以看到界面还是非常美观的,对于接口也支持了多种数据方式传输进行调试,总的来说还是比较满意的,另外Knife4J也支持接口信息的导出,这边就可以将它视为YAPI一样的接口文档平台来使用
image.png
image.png

Swagger2注解信息一览

注解 作用
@Api 修饰整个类,描述Controller的作用
@ApiOperation 描述一个类的一个方法,或者说一个接口
@ApiParam 单个参数描述
@ApiModel 用对象来接收参数
@ApiProperty 用对象接收参数时,描述对象的一个字段
@ApiResponse HTTP响应其中1个描述
@ApiResponses HTTP响应整体描述
@ApiIgnore 使用该注解忽略这个API
@ApiError 发生错误返回的信息
@ApiImplicitParam 一个请求参数
@ApiImplicitParams 多个请求参数

相关

  1. knife4j knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案
  2. Spring Boot整合Swagger2构建RESTful API