如何基于给定的 openapi 3.0.3 yaml 文件生成 Quarkus rest JX-RS 服务

问题描述

目前我正在使用 quarkus 开发一个应用程序。我有一个描述所有内容的 openapi yaml 文件。我想知道是否有 quarkus 扩展或工具可以生成其余端点,从而生成和使用相同的文件格式。

解决方法

只要您不需要任何 Quarkus 特定功能(例如反应式、@Cached 等),那么 REST 端点就是标准的 JAXRS 端点,您可以使用 openapi 生成器为您生成接口和模型 POJO。之后,您只需实现生成的接口:

openapi-cli generate -i url_or_path_to_your_api_schema.yml -g jaxrs-spec --skip-validate-spec --additional-properties=interfaceOnly=true,useSwaggerAnnotations=false

上述命令将只为 API 中定义的任何模型生成 JAXRS 端点接口的任何 POJO 类。您可以将它们复制到您的项目中并实现 iface。

您可以使用 openapi generator plugin 将其集成到您的 Maven 构建中,而不是手动 cli 调用:

<plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
       <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <inputSpec>${project.basedir}/src/main/resources/yourapi.yaml</inputSpec>
                <generatorName>jaxrs-spec</generatorName>
                <additionalProperties>interfaceOnly=true,useSwaggerAnnotations=false</additionalProperties>
                <configOptions>
                   <sourceFolder>src/gen/java/main</sourceFolder>
                </configOptions>
            </configuration>
        </execution>
    </executions>
</plugin>

如果您喜欢的话,还有一个完整的 Quarkus 项目存根生成器:(作为 --library=quarkus 生成器的 jaxrs-spec 选项)

docs of OpenApi generators 中描述了更多您可能希望配置的选项。您还可以自定义代码模板(小胡子),以防内置的模板遗漏了您需要的东西,不过此时您可能会考虑创建自己的生成器。

如果您需要一个客户端并且您可以使用标准的 Microprofile REST 客户端方法,那么 Openapi 生成器也可以正常工作:

openapi-cli generate -i path_to_your_openapi_schema.yml -g java --library microprofile

OpenApi 生成器是一个复杂的项目,并非没有问题,因此最好是 Quarkus 社区采用针对服务器和客户端代码生成器的自定义优化工具,以充分利用所有功能,例如反应式客户端...