Swagger Parser指南

2025/03/27

1. 简介

Swagger是一组用于设计、描述和记录RESTful API的工具。

在本教程中,我们将探讨如何使用Java解析OpenAPI文档文件并提取其各种组件

2. 什么是Swagger?

Swagger本质上是一套用于开发和描述REST API的开源规则、规范和工具。然而,随着新标准和规范的发展,这些规范现在更名为OpenAPI规范(OAS)。

OpenAPI规范标准化了如何创建API设计文档,它创建了一个RESTful接口,我们可以使用它来轻松开发和使用API。API规范有效地映射了与其相关的所有资源和操作。

OpenAPI文档是一种自包含或复合资源,它定义API及其各种元素。该文档可以采用JSON或YAML格式表示。

OpenAPI规范的最新版本是OAS 3.1,它允许我们指定HTTP资源、动词、响应代码、数据模型、媒体类型、安全方案和其他API组件。我们可以使用OpenAPI定义来生成文档、代码生成和许多其他用例。

另一方面,Swagger已发展成为开发API的最广泛使用的开源工具集之一。它基本上提供了一套完整的工具集来设计、构建和记录API

为了验证OpenAPI文档,我们使用Swagger Validator工具。此外,Swagger Editor提供了一个基于GUI的编辑器,可帮助我们在运行时编辑和可视化API文档。

我们可以轻松地将生成的OpenAPI文档与第三方工具一起使用,例如导入到Postman中。

3. 使用Swagger解析器

Swagger Parser是Swagger工具之一,可以帮助我们解析文档并提取其各个组件。接下来我们来看看如何用Java实现解析器:

3.1 依赖

在开始之前,让我们将Swagger Parser的Maven依赖添加到项目的pom.xml文件中:

<dependency>
    <groupId>io.swagger.parser.v3</groupId>
    <artifactId>swagger-parser</artifactId>
    <version>2.1.13</version>
</dependency>

接下来,让我们深入了解如何解析文档。

3.2 OpenAPI文档示例

在开始之前,我们需要一些可以解析的示例OpenAPI文档,让我们使用以下名为sample.yml的示例OpenAPI YAML文档:

openapi: 3.0.0
info:
    title: User APIs
    version: '1.0'
servers:
    -   url: https://jsonplaceholder.typicode.com
        description: Json Place Holder Service
paths:
    /users/{id}:
        parameters:
            -   schema:
                    type: integer
                name: id
                in: path
                required: true
        get:
            summary: Fetch user by ID
            tags:
                - User
            responses:
                '200':
                    description: OK
                    content:
                        application/json:
                            schema:
                                type: object
                                properties:
                                    id:
                                        type: integer
                                    name:
                                        type: string
            operationId: get-users-user_id
            description: Retrieve a specific user by ID

上述YAML是一个非常简单的OpenAPI规范,它定义了一个通过ID获取用户详细信息的API。

类似地,我们还有一个名为sample.json的等效JSON文档文件:

{
    "openapi": "3.0.0",
    "info": {
        "title": "User APIs",
        "version": "1.0"
    },
    "servers": [
        {
            "url": "https://jsonplaceholder.typicode.com",
            "description": "Json Place Holder Service"
        }
    ],
    "paths": {
        "/users/{id}": {
            "parameters": [
                {
                    "schema": {
                        "type": "integer"
                    },
                    "name": "id",
                    "in": "path",
                    "required": true
                }
            ],
            "get": {
                "summary": "Fetch user by ID",
                "tags": [
                    "User"
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "id": {
                                            "type": "integer"
                                        },
                                        "name": {
                                            "type": "string"
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "operationId": "get-users-user_id",
                "description": "Retrieve a specific user by ID"
            }
        }
    }
}

我们将使用这些OpenAPI文档文件作为我们所有的编码示例。

现在让我们看看如何解析该文档。

3.3 解析OpenAPI YAML文档

首先,我们使用OpenAPIParser().readLocation()方法读取并解析YAML或JSON文件,此方法接收三个参数

  • String:我们要读取的文件的URL
  • List<AuthorizationValue>:如果要读取的文档受到保护,则要传递的授权标头列表
  • ParserOptions:额外解析选项,用于自定义解析时的行为

首先,让我们检查一下从URL读取OpenAPI文档的代码片段:

SwaggerParseResult result = new OpenAPIParser().readLocation("sample.yml", null, null);

readLocation()方法返回包含解析结果的SwaggerParserResult实例。

其次,我们将使用返回的SwaggerParserResult实例来获取解析的详细信息:

OpenAPI openAPI = result.getOpenAPI();

SwaggerParserResult.get()方法返回OpenAPI类的实例,返回的OpenAPI类实例基本上是OpenAPI文档的POJO版本。

最后,我们现在可以使用获取的OpenAPI实例中的各种Getter方法来获取OpenAPI文档的各个组件:

SpecVersion version = openAPI.getSpecVersion();

Info info = openAPI.getInfo();

List<Server> servers = openAPI.getServers();

Paths paths = openAPI.getPaths();

3.4 解析JSON文档

类似地,我们也可以解析等效的JSON文档文件,让我们通过将其文件名作为URL传递来解析sample.json文件:

SwaggerParseResult result = new OpenAPIParser().readLocation("sample.json", null, null);

此外,我们甚至可以使用OpenAPIParser().readContents(String swaggerString, List<AuthorizationValue> auth, ParseOptions options)方法从字符串解析OpenAPI规范文档

另外,我们可以通过调用SwaggerParserResult.getMessages()方法来获取解析过程中的任何验证错误和警告,此方法返回包含错误消息的字符串列表:

List<String> messages = result.getMessages();

4. 总结

在本文中,我们研究了OpenAPI规范和Swagger的基础知识。

我们了解了如何使用Java解析OpenAPI文档文件,我们实现了解析YAML和JSON规范文件的代码。

Show Disqus Comments
0 comments
Anonymous
Error: Not Found.
Markdown is supported

Be the first guy leaving a comment!

Post Directory

1. 简介
2. 什么是Swagger?
3. 使用Swagger解析器
  - 3.1 依赖
  - 3.2 OpenAPI文档示例
  - 3.3 解析OpenAPI YAML文档
  - 3.4 解析JSON文档
4. 总结
扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章