当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么我们需要RESTfulWeb服务?》经验,为你挑选了4个好方法。

我将学习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来实现这个应用程序!
- 是的,Billy,我们可以使用REST,但我们最好使用SOAP.相信我,因为我对开发HelloWorld应用程序有所了解.
- 但SOAP是上个世纪的老式技术,我们可以使用更好的技术.
- 比利,你准备花3天时间试验REST吗?我们可以在2小时内使用SOAP做到这一点.
- 是的,我确信我们将花费更多的时间来实现相同的安全性/性能/ /可扩展性/其他任何与SOAP相关的东西.我确信HelloWorld应用程序应该只使用REST开发.

Darrel Mille.. 133

如果对于最小化分布式应用程序中客户端和服务器组件之间的耦合非常重要,则应使用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 UI的jQuery库是从Google的Content Delivery Network中检索到的.SO可以指示客户端(即您的Web浏览器)从第三方站点下载代码以提高性能这一事实证明了Web客户端和服务器之间的低耦合.

这些是REST架构的工作示例.

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

臭名昭着的后退按钮问题 是由使用服务器端会话状态引起的.

当您具有服务器端会话状态时,负载平衡可能会变得很痛苦.

Flash应用程序通常会阻止URL专门识别表示.

打破网络浏览器的另一个问题是对媒体类型标准的不一致.我们一直听到有关如何杀死IE6的消息.问题在于标准没有得到适当的遵循,或者由于某种原因而被忽略.

登录会话的使用是许多安全漏洞的来源.

REST无处不在.网络的一部分使它运作良好.如果您希望构建可以像Web一样扩展的分布式应用程序,可以像Web一样灵活地进行更改,并且可以像Web一样促进重用,那么请遵循他们在构建Web浏览器时所执行的相同规则.



1> Darrel Mille..:

如果对于最小化分布式应用程序中客户端和服务器组件之间的耦合非常重要,则应使用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 UI的jQuery库是从Google的Content Delivery Network中检索到的.SO可以指示客户端(即您的Web浏览器)从第三方站点下载代码以提高性能这一事实证明了Web客户端和服务器之间的低耦合.

这些是REST架构的工作示例.

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

臭名昭着的后退按钮问题 是由使用服务器端会话状态引起的.

当您具有服务器端会话状态时,负载平衡可能会变得很痛苦.

Flash应用程序通常会阻止URL专门识别表示.

打破网络浏览器的另一个问题是对媒体类型标准的不一致.我们一直听到有关如何杀死IE6的消息.问题在于标准没有得到适当的遵循,或者由于某种原因而被忽略.

登录会话的使用是许多安全漏洞的来源.

REST无处不在.网络的一部分使它运作良好.如果您希望构建可以像Web一样扩展的分布式应用程序,可以像Web一样灵活地进行更改,并且可以像Web一样促进重用,那么请遵循他们在构建Web浏览器时所执行的相同规则.


@John通常,SOAP的使用方式会导致客户端需要"编译"每个服务器端端点,每个参数数据类型和每种返回类型的知识.SOAP世界中没有指导尝试使用标准化类型在客户端和服务器之间传递数据.这意味着客户端开发人员使用的每个新服务都有自己独特的类型,端点和交互协议.这是耦合.

2> quillbreaker..:

据我所知,REST由Roy Fielding的论文" 建筑风格"和"基于网络的软件架构设计"开始,如果你还没有看过它,值得一读.

在论文的顶部是一个引用:

几乎每个人都感受到与大自然的和平:聆听海浪冲击岸边,静止的湖泊,草地,风吹的荒地.有一天,当我们再次学会永恒的方式时,我们会对我们的城镇感受到同样的感受,我们将感受到它们的和平,就像我们今天在海边散步,或在长长的草丛中伸展一样.草地.

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

这确实在那里总结了它.REST在很多方面都更优雅.

SOAP是一种基于HTTP的协议,因此它绕过了很多HTTP约定来在SOAP中构建新的约定,并且在许多方面都是多余的HTTP.然而,HTTP对于通过HTTP进行检索,搜索,写入和删除信息来说已经绰绰有余了,这就是REST的主要内容.因为REST是使用HTTP而不是基于它构建的,所以它也意味着想要与它集成的软件(例如Web浏览器)不需要理解SOAP,只需要HTTP,这必须是最多的目前广泛理解和集成使用的协议.



3> 小智..:

从这里:

REST优势:

轻量级 - 没有太多额外的xml标记

人类可读的结果

易于构建 - 无需工具包

还要看看这个:

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


利弊评论不太正确.通过将参数从URI移动到正文中,这仍然是不安全的.使用SSL进行安全性.此外,当uri中的数据可能很长时,您可以使用post并将其放入体内.大多数服务器端语言组合了URI参数和POST参数中的数据,因此不需要对服务器进行任何更改.
@Marc_s如果REST正确完成,则不需要像WSDL那样的"描述语言".所使用的媒体类型确实需要记录,但不应存在将端点与媒体类型耦合的文档.

4> Rajarajan Pu..:

我可以肯定地说我花了很多时间来理解这个作为初学者,但这是从头开始使用REST的最佳链接! http://www.codeproject.com/Articles/21174/Everything-About-REST-Web-Services-What-and-How-Pa

只是为了吸引你,

想想"传统的网络服务"是什么.它是一个暴露"方法"的界面.客户知道方法的名称,输入和输出,因此可以调用它们.

现在想象一个不暴露"方法"的接口.相反,它暴露了"对象".因此,当客户端看到此接口时,它看到的只是一个或多个"对象"."一个对象"没有输入和输出 - 因为"它没有做任何事情".它是名词,不是动词.这是"一件事",而不是"一个行动".

例如,如果您提供城市,请考虑提供当前天气状况的传统Web服务.它可能有一个像GetWeatherInfo()这样的Web方法,它将城市作为输入并提供天气数据作为输出.到目前为止,您很容易理解客户端将如何使用此Web服务.

现在想象一下,在上述Web服务的位置,有一个新的城市作为对象公开.因此,当您将其视为客户端而不是GetWeatherInfo()时,您会看到纽约,达拉斯,洛杉矶,伦敦等.而且这些城市没有任何特定应用方法 - 它们显然像惰性气体 - 它们本身没有反应.

你一定在想 - 嗯,作为一个客户,这对你来到达拉斯的天气有什么帮助?我们稍后会谈到这一点.

如果你从Web服务获得的只是一组"对象",显然你需要一种"对它们采取行动"的方法.对象本身没有可供您调用的方法,因此您需要一组可应用于这些对象的操作.换句话说,你需要"将动词应用于名词".如果你看到一个对象,比如苹果,这是一个"名词",你就可以用"动词"来表达它.但并非所有动词都适用于所有名词.比如,你可以开车,但不能开电视.

因此,如果Web服务仅公开对象,并且您被问到 - 那么,现在让我们设计一些标准操作或动词,"所有客户端都可以应用于他们看到的所有对象",...

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有