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

fis*_*tte 5 npm swagger typescript openapi angular

使用swagger-codegen-maven-plugin的Java / Spring服务器存根生成

在我的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>
Run Code Online (Sandbox Code Playgroud)

但是,如何在客户端角度应用程序的npm构建过程中集成相同的东西呢?

现在,我正在尝试在我的角度应用程序的npm构建过程中集成客户端代码的生成。我有一个api.yml,它基于Swagger 2.0定义我的其余端点。我希望npm构建生成类似于此typescript-angular-v4.3示例的api模块。据我所知,没有npm的官方软件包能像使用maven时swagger-codegen-maven-plugin那样做。

我在这里误会了吗?上面提到的示例已经是结果,但是推荐的达到目标的方法是什么?在基于npm的项目中进行这样的集成不是可行的方法吗?应该手动执行并将生成的打字稿文件检入sources目录吗?

小智 3

简而言之:
\n使用maven“swagger-codegen-maven-plugin”从Swagger yaml/json生成服务器/客户端代码,使用“exec-maven-plugin”安装节点依赖项(npm install)和客户端编译(ng build) 。

\n\n

详情:
\n最近也有类似的问题,网上没找到,按照如下方式实现(不理想请不要严格判断)。

\n\n

构建管道:

\n\n
    \n
  1. “swagger-codegen-maven-plugin”为\nSpring MVC 服务器生成模型和 API 代码
  2. \n
  3. Maven 构建并安装生成的服务器代码\n并作为工件安装到本地存储库
  4. \n
  5. Spring Boot 应用程序包含生成的服务器\nartifact 的依赖项,并具有额外的配置、属性和控制器的实际\n实现
  6. \n
  7. “swagger-codegen-maven-plugin”为\nAngular 客户端生成模型和 API 代码。输出目录位于“mem-client”Angular\n项目下。
  8. \n
  9. "exec-maven-plugin" 安装客户端依赖项 (npm install)\n"exec-maven-plugin" 构建应用程序 (ng build --env=prod \xe2\x80\xa6)\n存储在 Spring Boot 应用程序中的构建输出资源
  10. \n
  11. 一旦 Angular 客户端编译并添加到静态服务器资源,我们就可以\n使用 spring 服务器和客户端创建独立的 JAR\n(“spring-boot-maven-plugin”可以做到这一点)
  12. \n
\n\n

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

\n\n

示例:
\n这是一个工作示例(创建了简单的“记忆测验”游戏。注意:尚未合并到主分支,请参阅 GitHub 上的“测验”分支): https: //github.com/makimenko/mem/tree/测验

\n\n

项目概况:

\n\n
    \n
  1. 包含所有子模块的父级 maven pom“mem”项目
  2. \n
  3. Maven“mem-design”项目在资源中仅包含 Swagger 2.0 yaml 文件。
  4. \n
  5. Maven“mem-server”项目包括 Spring Boot 配置、\n属性和实际控制器
  6. \n
  7. Angular 5 客户端项目“mem-client”
  8. \n
  9. 自动生成的代码(未触及,仅在只读模式下用作\n导入。在源代码管理中被忽略)
  10. \n
\n\n

希望这些信息可以帮助您。

\n