【发布时间】:2012-02-15 23:43:20
【问题描述】:
最近我不得不编写 10 行 .NET 代码来调用 REST Web 服务。这是非常常规和日常的代码,所以不是问题。但是,这让我想知道,REST Web 服务有什么好处,它需要编写一些方法来调用,而不是像 WCF Web 服务那样您只需添加服务引用并具有“API 感觉”(即类/方法等)。
谢谢
【问题讨论】:
标签: wcf
最近我不得不编写 10 行 .NET 代码来调用 REST Web 服务。这是非常常规和日常的代码,所以不是问题。但是,这让我想知道,REST Web 服务有什么好处,它需要编写一些方法来调用,而不是像 WCF Web 服务那样您只需添加服务引用并具有“API 感觉”(即类/方法等)。
谢谢
【问题讨论】:
标签: wcf
它还具有变得更加开放的优势。任何会写的人都可以创建一个链接来访问 REST api。我想不出任何更容易获得的东西。
【讨论】:
REST 和 SOAP 在不同的情况下都很棒。我不确定您尝试调用的服务的性质以及服务的位置,但有时人们说要使用互联网上的 RESTful 服务,并在公司内部使用基于 SOAP 的。
你提到了:
您只需添加一个服务引用并拥有一个 WCF Web 服务 “API 感觉”
假设您的意思是基于 SOAP 的服务,那么您所说的对 VS 用户来说是正确的。如果您尝试使用 Apple 的 XCode 访问服务怎么办?查看this question,看看需要多少行代码来替换VS在XCode中为你生成的Stubs。
另外通常 RESTful 消息比 SOAP 消息更轻量级(查看 this),这使得它们在带宽问题(例如手机)时更有效。
因此,在考虑您正在使用的服务的所有方面时,您会更好地理解为什么使用 REST 或 SOAP。
【讨论】:
REST 使用 HTTP 本身作为 API;它更像是一种风格。熟悉 HTTP 的人会立即理解一个设计良好的服务。不涉及 WSDL、SOAP 或 XML。
我认为它更轻。这对客户端来说当然更容易,因为他们不需要 SOAP 客户端。一个简单的 HTTP 连接就可以了。
好处更多地与客户有关,而不是与开发人员有关。
【讨论】:
您正在使用 .Net 使用该服务,该服务具有处理 SOAP 服务的工具。假设您在移动设备、浏览器或大型机上。那么那个 SOAP 服务会变得更胖,并且可能很难实现。 REST 与 HTTP 紧密相关,几乎所有技术堆栈都支持它,因此它能够访问尽可能多的客户端。这就是为什么当我在 SOAP 和 REST 之间做出决定时,我会问自己谁会使用它。如果只是少数 .Net 或其他复杂的客户端,那么 SOAP 可能没问题,如果我需要尽可能大的覆盖范围,REST 是更好的选择。
【讨论】:
由于 REST 按照其设计方式使用 HTTP,因此您可以在几乎任何平台和任何语言上开发客户端。实现服务器也是如此。人们认为许多网站已经是 RESTfull 的。您不必了解所有 WS-* 内容即可使用 API。您可以使用 cURL 之类的东西与 REST 服务进行交互。使用 SOAP 则要复杂得多。
REST 还支持自定义内容类型,因此可以对同一个 URL(例如 http://example.com/customers)执行 GET 并通过简单地更改标头来获取 XML、JSON、CSV 或 XLS 响应。这当然取决于服务的实现。有些会在 URL 上添加扩展名,例如 http://example.com/customers.xml 或 http://example.com/customers.xls 以达到相同的效果。但底线是您可以将流直接保存到磁盘并使用它。将信息发送到服务器时也是如此。您可以将其作为原始格式的 XML、JSON、CSV、XLS 发送。 SOAP 限制了您传输数据的方式和格式。
体面的 RESTfull 服务也是可导航的,这意味着对另一个资源的引用只是我可以访问的链接(类似于 HTML)。这对于 SOAP 几乎是不可能的。
SOAP 安全性可能会变成一头复杂的野兽。对于 REST 服务,简单的 HTTP 身份验证可能就足够了,或者您可以使用 OAuth 和 Open ID 2.0。
借助 REST,可以拥有更小的有效负载。这对于移动环境和这些应用程序的整体性能非常有用。
如果您通过 API 获利,您会发现它的支持更简单,并且可以让尽可能多的客户使用您的 API。我们销售了一个基于 SOAP 服务的产品,由于其复杂性和缺乏对 WCF 实现 SOAP 方式的支持(某些 JAVA 框架),我们发现支持它相当痛苦。
也就是说,REST 服务的开发人员必须确保它真正开放、轻量级、简单且易于使用。有效载荷和 URL 需要很好地记录。 WSDL 为 SOAP 做到了这一点,并极大地帮助实现了其中的一些目标。
【讨论】:
用soap数据格式是XML。它的有效载荷大小比 Json 大得多。您可以谷歌进行性能测试比较 b/w Json 和 xml。 Rest 不对数据格式施加约束。所有类型的客户都可以轻松使用休息。无论是 .net 客户端还是在浏览器中运行的 JavaScript。您也可以从 JavaScript 调用肥皂服务,但它既乏味又丑陋。 最后我们都想成为羊群的一部分:-)
【讨论】: