【问题标题】:Methods for calling APIs in one Nodejs app from another Nodejs app从另一个 Nodejs 应用程序调用一个 Nodejs 应用程序中的 API 的方法
【发布时间】:2014-07-13 17:28:36
【问题描述】:

我们的应用程序将有一个网站和一个移动应用程序,它们都与同一个 API 后端进行通信。我有一个仅提供 API 的 Nodejs 应用程序和另一个为网站提供 html 页面的 Nodejs 应用程序。我正在为这两个应用程序使用 Expressjs Web 框架。

从另一个 Nodejs 应用程序调用一个 Nodejs 中的 API 有哪些不同的方法?关于何时使用每种方法的附加信息会很棒。

编辑:

例如, 我有以下应用程序

  • NodejsAPI(节点和快递)
  • NodejsWebsite(节点和快递)
  • 移动应用

NodejsAPI 将为 MobileApp 和 NodejsWebsite 提供对 API 的访问。 MobileApp 将通过 http 访问 API。但我想知道 NodejsWebsite 在 NodejsAPI 应用程序中调用 API 的选项是什么。据我了解,这将是两个进程之间的进程间通信。对于 .net 应用程序,可以使用 .net 管道、tcp 通信等进行此类通信。在 unix 和 linux 平台上,Nodejs 应用程序的等效方法是什么?

从 IPC 的角度思考,我发现以下内容很有用,
What's the most efficient node.js inter-process communication library/method? https://www.npmjs.org/package/node-ipc

【问题讨论】:

  • 您有什么理由不选择更有效的方式吗?网站是在服务器端呈现的(例如 Jade 模板)还是单页 Web 应用程序(AngularJS、jQuery、Backbone、Ember.js...)?
  • 它不是 SPA 网站。它将通过服务器端的一些模板系统呈现。关键是要将 API 开发与网站开发分开,因此需要两个单独的 nodejs 应用程序。
  • 在这种情况下,您仍然可以对同一个应用进行单独开发,只需使用正确的工具即可。
  • @Zlatko 忘记扩展分离部分。我的意思不仅仅是单独的开发,而且它们将是具有自己的存储库的单独项目,版本和部署也不同。
  • 但这仍然可行,具体取决于您的用例。假设您将 API 部分开发为一个库。然后,您必须开发您的 web 应用程序并简单地将 api 作为另一个模块包含在 git subrepo 或 npm 或类似的东西中。但当然,在某些情况下,由于其他问题,您实际上需要分离代码。我只是说有这种可能性。

标签: node.js api rest ipc


【解决方案1】:

node's vanilla http clienthttp client swiss army knife, request,然后是superagent, similar to jQuery.ajax。为了让您的生活更轻松,有armrestfementa,它们是同一事物的不同风味。

现在,如果您想获得更高的性能并拥有应用程序的另一个接口,您可以使用以下 RPC 解决方案之一:

  • dnode:最流行的解决方案之一。它使事情变得非常容易。它使使用远程接口变得无缝。 phantomjs-node 使用 dnode。与其他对象相比,在处理大型对象时表现不佳。对于小东西,它是完美的。还有其他语言的其他端口。

  • zerorpc: 使用zeromq 作为以可靠而闻名的套接字库。它也支持连接到python客户端。

  • smith:在 cloud9 编辑器后端使用的 RPC 系统。基本上几乎和 dnode 一样好,但速度更快。 smith 和 zerorpc 都使用msgpack 而不是 JSON,因此它们将在网络上节省字节。

  • axon-rpc:轻量级解决方案。和 zerorpc 一样好用。您可以将其配置为使用带有 axon-msgpack 的 msgpack。

以上所有都可以在 TCP(用于不同的机器上)或 Unix 域套接字(比 TCP 快,但只能在同一台机器上)上工作。

如果您想要更高的性能,您可以将 NodejsAPI 嵌入到您的 NodejsWebsite 中,只需简单地要求它的接口模块即可。

如果您想要比这更好的答案,请写一个更具体的问题。这个问题太宽泛了。

【讨论】:

  • 我绝对可以从我的网站应用程序向 API 发出 HTTP 请求。感谢您提供一些不同模块的链接来帮助该过程。我还对我的描述进行了一些扩展。
  • 在我看来还是一样。 REST === flavored JSON HTTP requests,如果你还没有设计你的 API 并且 NodejsAPI 只会被 NodejsWebsite 使用,如果它不必是 REST,那么我可以建议不同的东西。
  • NodejsAPI 也将被移动应用程序使用,因此它必须通过 http 提供数据。
  • 那么这就是这个问题的全部内容。
  • 好吧,我之前的问题并不清楚。 REST 接口仅适用于 MobileApp,网站不必使用 REST 接口来访问 API。所以除了直接发出http请求之外,肯定还有其他方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多