Swagger 接口文档
Swagger 是一个规范和完整的框架,用于生成,描述,调用和可视化 RESTFul 风格的接口文档
为什么需要接口文档
-
有一个书面的内容(文档),可以查询和参考,避免口口相传
-
接口文档支持在线调试接口,在线测试,可以不用前端页面发送请求,提高开发测试的效率
-
接口文档可以方便前端和后端工作的对接,是前后端联调的介质
什么是接口文档
包含接口信息的文档,每条接口有
- 请求参数
- 响应参数
- 接口地址
- 请求类型
- 请求的格式
怎么在 springBoot 项目中引入接口文档
Knife4j 是对 swagger 接口文档的增强,所以该项目中直接引用 Knife4j
-
引入 maven 的相关依赖
-
自定义 Knife4j 的配置类
-
在配置类中指定要扫描的包,生成对应的接口文档
-
maven相关依赖
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>${knife4j}</version>
</dependency>
- 使用 @Configuration 注入一个配置类,在配置类中指定生成的接口文档的相关信息
- title: 是接口文档的名称
- description: 是接口文档的描述
- 创建 docker 对象中的 apis() 是指定扫描要生成接口信息的那个包。通常是 Controller 包
- 其他的照抄就行了
- 记得设置静态资源的映射
addResourceHandlers() 方法。否则无法访问接口文档
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {
/**
* 通过knife4j生成接口文档
* @return
*/
@Bean
public Docket docket01() {
ApiInfo apiInfo = new ApiInfoBuilder()
.title("苍穹外卖项目接口文档")
.version("2.0")
.description("苍穹外卖项目接口文档")
.build();
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo)
.select()
.apis(RequestHandlerSelectors.basePackage("com.sky.controller.admin"))
.paths(PathSelectors.any())
.build();
return docket;
}
/**
* 设置静态资源映射
* @param registry
*/
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
- 现在就可以访问我们的接口文档了。访问的地址是 :
http://ip:port/doc.html - 效果图
将接口文档分组
如果现在我们有很多的接口,例如 admin , user, .... 这些接口全部都放在同一个接口文档,就显得太繁琐了,操作起来也不方便。所以我们可以对我们的接口文档进行分组。分成:
- 管理员相关的接口文档
- 用户相关的接口文档
效果图:
实现起来也非常的简单,只需要创建两个 apiInfo ,并且在创建 docker 时加多一个 groupName() 方法进行分组即可 以下是代码的实现:
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {
/**
* 通过knife4j生成接口文档
* @return
*/
@Bean
public Docket docket01() {
ApiInfo apiInfo = new ApiInfoBuilder()
.title("苍穹外卖项目接口文档")
.version("2.0")
.description("苍穹外卖项目接口文档")
.build();
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.groupName("管理端接口")
.apiInfo(apiInfo)
.select()
.apis(RequestHandlerSelectors.basePackage("com.sky.controller.admin"))
.paths(PathSelectors.any())
.build();
return docket;
}
@Bean
public Docket docket02() {
ApiInfo apiInfo = new ApiInfoBuilder()
.title("苍穹外卖项目接口文档")
.version("2.0")
.description("苍穹外卖项目接口文档")
.build();
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.groupName("用户端接口")
.apiInfo(apiInfo)
.select()
.apis(RequestHandlerSelectors.basePackage("com.sky.controller.user"))
.paths(PathSelectors.any())
.build();
return docket;
}
/**
* 设置静态资源映射
* @param registry
*/
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
}