我有两个系统,一个(我们称之为 S1)公开 RESTful API(我们称之为 WS1),另一个(我们称之为 S2)公开 SOAP API(我们称之为 WS2)。
我正在尝试找出一种从 S1 获取数据并将其添加到 S2 的方法。 WS1 公开了用于添加/获取数据(到/从 S1)的方法,而 WS2 仅具有用于添加数据(到 S2)的方法。
这两个 web 服务之间可以直接通信还是应该有某种机制在它们之间。我的猜测是“应该有人来管理他们的讨论”。
最佳答案
客户在哪里?
您有一个 REST Server
和一个 SOAP Server
,它们的目标都是等待来自各自客户端的请求——操作是否正确并不重要他们实现读取和/或写入他们的数据集,客户端仍然需要发起通信。
弥合差距。
因此,您需要一个桥接客户端来请求从 REST 服务器读取某些内容并请求将某些内容写入 SOAP 服务器。桥梁的其余基础设施由您决定。
您可以编写一个轻型脚本来提取 RESTful 数据并为少数特定的 RESTful 资源推送 SOAP 消息,或者您可以编写一个通用的 REST2SOAP 桥,它可以根据转换约定将 RESTful 资源映射到 SOAP 消息端点。
直接与消息队列。
编写一个抽象桥客户端将允许您通过直接调用 REST 服务、接收数据、处理数据、直接调用 SOAP 服务并向其发送数据来运行它。如果这是一个低负载情况,那很好。
如果我们有一个高负载的数据来处理同步的事情是不可行的,所以我们引入了消息队列。
制作人:
- 从 REST 服务读取数据;
- (也许)将其处理成本地形式(桥接客户端可以理解的形式,例如数组和对象);
- 然后对其进行序列化(serialize、json_encode等);
- 将其放入消息队列。
消费者
- 监听消息队列;
- 当它收到一条新消息时,它会反序列化它;
- 处理它;
- 将其发送到 SOAP 服务。
消息队列的总体优势在于,您可以根据需要启动任意数量的生产者或消费者,具体取决于哪些服务运行速度较慢。
关于web-services - 让 REST 与 SOAP 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21689303/