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

问题描述

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

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

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

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

解决方法

仅当个人用户从终端使用实用程序时才使用实用程序。 如果节点服务器收到太多并发请求,那么从 nodejs 服务器启动如此多的 cli 进程将不会高效且可扩展。启动过多的 cli 进程会使其变慢并消耗系统资源。

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

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