将数据访问和业务逻辑移动到 CLI 并在 graphql 服务器中使用

Moving data access and business logic to CLI and using in graphql server

哦!我是一个主要在 postgres/nodejs/apollo graphql/react 堆栈中构建应用程序的小团队的后端。

在我的业余项目中,我使用 golang 并且在使用 cobra/viper 构建 CLI 应用方面表现不错。我开始考虑将所有关键业务逻辑和数据访问转移到以 golang 构建并作为二进制文件分发的可重用小型 CLI 应用程序中。我设想这些 cli 的输出产生 json 机器可读。

nodejs graphql 服务器将成为 CLI 二进制文件的更浅层包装器,并使用类似 const { stdout, stderr } = await exec('<<MY CLI --here >>');

的方式进行调用

将业务逻辑和数据访问分离到 CLI 中对我来说很有吸引力,因为它可以在非服务器场景中重用。此外,我真的很喜欢用 go 编写而不是 node。这似乎是个不错的主意,但也许我忽略了这种方法的一些陷阱?有人采取过这样的方法吗?

仅当个人用户从终端使用它们时才使用实用程序。 从 nodejs 服务器启动如此多的 cli 进程将不会高效和可扩展,以防节点服务器获得太多并发 requests.Launching 太多的 cli 进程会使其变慢并消耗系统资源。

我会使用 API。节点服务器会将请求通过管道传递给 go api 服务器。现在关于 cli,要让用户从终端以独立模式使用,您需要将所有逻辑添加到一个单独的模块 (lib) 中。此模块库可以托管(或使用)到 Go api 服务器以及 cmd 中。 cmd 实用程序和 go http api 服务器进程将只是主机,而实际的东西在模块中。

或者更好的是,命令行实用程序将有 2 种模式 运行 作为 http 服务器或作为独立实用程序。