使用第三方协调两个 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.
- ServiceA生成ResourceA;
- ServiceB 消费 ResourceA 并生产 ResourceB;
- ServiceC 通过从 ServiceA 获取 ResourceA 并将其post发送到 ServiceB 来协调 ResourceB 的生产。
我基本上看到了两种组织这种互动的方式。
ServiceC 作为 ResourceA 的直接中介
- ServiceC 从 ServiceA 获取完整的 ResourceA
- ServiceCpost它到ServiceB
- 服务Breturns资源B
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/,这将减少网络调用并提高服务器性能。
我有 3 个 restful 服务(ServiceA、ServiceB 和 ServiceC)处理 2 个资源(ResourceA 和 ResourceB)。资源的媒体类型为application/hal+json.
- ServiceA生成ResourceA;
- ServiceB 消费 ResourceA 并生产 ResourceB;
- ServiceC 通过从 ServiceA 获取 ResourceA 并将其post发送到 ServiceB 来协调 ResourceB 的生产。
我基本上看到了两种组织这种互动的方式。
ServiceC 作为 ResourceA 的直接中介
- ServiceC 从 ServiceA 获取完整的 ResourceA
- ServiceCpost它到ServiceB
- 服务Breturns资源B
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/,这将减少网络调用并提高服务器性能。