为什么我们需要RESTful Web服务?

我将学习RESTful Web服务(最好说我必须这样做,因为它是CS硕士学位课程的一部分)。

我已经阅读了维基百科的一些信息,并且我还在Sun Developer Network上阅读了一篇关于REST的文章,我发现这不是一件容易的技术,有构建RESTful应用程序的特殊框架,而且通常与SOAP Web服务和程序员应该明白什么时候使用SOAP,什么时候REST可以是很好的方法。

我记得几年前SOAP非常受欢迎(时尚?),并且每一个好的简历都必须包含“SOAP”项目。 但在实践中,它很少用于实现非常简单的目的。

在我看来,REST是另一种'时尚的最后一句话'(或者我可能完全错误,因为我从未见过REST在实践中)。

你能否给我举一些REST应该使用的例子,以及为什么我们不能在没有REST的情况下做同样的事情(或者为什么我们应该花更多的时间在没有REST的情况下做同样的事情)呢?

UPD :不幸的是,我看不到任何具体的论点可以在第一评论中让我心生疑虑。 让我觉得REST是非常棒的技术!

我想看到像这样的答案:

我正在开发另一个复杂的HelloWorld应用程序,我们需要传输大量/微小的数据,并向我的同事提出了REST解决方案:

- 哦,该死的! Jonny,我们当然应该使用REST来实现这个应用程序!
- 是的,比利,我们可以使用REST,但我们最好使用SOAP。 相信我,因为我知道开发HelloWorld应用程序的一些东西。
但是SOAP是上个世纪的老式技术,我们可以使用更好的技术。
- 比利,你准备好花3天时间来试用REST吗? 我们可以在2小时内使用SOAP完成此操作。
- 是的,我相信我们会花更多时间来实现相同的安全/性能/ /可伸缩性/无论使用哪种SOAP。 我确信HelloWorld应用程序应该从现在开始只用REST开发。


如果最小化分布式应用程序中客户端和服务器组件之间的耦合对您非常重要,则应使用REST。

如果您的服务器将被许多您不能控制的不同客户端使用,则可能会出现这种情况。 如果您希望能够定期更新服务器而无需更新客户端软件,也可能会出现这种情况。

我可以向你保证,实现这种低水平的耦合并不容易 。 遵循REST的所有约束条件以获得成功至关重要。 保持纯粹的无状态连接是困难的。 选择正确的媒体类型并将数据压缩成格式非常棘手。 创建自己的媒体类型可能更难。

将丰富的服务器行为调整到统一的HTTP接口中可能会令人困惑,并且有时与相对简单的RPC方法相比显得有些迂腐。

尽管存在困难,但由于HTTP协议的一致性使用,您可以获得客户开发人员应该能够轻松理解的服务。 由于超媒体服务应该很容易被发现,并且客户端应该对服务器上的更改具有极强的适应能力

超媒体的好处和会话状态的避免使负载均衡变得简单并且服务分区变得可行 。 严格遵守HTTP规则使调试器和缓存代理等工具的可用性变得美妙。

更新

在我看来,REST是另一种'时尚的最后一句话'(或者我可能完全错误,因为我从未见过REST在实践中)。

我认为REST已经变得时髦,因为试图执行SOA类型项目的人发现使用SOAP堆栈他们没有意识到已经承诺的好处。 作为简单的集成方法的例子,人们不断回头看网络。 不幸的是,我认为人们低估了创建网络的规划和预见的数量,并且他们过分简化了需要做什么来允许网络上发生的偶然重用。

