我有一个使用SOAP编写的C# Web服务。客户要求将相同的服务作为基于REST的服务提供。
是否有聪明/快速的方法可以实现这一点,还是需要全新重建?
基于SOAP的服务与REST服务使用完全不同的约束条件构建。如果服务很简单,那么这两种方法的最终结果可能看起来有些相似,但实际上它们是两种完全不同的方法。
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那么困难。