【问题标题】:Electron development - Generate API client based on swagger definitionElectron 开发 - 基于 swagger 定义生成 API 客户端
【发布时间】:2018-12-09 12:37:06
【问题描述】:

我对电子很陌生,试图用它来构建一个应该能够在机器上本地运行的跨平台应用程序。在服务器端,我已经有一个公开 REST API 的应用程序,并用 swagger 记录。

现在我正在尝试为这个 swagger 定义生成一个客户端存根,然后我可以将它与电子一起使用。这是如何实现的?我应该只生成 JS 代码并使用它(这将如何工作?)?或者是否有另一种(更好的)方法来做到这一点,因为 Electron 已经内置了访问 REST API 的函数,例如

我花了相当多的时间寻找解决方案但没有找到。现在我想知道使用 Electron 作为访问 REST API 的框架并使用 swagger codegen 自动生成代码是否是一种不常见的场景。

【问题讨论】:

    标签: electron swagger


    【解决方案1】:

    很棒的是,Electron 应用程序可以与普通 Web 应用程序非常相似地开发。这可能就是为什么您没有找到将 Electron 与您习惯使用的工具一起使用的具体说明的原因。

    您应该能够继续使用您通常用来生成存根以从任何 Web 应用程序调用 REST 的任何工具,并且当在 Electron 中引用存根时应该可以正常工作(只要它们在 Javascript 或 Typescript 中生成) .

    您是否尝试过使用 Swagger codegen,您是否尝试过使用生成的客户端代码 API,它是否给您带来了错误?尝试将任何特定错误作为新问题发布在 Stack Overflow 上以寻求解决方案(或将此问题编辑为更具体)。

    电子几乎就像一张空白的画布 - 没有“正确”或“错误”的开发方式,尽管肯定有“好的做法”和“坏的做法”。

    在 Electron 中开发应用程序肯定有一些独特的概念,为此,最好将您的开发经验与一些常规的 Electron 阅读和学习相结合。

    您很快就会遇到“独特的”Electron 概念,例如“main”和“renderer”,如果您有学习资料来指导您,这会容易得多。学习 Electron 的资料很多,这里就不一一列举了。

    另请注意,当提供特定错误或最少示例时,Stack Overflow 会更有用,您可能会通过这种方式获得更好的答案 :-) 有关更多信息,请参阅:https://stackoverflow.com/help/mcve

    【讨论】:

    • 您好 GrahamMc,谢谢您的回答。我意识到,当创建上面的问题不是很具体时,这不是我最聪明的时刻。但是,我找到了解决问题的方法,稍后我将作为附加答案发布。然而,从本质上讲,swagger-codegen 在创建 JS 库方面做得很好,我根本没有找到文档(查看 petstore 示例),即使它就在我的眼前。
    • 很高兴你来对了!再次考虑我的答案时,我想补充一点,我认为没有特定的 Electron 提供的工具或框架来生成 REST 客户端 api 代码,因此您可以使用像 swagger-codegen 这样的第三方工具。
    【解决方案2】:

    我实际上最终按照 GrahamMc 的建议使用了 swagger-codegen。

    一般的做法是这样的:

    rm -rf api
    wget http://localhost/site/json-schema -O api.json
    docker run --user `id -u`:`id -g` --rm -v ${PWD}:/local swaggerapi/swagger-codegen-cli generate -i /local/api.json -l javascript -o /local/api
    rm api.json
    cd api
    npm install
    

    第 1 步是清理旧生成的代码,第 2 步是下载 docker-container 中不可用的 swagger 规范。剩下的就是清理和安装依赖了。

    在代码中,它可以像这样使用:

    var jtm_api = require('.api/')
    var userApi = new jtm_api.UserApi()
    
    var cb = function(error, data, response) {
        if (response.status == 200) {
            //do whatever
        } else {
            //do whatever
        }
    }
    userApi.usersLoginPost(txtUser, txtPwd, cb)
    

    从生成文件夹中的README.md 文件开始,有大量文档介绍如何使用生成的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      • 2023-01-10
      • 1970-01-01
      • 2017-10-24
      • 2010-11-20
      相关资源
      最近更新 更多