问题描述
目前我正在使用 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 社区采用针对服务器和客户端代码生成器的自定义优化工具,以充分利用所有功能,例如反应式客户端...