使REST与SOAP通信

3
我有两个系统,一个(我们称之为 S1)公开了一个 RESTful API(我们称之为 WS1),另一个(我们称之为 S2)公开了一个 SOAP API(我们称之为 WS2)。
我正在尝试找到一种方法,从 S1 中获取数据并将其添加到 S2 中。 WS1 公开了添加/获取数据的方法(进入/来自 S1),而 WS2 只有添加数据的方法(进入 S2)。
这两个 Web 服务是否可以直接相互通信,还是应该在它们之间使用某种机制。我的猜测是,“有人应该管理它们的交流”。
1个回答

4

客户端在哪里?

你有一个REST服务器和一个SOAP服务器,它们的目标都是等待来自各自客户端的请求——无论它们实现的操作是读取和/或写入数据集,客户端仍然需要发起通信。

填补这个空白。

因此,您需要一个桥接客户端,以请求从REST服务器读取内容并请求将内容写入SOAP服务器。桥接的其余基础设施由您负责。

您可以编写轻量级脚本,针对特定的RESTful资源提取RESTful数据并推送SOAP消息,也可以编写通用的REST2SOAP桥接程序,该程序可以根据转换约定将RESTful资源映射到SOAP消息终点。

直接与消息队列。

编写抽象的桥接客户端将使您能够通过直接调用REST服务运行它,接收数据,处理数据,然后直接调用SOAP服务并将数据发送给它。如果这是低负载情况,那就没问题。

如果我们有大量数据要处理,同步处理将不可行,因此我们引入消息队列。

生产者:

  • 从REST服务中读取数据;
  • (可能)将其处理成桥接客户端所理解的本地形式,例如数组和对象;
  • 然后对其进行序列化(serialize、json_encode等);
  • 将其放入消息队列。

消费者:

  • 侦听消息队列;
  • 当它收到新消息时,对其进行反序列化;
  • 处理它;
  • 将其发送到SOAP服务。

消息队列的整体优点在于您可以根据这些服务中运行较慢的服务启动尽可能多的生产者或消费者。


很好的解释 :) 它几乎总结了我在过去几天里所做的发现。我会尝试使用Rabbitmq以异步方式采用您上面描述的方法。让我们看看效果如何 :D - Radu

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