Javascript 本地应用程序之间的Restful通信是个好主意吗?

Javascript 本地应用程序之间的Restful通信是个好主意吗?,javascript,python,ruby,rest,node.js,Javascript,Python,Ruby,Rest,Node.js,我想知道让本地应用程序(在同一台服务器中)完全通过RESTfulAPI相互通信是否是个好主意 我知道这并不少见,因为我们已经有了像CouchDB这样的应用程序,它们使用HTTP REST进行通信,甚至与本地应用程序进行通信 但我想通过创建类似于大型应用程序的模块的应用程序将其提升到更高的层次,而大型应用程序也可能是另一个应用程序的模块,等等。换句话说,将有许多本地应用程序/模块与Restful API通信 通过这种方式,这些应用程序/模块可以使用任何语言,并且可以在服务器之间进行有线通信 但我有

我想知道让本地应用程序(在同一台服务器中)完全通过RESTfulAPI相互通信是否是个好主意

我知道这并不少见,因为我们已经有了像CouchDB这样的应用程序,它们使用HTTP REST进行通信,甚至与本地应用程序进行通信

但我想通过创建类似于大型应用程序的模块的应用程序将其提升到更高的层次,而大型应用程序也可能是另一个应用程序的模块,等等。换句话说,将有许多本地应用程序/模块与Restful API通信

通过这种方式,这些应用程序/模块可以使用任何语言,并且可以在服务器之间进行有线通信

但我有一些问题:

  • 这是个好主意吗
  • 它们之间的数据传输会很慢吗
  • 如果我这样做,那么每个应用程序/模块都必须是HTTP服务器,对吗?因此,如果我的应用程序使用100个应用程序/模块,那么每个应用程序/模块都必须是本地HTTP web服务器,每个服务器都运行在不同的端口上(http://localhost:81,等等)对吗
  • 有什么我应该知道的最佳实践/问题吗

关于使用restful解决方案进行应用程序集成,我认为这是一个好主意,并在另一个问题上发表了类似的观点


坦率地说,我认为100个应用程序不需要100台服务器,也许只需要在同一台服务器上使用100个端口即可

而且,RESTful界面将为您提供扩展服务器和实现负载平衡的灵活性,如果您希望能够扩展到大型服务器的话

  • 这是个好主意吗
当然,也许

  • 数据是否会被删除 他们之间的转换慢吗
是的!但是和什么相比呢?与本机、内部调用相比,这绝对是一个缓慢的过程。和其他一些网络API相比呢,不一定慢

  • 如果我 执行此操作后,每个应用程序/模块 必须是HTTP服务器,对吗?所以如果 我的应用程序使用100 我必须拥有的应用程序/模块 100台本地HTTP web服务器已启动并可用 使用不同的端口运行每个 (http://localhost:81, , 等等)

不,没有理由为每个模块分配端口。各种各样的方法都可以做到这一点

  • 任何 最佳实践/我应该了解的问题 知道吗
这将成功的唯一方法是,如果您所谈论的服务足够粗糙。这些必须是大的、黑盒的服务,这使得打电话的费用是值得的。每个事务都将产生连接成本、数据传输成本和数据封送成本。因此,您希望这些事务尽可能少,并且希望有效负载尽可能大以获得最佳效益

你说的是真正使用REST架构还是仅仅通过HTTP来回发送东西?(这些是不同的事情)REST会产生自己的成本,包括嵌入式链接、无处不在的通用数据类型等

最后,您可能根本不需要这样做。它很可能是“有点酷”,一个“很好拥有”,“在白板上看起来不错”,但如果真的不需要它,那就不要做。只需遵循隔离内部服务的良好实践,以便在以后决定执行类似操作时,只需插入管理通信等所需的粘合层即可。添加远程分发将增加风险、复杂性和降低性能,(扩展!=性能)因此,应该有充分的理由这样做

可以说,这是其中的“最佳实践”

编辑--对评论的回应:


你是说我运行了一台网络服务器 处理所有传入的请求?但是 这些模块不会是独立的 应用程序,这会破坏整个系统 目的。我想要每一个 模块能够自行运行

不,这并没有违背目的

事情是这样的

假设你有3项服务

乍一看,可以公平地说,这是三种不同的服务,在3台不同的机器上,运行在3台不同的web服务器上

但事实是,这些都可以在同一台机器上运行,在同一个web服务器上运行,甚至可以运行完全相同的逻辑

HTTP允许您映射各种内容。HTTP本身就是一种抽象机制

作为客户机,您只关心要使用的URL和要发送的负载。它最终与哪台机器对话,或者它执行的实际代码不是客户机的问题

在架构级别上,您已经实现了一种抽象和模块化的方式。URL允许您组织您的系统,无论您想要什么逻辑布局。物理实现不同于逻辑视图

这3个服务可以在由单个进程提供服务的单个计算机上运行。另一方面,它们可以表示1000台机器。你认为有多少机器响应“www.google.com”

您可以轻松地在一台机器上托管所有3个服务,而无需共享任何代码(除了web服务器本身)。使服务从原始机器移动到其他机器变得容易

主机名是将服务映射到计算机的最简单方法。任何现代web服务器都可以为任意数量的不同主机提供服务。每个“虚拟主机”可以在该主机的名称空间内为任意数量的单个服务端点提供服务。在“主机”级别,在必要时将代码从一台机器重新定位到另一台机器并不重要

您应该进一步了解现代web服务器将任意请求定向到服务器上实际逻辑的能力。你会发现它们非常灵活

这是个好主意吗

对。一直都是这样。例如,所有数据库服务器都是这样工作的。Linux充满了c语言