你说你在实践中从来没有见过REST,但如果你曾经使用过网络浏览器,那就不可能是真的。 Web浏览器是一个REST客户端。

  • 当某人在网站上更改某些html时,为什么不需要执行浏览器更新?
  • 为什么我可以将一组完整的页面添加到网站,并且“客户端”仍然可以在没有更新的情况下访问这些新页面?
  • 为什么我不需要向Web浏览器提供一个“服务描述语言”,告诉它什么时候进入http://example.org/images/cat,返回类型将是一个JPEG图像,当你去到http://example.org/description/cat的返回类型是text / html吗?
  • 为什么我可以使用Web浏览器访问浏览器发布时不存在的网站? 客户如何知道这些网站?
  • 这些听起来可能像是一些常见问题,但如果你知道答案,那么你就可以开始看到REST是什么了。 查看StackOverflow获取更多REST的好处。 当我查看问题时,我可以为该页面添加书签或将该网址发送给朋友 ,他可以看到相同的信息。 他不必通过网站浏览找到该问题。

    StackOverflow使用各种OpenId服务进行身份验证,gravatar.com提供头像图片,google-analytics和Quantserve获取分析信息。 这种多公司整合是SOAP世界唯一梦寐以求的类型 。 最好的例子之一是用于驱动StackOverflow用户界面的jQuery库从Google的内容交付网络中检索。 SO可以指导客户端(即您的Web浏览器)从第三方网站下载代码以提高性能,这一事实证明了Web客户端与服务器之间的低耦合性。

    这些是工作中的REST架构的示例。

    现在一些网站/应用程序确实打破了REST的规则,然后浏览器无法按预期工作。

  • 臭名昭着的后退按钮问题是由使用服务器端会话状态引起的。
  • 当你有服务器端会话状态时,负载平衡会变得很痛苦。
  • Flash应用程序通常会阻止URL专门识别表示。
  • 打破网页浏览器的另一个问题是对媒体类标准的不一致性。 我们听到关于IE6如何被杀的所有时间。 问题在于标准没有得到适当的遵守,或者出于任何原因而被忽略。
  • 登录会话的使用是许多安全漏洞的来源。
  • REST无处不在。 它是网络的一部分,使其工作得很好。 如果你想构建可以像网络一样扩展的分布式应用程序,可以像网络一样灵活地改变它们并促进重用,那么遵循它们在构建Web浏览器时所遵循的相同规则。


    就我所知,REST是由Roy Fielding的论文Architectural Styles和基于网络的软件架构设计开始的,如果你没有看过它,值得一读。

    在论文的顶部是一句话:

    几乎每个人都感到与大自然和平相处:听海浪,靠着岸边,静静的湖泊,在草地上,风沙的荒地上。 有一天,当我们再次学会了永恒的方式时,我们对城镇会有同样的感受,我们将感受到和平的感觉,就像今天我们在海边行走,或者在长长的草地上伸展一样草地。

    - 克里斯托弗亚历山大,建筑的永恒之路(1979)

    那真的在那里总结它。 REST在很多方面更加优雅。

    SOAP是一种基于HTTP的协议,因此它绕过了大量的HTTP约定来在SOAP中构建新的约定,并且在许多方面与HTTP有很多的冗余。 然而,HTTP对于通过HTTP进行retreiving,搜索,写入和删除信息已经足够了,这就是REST的一大特色。 由于REST是使用HTTP构建的,而不是构建在它之上,这也意味着想要与其集成的软件(例如Web浏览器)不需要理解SOAP来完成这项工作,而只需要HTTP,它必须是最广泛的理解和整合 - 目前正在使用的协议。


    从这里:

    REST的优点:

  • 轻量级 - 不是很多额外的XML标记
  • 人类可读结果
  • 易于构建 - 无需工具包
  • 另外检查一下:

    公平地说,REST并不是每个Web服务的最佳解决方案。 需要安全的数据不应作为URI中的参数发送。 大量数据(如详细采购订单中的数据)可能会很快变得繁琐或甚至超出URI范围。 在这些情况下,SOAP确实是一个可靠的解决方案。 但是首先尝试REST并且仅在必要时才使用SOAP很重要。 这有助于保持应用程序开发的简单和易用

    链接地址: http://www.djcxy.com/p/12337.html

    上一篇: Why do we need RESTful Web Services?

    下一篇: REST / SOAP endpoints for a WCF service