Swagger中的枚举文档

2023/05/12

1. 概述

在本教程中,我们将学习如何使用swagger-maven-plugin插件在Swagger中记录枚举,并在Swagger编辑器中验证生成的JSON文档。

2. 什么是Swagger?

Swagger是一种用于定义基于Rest的API的开源工具,在当今世界,大多数组织都在转向微服务和API优先的方法,Swagger在设计和记录API方面非常方便。它还提供了各种工具,如SwaggerEditor、Swagger UI和SwaggerCodeGen来辅助API开发。

此外,Swagger是OpenAPI规范或OAS的实现,它定义了RestAPI开发的一套标准;因此,它可以帮助全球的组织标准化编写API的过程。

我们的应用程序生成的JSON文件也将遵循OpenAPI规范。

让我们试着理解枚举在Swagger中的重要性。一些API需要用户坚持使用一组特定的预定义值,这些预定义的常量值称为枚举。同样,当Swagger公开API时,我们希望确保用户从这个预定义集中选择一个值而不是自由文本。换句话说,我们需要在swagger.json文件中记录枚举,以便用户知道可能的值

3. 实现

让我们以REST API为例并跳转到实现,我们将实现一个POST API来为组织雇用员工担任特定角色。但是,角色只能是以下角色之一:Engineer、Clerk、Driver或Janitor

我们将创建一个名为Role的枚举,其中包含员工角色的所有可能值,并创建一个将角色作为其属性之一的Employee类,让我们看一下UML图,以便更好地理解类及其关系:

为了在Swagger中记录这一点,首先,我们将在我们的应用程序中导入并配置swagger-maven-plugin。其次,我们将在我们的代码中添加所需的注解,最后,我们将构建项目并在Swagger编辑器中验证生成的Swagger文档或swagger.json。

3.1 导入和配置插件

我们将使用swagger-maven-plugin插件,我们需要将其作为依赖项添加到我们应用程序的pom.xml中:

<dependency>
    <groupId>com.github.kongchen</groupId>
    <artifactId>swagger-maven-plugin</artifactId>
    <version>3.1.1</version>
</dependency>

此外,为了配置和启用这个插件,我们需要将它添加到pom.xml的<plugins>部分:

  • locations:此标签指定包含@Api的包或类,以分号分隔
  • info:此标签提供API的元数据,Swagger-ui使用此数据显示信息
  • swaggerDirectory:这个标签定义了swagger.json文件的路径
<plugin>
    <groupId>com.github.kongchen</groupId>
    <artifactId>swagger-maven-plugin</artifactId>
    <version>3.1.1</version>
    <configuration>
        <apiSources>
            <apiSource>
                <springmvc>false</springmvc>
                <locations>cn.tuyucheng.taketoday.swaggerenums.controller</locations>
                <schemes>http,https</schemes>
                <host>tuyucheng.com</host>
                <basePath>/api</basePath>
                <info>
                    <title>Tuyucheng - Document Enum</title>
                    <version>v1</version>
                    <description>This is a Tuyucheng Document Enum Sample Code</description>
                    <contact>
                        <email>pmurria@tuyucheng.com</email>
                        <name>Test</name>
                    </contact>
                    <license>
                        <url>https://www.apache.org/licenses/LICENSE-2.0.html</url>
                        <name>Apache 2.0</name>
                    </license>
                </info>
                <swaggerDirectory>generated/swagger-ui</swaggerDirectory>
            </apiSource>
        </apiSources>
    </configuration>
    <executions>
        <execution>
            <phase>compile</phase>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
</plugin>

3.2 记录枚举

为了在Swagger中记录枚举,我们需要使用注解@ApiModel来声明模型

在此示例中,我们创建了一个具有四个可能值(Engineer、Clerk、Driver和Janitor)的枚举Role,由于我们需要记录这个枚举,因此我们将向枚举Role添加@ApiModel注解。换句话说,这会让Swagger知道模型的存在,在Employee类中,我们将使用@ApiModel注解标注Employee并使用@ApiModelProperty注解标注Role。

我们的Employee、Role和HireController将如下所示:

@ApiModel
public class Employee {
    @ApiModelProperty
    public Role role;

    // standard setters and getters
}
@ApiModel
public enum Role {
    Engineer, Clerk, Driver, Janitor
}

接下来,我们将创建一个带有@Path作为“/hire”的API,并将Employee模型用作hireEmployee方法的输入参数,我们必须将@Api添加到我们的HireController中,以便swagger-maven-plugin知道并且应该考虑将其用于记录:

@Api
@Path(value="/hire")
@Produces({"application/json"})
public class HireController {

    @POST
    @ApiOperation(value = "This method is used to hire employee with a specific role")
    public String hireEmployee(@ApiParam(value = "role", required = true) Employee employee) {
        return String.format("Hired for role: %s", employee.role.name());
    }
}

3.3 生成Swagger文档

要构建我们的项目并生成Swagger文档,请运行以下命令:

mvn clean install

构建完成后,插件将在generated/swagger-ui或插件中配置的位置生成swagger.json文件:

查看文件定义,我们将看到在员工属性中记录的枚举Role及其所有可能的值。

{
    // ...
    "definitions" : {
        "Employee" : {
            "type" : "object",
            "properties" : {
                "role" : {
                    "type" : "string",
                    "enum" : [ "Engineer", "Clerk", "Driver", "Janitor" ]
                }
            }
        }
    }
}

现在,我们将使用在线Swagger编辑器可视化生成的JSON并查找枚举Role:

4. 总结

在本教程中,我们讨论了什么是Swagger,并了解了OpenAPI规范及其在组织API开发中的重要性。此外,我们使用swagger-maven-plugin插件创建并记录了包含枚举的示例API。最后,为了验证输出,我们使用Swagger编辑器来可视化生成的JSON文档。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章