Swagger-Codegen:如何将所有文件合并到一个文件中以进行客户端代码生成

Posted

技术标签:

【中文标题】Swagger-Codegen:如何将所有文件合并到一个文件中以进行客户端代码生成【英文标题】:Swagger-Codegen: How do I consolidate all files into one file for Client-Code-Generation 【发布时间】:2018-06-06 17:42:51 【问题描述】:

我刚刚开始使用 Swagger 和 NodeJS。我能够在我的 NodeExpress 应用程序中实现 Swagger,并且准确地说,我还能够使用 Swagger-Codegen (Typescript-Angular) 生成 typescript-client-code。

我遇到的一个问题是生成的代码分散在许多不同的文件中。我希望它只输出一个文件api.ts,它包含来自 API 调用和接口/模型的所有内容。

我一直在寻找解决这个问题的方法,因为随着后端的增长,生成的客户端代码很难阅读和维护。

任何建议或指示将不胜感激。

节日快乐!谢谢

编辑:这几天我一直在寻找答案,但仍然没有找到答案。我目前正在使用 ASP.NET Core 开展一个项目,他们有 NSwag,这可以实现我想要通过 Node Swagger 实现的目标。

【问题讨论】:

我目前生成了一个文件而不是多个文件——我想要相反的结果,你介意分享你的配置来完成它,这样 o/p 是多个文件而不是一个文件吗?我尝试对 petStore.json 使用它,它生成了一个文件 @Jaya 在我回答之前,请问我们是否在同一页面上? (typescript-angular, swagger-codegen 2.3.0)? 我使用这里定义的swagger-js-codegen: ^1.12.0 github.com/swagger-api/swagger-codegen#where-is-javascript 和 vuejs 的打字稿.. 基本上试图为暴露其 swagger.json 文件的 api 生成 ts 模型和 ts 客户端。 使用 Swagger-codegen 生成 typescript-fetch 客户端存根,你应该很高兴;) 【参考方案1】:

Swagger 使用 Mustache 模板来生成代码。为了让更简单 更改您可以简单地创建built-in templates 之一的副本和 修改它。

然后你可以像这样使用你修改过的模板:

swagger-codegen-cli generate -t path/to/template/dir/ -i spec.json

但是,不能使用模板更改输出目录结构 独自的。为此,您需要一个自定义代码生成模块。您可以create your own 或修改built-in ones 之一。

【讨论】:

【参考方案2】:

TL;博士

您可以将所有文件编译成单个*.ts 文件,如this post 所示。

持续集成方法

Swagger 代码生成器简化了维护,因为它允许您从持续集成的角度进行思考

您不应该担心代码审查或美学(因为它是机器生成的代码),而是:

API 版本控制 函数、方法和类签名 文档

如果您使用 Jenkins 或 Ansible 等 CI 系统,您可以自动将库部署到 private NPM account(用于 JS 和 TS)或Maven server(用于 Java 和 Kotlin)。

保持包版本号持续更新将允许 IDE 正确提示用户有关 API 的更新。

【讨论】:

谢谢。虽然我已经完成了这个整合的事情,但这个答案提供了一个准确的解决方案。 对于 NPM 包,如果您正确提供版本控制标签,您也可以使用 GitHub 存储库,如 ***.com/questions/16350673 所示

以上是关于Swagger-Codegen:如何将所有文件合并到一个文件中以进行客户端代码生成的主要内容,如果未能解决你的问题,请参考以下文章

将生成的 Flask 应用程序代码(Swagger-Codegen)粘合到后端实现的最简洁方法

如何根据需要将所有文件合并为一个文件

我可以在 swagger-codegen 中定义新的 mustache 模板变量吗?

swagger-codegen 或 openapi-generator PHP 版本

如何将不同 .csv 文件中的所有数据合并到一个表中?

Swagger-codegen 开始使用