使用第三方协调两个 restful 服务交互的最佳方法是什么?

What is the best way to coordinate the interaction of two restful services using a third one?

我有 3 个 restful 服务(ServiceA、ServiceB 和 ServiceC)处理 2 个资源(ResourceA 和 ResourceB)。资源的媒体类型为application/hal+json.

我基本上看到了两种组织这种互动的方式。

  1. ServiceC 作为 ResourceA 的直接中介

    • ServiceC 从 ServiceA 获取完整的 ResourceA
    • ServiceCpost它到ServiceB
    • 服务Breturns资源B
  2. ServiceC 作为 ResourceA 的间接中介

    • ServiceC 仅获取 ServiceA 上 ResourceA 的 link(例如,通过创建 ResourceA 时的内容位置 header)
    • ServiceC post 这个 link 到 ServiceB(使用 HAL 媒体类型的 link rel)
    • ServiceB直接从ServiceA获取完整的ResourceA
    • 服务Breturns资源B

第一种方法似乎是 "classic" 方法,而第二种方法会更便宜,因为只有一次完全传输 ResourceA (ServiceA -> ServiceB) 而不是两次 (ServiceA -> ServiceC ->服务 B).理想情况下,对于足够大的 ResourceA,第二种方法会更好。

使用第二种方法有什么问题吗?这在某种程度上被认为是 "anti-pattern" 还是不是 secure/recomendable?有没有更好的交互模式?

您可以使用任何方法。在第二种方法中,您需要确保可以从 ServiceB 访问 ServiceA。如果它是可访问的,那么实际上我无法猜测为什么我们需要完全独立的服务,即用于协调的 ServiceC。 ServiceB可以直接订阅ServiceA中的事件。如果您打算使用某种轮询,那么建议您查看 http://resthooks.org/,这将减少网络调用并提高服务器性能。