在接口平台的功能优化之路上,我们一直致力于探索如何让接口提供方能够更便捷地将接口信息发布到平台。经过一番深入调研,我们惊喜地发现,公司绝大多数项目都引入了 Swagger,这一发现为我们开启了新的优化思路 —— 通过解析 Swagger 来实现接口信息的高效收集与发布。起初,我们以为解析工作不过是小菜一碟,上手后才发现,虽然解析本身并不复杂,但对象的组装过程却相当繁琐。不过,幸运的是,我们找到了一款强大的开源组件库 ——Swagger Parse,它的出现大大缩短了解析工作的时间和难度,让整个流程变得顺畅许多。
探秘 Swagger Parser:接口解析的得力助手
Swagger Parser 是一款专门用于解析和验证 OpenAPI 规范(涵盖 2.0 和 3.x 版本)的强大库。它就像是一位专业的翻译官,能够将定义 API 的 JSON 或 YAML 文件 “翻译” 成易于操作的对象表示,比如在 Java 中常用的 POJO。借助 Swagger Parser,开发者可以轻松读取、解析并处理 OpenAPI 定义,从而深入理解 API 的结构和行为。这一功能对于自动化工具、代码生成器以及其他需要处理 API 描述的应用程序而言,堪称是 “神器”。举个例子,通过解析 OpenAPI 文档,我们能够自动生成客户端 SDK、服务器存根、文档页面等,大大提高开发效率,减少重复性劳动。
具体来说,SwaggerParser 类提供了多种方法,支持从不同的输入源进行解析,包括 URL、文件路径、InputStream 等,并且会返回一个代表整个 API 定义的对象模型,方便我们进行进一步的操作,比如遍历 API 路径、获取参数信息、响应模式等。
实战演练:手把手教你使用 Swagger Parser
1、项目中引入swagger parse GAV
<dependency>
<groupId>io.swagger.parser.v3</groupId>
<artifactId>swagger-parser</artifactId>
<version>2.1.13</version>
</dependency>
2、解析 OpenAPI 文档
a、 从文件路径解析
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.parser.v3.SwaggerParser;
public class SwaggerParseExample {
public static void main(String[] args) {
// 从文件路径解析 OpenAPI 文档
OpenAPI openAPI = new SwaggerParser().readLocation("path/to/api-spec.yaml", null, null).getOpenAPI();
System.out.println(openAPI.getInfo().getTitle());
}
}
b、 从 URL 解析
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.parser.v3.SwaggerParser;
public class SwaggerParseExample {
public static void main(String[] args) {
// 从 URL 解析 OpenAPI 文档
OpenAPI openAPI = new SwaggerParser().readLocation("https://api.example.com/v2/api-docs", null, null).getOpenAPI();
System.out.println(openAPI.getInfo().getTitle());
}
}
c、 从字符串内容解析
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.parser.v3.SwaggerParser;
public class SwaggerParseExample {
public static void main(String[] args) {
String swaggerContent = "openapi: 3.0.0\ninfo:\n title: Sample API\n version: 1.0.0";
// 从字符串内容解析 OpenAPI 文档
OpenAPI openAPI = new SwaggerParser().parse(swaggerContent);
System.out.println(openAPI.getInfo().getTitle());
}
}
3、操作解析后的对象
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.paths.PathItem;
import io.swagger.v3.oas.models.servers.Server;
public class SwaggerParseExample {
public static void main(String[] args) {
// 假设已经通过某种方式获取了 OpenAPI 对象
OpenAPI openAPI = ...;
// 获取 API 的基本信息
Info info = openAPI.getInfo();
System.out.println("API Title: " + info.getTitle());
System.out.println("API Version: " + info.getVersion());
// 获取 API 的服务器信息
for (Server server : openAPI.getServers()) {
System.out.println("Server URL: " + server.getUrl());
}
// 遍历所有 API 路径
for (String path : openAPI.getPaths().keySet()) {
PathItem pathItem = openAPI.getPaths().get(path);
System.out.println("Path: " + path);
if (pathItem.getGet() != null) {
System.out.println(" GET method available");
}
if (pathItem.getPost() != null) {
System.out.println(" POST method available");
}
// 其他 HTTP 方法...
}
}
}
更多详细示例可以查看官网
https://github.com/swagger-api/swagger-parser
总结与福利:完整解析示例大放送
使用 swagger-parse 解析 Swagger 确实能够让我们的工作事半功倍,但在实际操作中,仍然会遇到一些繁琐的细节。为了帮助大家更好地掌握这一技术,文末特别为大家准备了一个完整的解析示例,感兴趣的小伙伴可以直接点击下方链接查看:
https://github.com/lyb-geek/springboot-learning/tree/master/springboot-swagger-parse