是否有一种优化的方式来在本地访问基于弹簧的rest api?

时间:2015-01-07 20:50:39

标签: java spring rest

假设我们有一个REST API(使用spring RestController实现),可以从远程以及同一本地计算机(例如移动电话客户端和同一服务器上的某个mvc组件)访问。

对于同一台机器上的本地软件组件,我猜有两个极端:

  • 他们在本地计算机上执行实际的HTTP请求可能会带来显着的不必要的开销
  • 或者他们以某种方式直接通过Java调用REST API的实现,可能会向依赖的软件组件引入过多的API实现知识

基于弹簧的应用是否有任何推荐的中间地带?有些旁路是针对本地执行进行了优化的,但确实将API保留为黑盒?

由于

1 个答案:

答案 0 :(得分:2)

作为良好设计的原则,我总是看到服务协议与服务实现脱节。通过这种方式,您可以将服务(例如,简单的Spring bean)公开为REST服务,EJB或任何需要的东西。是的,这是更多的代码,但它使服务更具弹性,并适应特定技术的过剩。

关于你的问题,这实际上取决于“在同一台机器上”的含义:

  • 相同的应用程序,您可以使用相同的bean作为依赖项(如果您将服务实现移出REST控制器)
  • 相同的JVM,您可以使用类似Guava的EventBus并使用JSON或Protobuffer对其进行编码(推荐)
  • 相同的主机,您可能希望保持服务位置不可知并使用现在的普通REST / TCP。我不认为开销证明增加了复杂性,除非你的性能要求像交易室一样。

简而言之,如果您没有非常苛刻的性能目标,或者您不能肯定假设这两个服务将始终驻留在同一主机/ jvm中,那么REST / TCP就是好的。