首页 文章

Swagger / OpenAPI:如何在构建过程中集成typescript / angular客户端的生成?

提问于
浏览
4

Java/Spring Server-Stubs Generation with swagger-codegen-maven-plugin

在我的Spring Boot Java项目中,我使用swagger-codegen-maven-plugin从我的Swagger 2.0 api.yml生成Spring MVC控制器接口(服务器存根) . maven构建过程中的集成非常简单 . 它像我以前用WSDL的jaxws-maven-plugin一样工作 . 这是带有swagger-codegen的pom.xml中的示例配置 . 它生成服务器端模型和mvc接口:

<plugin>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-codegen-maven-plugin</artifactId>
    <version>2.2.3</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <inputSpec>/api/api-v2.yml</inputSpec>
                <language>spring</language>
                <apiPackage>io.fischermatte.test.api</apiPackage>
                <modelPackage>io.fischermatte.test.api.model</modelPackage>
                <output>${project.build.directory}/generated</output>
                <configOptions>
                    <interfaceOnly>true</interfaceOnly>
                    <sourceFolder>/src/main/java</sourceFolder>
                    <library>spring-mvc</library>
                    <dateLibrary>java8</dateLibrary>
                </configOptions>
            </configuration>
        </execution>
    </executions>
</plugin>

But how to integrate the same thing in a npm build process of a client angular app ?

现在我试图在我的角度应用程序的npm构建过程中集成客户端代码的生成 . 我有一个基于Swagger 2.0定义我的休息 endpoints 的api.yml . 我希望npm构建生成类似于此typescript-angular-v4.3示例的api模块 . 就像我所看到的那样,没有正式的npm包可以像swagger-codegen-maven-plugin一样在你使用maven时这样做 .

我在这里误解了什么吗?上面提到的样本已经是结果,但推荐的方法是什么?在基于npm的项目中这样的集成是不是要走的路?是否应该手动执行并将生成的typescript文件检查到sources目录中?

1 回答

  • 1

    Briefly:
    使用maven "swagger-codegen-maven-plugin"从Swagger yaml / json生成服务器/客户端代码,使用"exec-maven-plugin"安装节点依赖项(npm install)和客户端编译(ng build) .

    Details:
    最近有类似的问题,在互联网上找不到任何东西,用以下方式实现它(请不要严格判断它是否不理想) .

    构建管道:

    • "swagger-codegen-maven-plugin"为Spring MVC服务器生成模型和API代码

    • Maven构建并安装生成的服务器代码,并作为工件安装到本地存储库

    • Spring Boot应用程序包括生成的服务器工件的依赖性,并具有其他配置,属性和控制器的实际实现

    • "swagger-codegen-maven-plugin"为Angular Client生成模型和API代码 . 输出目录位于"mem-client" angular项目下 .

    • "exec-maven-plugin"安装客户端依赖项(npm install)"exec-maven-plugin"构建应用程序(ng build --env = prod ...)存储在Spring Boot应用程序资源中的构建输出

    • 一旦Angular客户端编译并添加到静态服务器资源,我们就可以使用spring服务器和客户端创建独立的JAR("spring-boot-maven-plugin"可以这样做)

    注意:请注意,生成的服务器和客户端代码是只读的,仅作为依赖项/导入包含在内 . 在单独的项目中实际控制控制器 . 要启动服务器/客户端编码,请执行“mvn generate-sources” . 要将服务器客户端创建为独立Web应用程序,只需在父“mem”项目中执行“mvn install” . 这将创建包含其中所有必要内容的jar .

    Example:
    这是一个工作示例(创建简单的"Memory Quiz"游戏 . 注意:尚未合并到master分支,请参阅GitHub上的"quiz"分支):https://github.com/makimenko/mem/tree/quiz

    项目概述:

    • 包含所有子模块的父maven pom "mem"项目

    • Maven "mem-design"项目仅在资源中包含Swagger 2.0 yaml文件 .

    • Maven "mem-server"项目包括Spring Boot配置,属性和真实控制器

    • Angular 5客户端项目"mem-client"

    • 自动生成的代码(未触及,仅在只读模式下用作导入 . 在源代码管理中忽略)

    希望这些信息可以帮到你 .

相关问题