SOAP转REST转换

3

我有一个使用SOAP编写的C# Web服务。客户要求将相同的服务作为基于REST的服务提供。

是否有聪明/快速的方法可以实现这一点,还是需要全新重建?


这取决于你当前的SOAP接口是做什么的——如果只是通过某个标识符查找文档,那就不太难……如果是插入/修改文档……也不算太大问题……但如果涉及到消息而不是文档,那你还有些工作要做。 - undefined
3个回答

5

基于SOAP的服务与REST服务使用完全不同的约束条件构建。如果服务很简单,那么这两种方法的最终结果可能看起来有些相似,但实际上它们是两种完全不同的方法。


我有一种可怕的感觉,这将是这种情况。 - undefined

4

SOAP和REST不仅在概念上有所不同,而且在机制上也不同。

从概念上讲,SOAP方法基本上是远程过程调用(RPC)。因此,您的web方法看起来像“GetListOfCustomers”和“DeleteCustomer”。而在REST中,您将客户建模为资源,并对这些资源使用HTTP动词。要获取客户列表,客户端将发送HTTP GET请求,服务器将以XML、JSON、HTML或自定义格式返回客户表示。客户表示可能包含嵌入式URL链接,允许客户端代码删除客户。这被称为HATEOAS

从机械上讲,SOAP是HTTP顶层的一层。这一层忽略并重新实现了现有的HTTP功能,如信封、动词、缓存、编码等。与REST相反,REST依赖于所有这些HTTP特性。因此,机械上REST更简单,因为没有SOAP具有的额外层。

当您被要求使现有的SOAP服务作为REST可用时,这可能意味着纯粹的机械方面。您可能需要“通过HTTP进行XML RPC”,这将需要您的一些工作,但可能不像从SOAP/RPC重新设计API到REST/HATEOAS那么困难。


1
非常感谢您详细的回复。我认为我需要进行一些学习,并期待一些漫长的夜晚。 - undefined
-1 你忘记了一些SOAP Web服务是基于消息或文档的,而不是完全基于RPC。你也可以不涉及意识形态,专注回答问题即可。 - undefined
1
@John Saunders:它的WSDL SOAP绑定风格可以是RPC或文档。编程模型大多数时候是RPC。但感谢您的评论,它与您的答案一样有用。 - undefined
如果服务是基于文档或消息的,而不是基于RPC的,那么WSDL SOAP绑定样式将是文档型的。我的第一个Web服务就是一个例子 - 它通过SOAP以文档形式接收所有请求,并通过XML进行所有处理,然后在SOAP响应中返回一个文档。 - undefined

0
解决方案将取决于您如何实现SOAP Web服务。
这不是一种“转换”。您将编写一个基于REST的服务来执行与您的SOAP服务相同类型的操作。如果您正确开发了SOAP服务,那么您将能够重用大部分代码。然后,您将能够部署一个同时满足两个需求的单一服务。

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