RMI与REST服务的区别

19
我们正在开发一个门户/ Web 客户端,使用 JSF 技术,并且正在开发相关服务。我建议将该服务暴露为 REST 服务,但另一位团队成员表示应该采用 RMI 实现,因为从开发和测试的角度来看,处理 Java 对象更加容易。
我的观点是无论是开发还是测试方面的工作量几乎相同,但如果采用 REST Web 服务就可以获得诸多好处。
顺便提一下:我们已经设置好了 REST 平台,因此没有额外的框架支持费用。这些服务是为我们使用 REST API 的智能手机客户端而提供的。
最终,我们的经理决定采用 RMI 方式,但我仍然认为 REST 是更明智的选择。
你会选择 REST 还是 RMI?
注意:我没有任何反对我的团队成员或经理的意思,只是想在这里学习一些东西。

没有足够的信息给出明确的答案,但如果你已经有了一个REST API,你的经理应该有充分的理由将另一种远程通信方式添加到混合中。 - SteveD
1
如果您在内部运行,则RMI很好。任何通过Internet进行客户端/服务器交互的应用程序都应使用现代Web服务协议。 - jtahlborn
3个回答

9
如果您的客户端和服务器之间有防火墙,那么RMI流量很可能会被阻塞。大多数防火墙都开放HTTP流量,因此REST不应该有问题通过。

3
如果你想将软件销售给公司,这可能会是一个大问题——它们不喜欢为RMI打开端口,但是嘿,他们会让你通过HTTP(S)隧道传输任何东西! - SteveD
4
你也可以通过HTTP进行RMI。 - b_erb
你可以打开防火墙的端口! - Vahid Hashemi

5

反对RMI,支持REST/SOAP等的最大论点是客户端不必是Java。

如果您的前端将来从JSF更改为ASP,那么您可能会遇到一些麻烦。

除此之外,RMI是正确的选择。更好的选择是EJB(它是RMI的一个层),具有额外的优势--许多供应商已经实现了EJB规范,您可以获得对象池、事务管理等优势。


7
如果你指的是EJB(Enterprise Java Beans),那我不同意。如果你只需要RMI,那么与EJB相关的任何操作都会带来巨大的开销。 - Angel O'Sphere

4
客户端如果使用Java,可以使用RMI协议。但这只是一种点对点的协议,思考应该更加全面。如果你需要进行大量读取操作并希望利用HTTP技术进行缓存等操作,REST作为一种范式是很有趣的选择。接下来你可能可以轻松地实现"分页游标",将数据分成小页面发送,并添加信息以便检索下一页。
你的问题基本上被表述为一个技术问题,这是错误的方法。你不应该关注技术,而应该关注系统架构。整个软件系统,它的能力、性能、扩展性、配置和维护都会因你使用RMI或REST而完全不同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接