是否有 Maven 插件可以从 swagger 端点生成客户端代码?

Posted

技术标签:

【中文标题】是否有 Maven 插件可以从 swagger 端点生成客户端代码?【英文标题】:Is there a Maven plugin to generate client code from a swagger endpoint? 【发布时间】:2021-11-17 03:08:30 【问题描述】:

我需要使用另一个团队创建的 REST API。他们为我提供了一个 swagger-ui 端点。我正在用Java编码。我正在使用 SpringFramework。我正在寻找能够生成我可以实现的存根和架构类的东西。

【问题讨论】:

请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案1】:

Swagger Codegen 有一个Maven plugin。它可以生成 Spring 服务器存根和 Java 客户端 SDK。

Codegen 有两个版本,3.x 和 2.x。他们有不同的groupId

版本 3.x 用于 OpenAPI 3.0 定义 (openapi: 3.0.x):

<plugin>
    <groupId>io.swagger.codegen.v3</groupId>
    <artifactId>swagger-codegen-maven-plugin</artifactId>
    <version>3.0.27</version>

    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <inputSpec>src/main/resources/api.yaml</inputSpec>
                <language>java</language>
                <configOptions>
                   <sourceFolder>src/gen/java/main</sourceFolder>
                </configOptions>
            </configuration>
        </execution>
    </executions>
</plugin>

版本 2.x 用于 OpenAPI 2.0 定义 (swagger: '2.0')。

<plugin>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-codegen-maven-plugin</artifactId>
    <version>2.4.21</version>

    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <inputSpec>src/main/resources/api.yaml</inputSpec>
                <language>java</language>
                <configOptions>
                   <sourceFolder>src/gen/java/main</sourceFolder>
                </configOptions>
            </configuration>
        </execution>
    </executions>
</plugin>

对于受支持的 &lt;language&gt; 值,请将您的 OpenAPI YAML/JSON 文件粘贴到 https://editor.swagger.io 并检查“生成服务器”和“生成客户端”菜单中的值。

【讨论】:

我相信这个答案是为了从指定为 YAML 的 OpenAPI 生成服务器代码。我需要为一个客户端生成代码,我已经获得了一个招摇的 URL。 使用&lt;language&gt;java&lt;/language&gt; 或任何你想要的输出目标。所有代码生成器都需要一个 OpenAPI YAML/JSON 文件作为输入,您可以将其从 Swagger UI 导出为explained here。 你明白我正在尝试从合作伙伴的 API 生成客户端。我将调用他们的 API。 &lt;language&gt;java&lt;/language&gt; 生成一个 Java client SDK。 Codegen 可以生成服务器和客户端,输出取决于&lt;language&gt; 参数。一些语言值表示服务器,另一些表示客户端。

以上是关于是否有 Maven 插件可以从 swagger 端点生成客户端代码?的主要内容,如果未能解决你的问题,请参考以下文章

使用maven导出swagger2文档

是否有 Maven 插件来创建 Jenkins 作业

Swagger Codegen Maven插件,带有路径变量和请求参数,OpenApi产生不起作用的代码

是否有任何 Maven 插件可用于从 Jhipster 中删除生成类的 getter/setter 并添加 lombok [关闭]

swagger2是属于插件吗

如何避免swagger codegen接口中的默认方法实现?