前言
你还在为写API文档而头秃吗?
你还在为更新文档而熬夜吗?
你还在为文档不同步而焦虑吗?
胸弟们,不用再苦恼了。今天这款革命性产品 Spring Doc
将彻底改变您的文档编写体验!
现在打开电脑,立即集成,还能获得限时优惠。
快快行动吧,机不可失,时不再来。
1. Spring Doc 你的API文档秘密武器!
你们的API文档还在原地踏步吗?今天为你带来 Spring Doc。它将彻底改变您的文档编写体验。让我们来看看它的三大杀手锏:
自动生成功能:您还在为手动更新文档而烦恼吗?Spring Doc 比您的贤内助(如果有)还要勤快哦。它24小时不间断工作,只要您动一动手指改代码,文档就自动更新啦。集成它,集成它,集成它。
Swagger UI集成:您还在为丑陋的接口文档掉粉吗?Spring Doc 带来的 Swagger UI 简直就是美颜神器(bushi)啊。保证让您的文档颜值爆表,在线文档界横着走,隔壁项目看了都说好。
OpenAPI 3.0支持: 您的API还在穿着老气横秋的大裤衩吗?快来试试 Spring Doc 的OpenAPI 3.0。让您的API穿上最新潮的皮肤,走在技术圈的最前沿。保证您一出场就是全场焦点。
重点来啦!集成Spring Doc不需要1天,不需要1小时,只要5分钟!没错,就是这么快。心动不如行动,快拿起您的键盘开始coding吧。不要再犹豫了,Spring Doc -- 您的 API 文档必备神器~
2. 那么哪里能教我集成呢?
别急,老司机带你飞~
- 先给它一个温暖的家(增加依赖):
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.8.0</version>
</dependency>
- 给它布置一个温馨的小窝(配置):
@Configuration
public class SpringDocConfig {
@Bean
public OpenAPI openAPI() {
// 省略一大堆代码...
// 反正就是一顿骚操作
}
}
开玩笑的,这个才是
@Configuration
public class SpringDocConfig {
@Bean
public OpenAPI openAPI() {
Info info = new Info()
.title("Ext APIs")
.description("Ext")
.version("1.0.0");
// 返回信息
return new OpenAPI()
// .openapi("3.0.1") // Open API 3.0.1(默认)
.info(info);
}
}
- 开始使用这个小可爱:
@RestController
@Tag(name = "用户订阅计划")
@RequestMapping("/user/subscription")
public class SubscriptionController {
@Operation(summary = "订阅更新", description = "如果当前订阅是取消状态,且产品价格ID相同,则恢复<br>其他情况则返回跳转收银的URL")
@PutMapping("update")
public Result<SubscriptionUpdateResponse> update(
@Parameter(hidden = true) @TokenParser CurrentUser user,
@RequestBody @Valid SubscriptionUpdateForm form) {
// 这里省略一万字...
}
}
看到没?就是这么简单。
3. 用得比较多的注解就3个,还要啥自行车
@Tag
:给你的接口贴标签,就像给你的小可爱起外号一样~@Operation
:描述你的接口是干啥的,就像介绍你的技能一样666@Schema
:给你的实体类化个妆,让它更有说服力
4. 骚操作集锦
统一配置鉴权:一次配置,到处使用,简直不要太爽。
@Configuration
public class SpringDocConfig {
@Bean
public OpenAPI openAPI() {
Info info = new Info()
.title("Felo Search Ext APIs")
.description("Felo Search Ext")
.version("1.0.0");
SecurityScheme securityScheme = new SecurityScheme()
.name("Authorization")
.type(SecurityScheme.Type.APIKEY)
.description("Token")
.in(SecurityScheme.In.HEADER);
// 返回信息
return new OpenAPI()
.info(info)
.components(new Components().addSecuritySchemes("authScheme", securityScheme)) // 添加鉴权组件
.security(ImmutableList.of(new SecurityRequirement().addList("authScheme")));
}
}
配置服务端地址:让你的请求知道该往哪儿跑~
@Configuration
public class SpringDocConfig {
@Bean
public OpenAPI openAPI() {
Info info = new Info()
.title("Felo Search Ext APIs")
.description("Felo Search Ext")
.version("1.0.0");
SecurityScheme securityScheme = new SecurityScheme()
.name("Authorization")
.type(SecurityScheme.Type.APIKEY)
.description("Token")
.in(SecurityScheme.In.HEADER);
// 返回信息
return new OpenAPI()
.info(info)
.servers(ImmutableList.of(
new Server().url("http://localhost:11001/"),
new Server().url("https://api-ext-dev.felo.ai/")))
.components(new Components().addSecuritySchemes("authScheme", securityScheme)) // 添加鉴权组件
.security(ImmutableList.of(new SecurityRequirement().addList("authScheme")));
}
}
接口分组:内部接口外部接口分开展示,就像把你的小秘密和大实话分开放一样~
@Bean
public GroupedOpenApi rpc() {
return GroupedOpenApi.builder()
.group("rpc")
.pathsToMatch("/rpc/**")
.build();
}
@Bean
public GroupedOpenApi http() {
return GroupedOpenApi.builder()
.group("http")
.pathsToMatch("/web/**")
.build();
}
配置下划线风格:让你的接口文档看起来更有格调。
@Bean
@ConditionalOnProperty(name = "springdoc.api-docs.enabled", havingValue = "true", matchIfMissing = true)
public ModelResolver modelResolver(ObjectMapper objectMapper, SpringDocConfigProperties properties) {
// ObjectMapper 通过Spring容器注入,这个对象读取了spring.jackson.property-naming-strategy配置
return new ModelResolver(objectMapper).openapi31(properties.isOpenapi31());
}
总结
Spring Doc就是这么6,用了它你的API文档就会变得又香又甜,简直就是开发界的小甜甜。
还在等什么?快去试试吧!保证让你爽到飞起!