为什么我们需要REST Web服务?(Why do we need RESTful Web Serv

2019-06-21 11:53发布

我要学习RESTful Web服务(这是更好地说,我必须这样做,因为这是CS硕士学位计划的一部分)。

我读过维基百科中的一些信息,我也读过关于REST在Sun开发者网络的文章,我发现这是不容易的技术,也有构建RESTful应用程序的特殊架构,而且它经常被比较SOAP的Web服务和程序员应该了解什么时候使用SOAP和REST时可能是很好的办法。

我记得几年前SOAP是非常普遍的(时尚?)和项目“SOAP”必须出现在每一个良好的简历。 但在实践中这是非常罕见和实现非常简单的目的。

这在我看来,REST是另一种“时尚的最后一个字”(或我可能是完全错误的,因为我还没有过在实践中看到REST)。

你能给我一些例子是REST应该使用,为什么我们不能没有REST做同样的(或为什么我们应该花更多的时间做同样不休息)?

UPD:可惜的是,我不能看到任何具体的参数,可以吹我的脑海中第一个评论。 让我认为REST是真棒技术!

我希望看到这样的答案:

我正在开发另一项复杂的HelloWorld应用程序,我们需要转移大量的/微小数据的和我提出REST解决我的同事:

- 哦,该死的! 强尼,我们当然应该使用REST实现这个程序!
- 是的,比利,我们可以使用REST,但我们会更好地使用SOAP。 相信我,因为我知道一些关于开发的HelloWorld应用程序。
- 但是,SOAP是从上世纪老式的技术,我们可以用更好的。
- 比利,你准备好了3天与REST实验? 我们可以在2小时内与SOAP这样做..
- 是的,我敢肯定,我们会花更多的时间来达到同样的安全/性能/ /可扩展性/任何其他与SOAP。 我敢肯定,HelloWorld的应用应该只与REST从现在的发展。

Answer 1:

如果是非常重要的,你要尽量减少在分布式应用程序的客户端和服务器组件之间的耦合 REST应该被使用。

如果你的服务器是要由你没有控制许多不同的客户端使用这可能是这种情况。 如果你希望能够经常更新服务器 ,而无需更新客户端软件,它也可能是这种情况。

我可以向你保证,实现耦合的这种低水平是不容易做到的 。 关键是要遵循所有REST的约束才能成功。 保持一个纯粹的无状态的连接是困难的。 选择正确的介质类型和数据挤入格式是棘手的。 创建自己的介质类型会更加努力。

适应丰富的服务器行为纳入统一的HTTP接口可能会造成混淆,有时相比于相对简单的RPC方法似乎迂腐。

尽管困难重重,带来的好处是,你有一个客户端开发人员应该能够很容易理解,由于一贯使用HTTP协议的服务。 该服务应该很容易发现,由于超媒体和客户应该是非常有弹性的服务器上进行更改

超媒体和好处会话状态的避免使负载均衡简单的服务分区是可行的 。 严格符合HTTP规则做出像调试器和缓存代理天底下工具的可用性。

更新

这在我看来,REST是另一种“时尚的最后一个字”(或我可能是完全错误的,因为我还没有过在实践中看到REST)。

我认为REST已成为时尚,因为人们试图做SOA型项目已经发现,使用SOAP堆栈他们没有意识到被许诺的好处。 人们总是义无反顾地网络作为简单集成方法的一个例子。 不幸的是,我认为人们低估了规划和远见的是走进创建Web量,他们过分简单化需要做的,以允许它在网络上出现的那种偶然重用的是什么。

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

  • 为什么你不需要做一个浏览器更新时,有人更改Web站点上的一些HTML?
  • 为什么我可以添加一个完整的新组页面的网站和“客户”仍然可以访问这些新的页面没有更新?
  • 为什么我没有需要提供“服务描述语言”到Web浏览器来告诉它,当它进入http://example.org/images/cat返回类型将是一个JPEG图像,当你去到http://example.org/description/cat返回类型将是text / html的?
  • 为什么可以使用Web浏览器访问浏览器发布时不存在的网站? 客户如何知道这些网站?

这些听起来像是空洞的问题,但如果你知道答案,那么你就可以开始看到是所有关于REST。 看看StackOverflow上的REST的更多的好处。 当我在看一个问题,我可以为该网页创建书签或将URL发送给朋友 ,他能看到相同的信息。 他没有通过该网站浏览,发现问题。

StackOverflow的使用各种服务的OpenID身份验证,gravatar.com虚拟形象的图片,谷歌分析和Quantserve的分析信息。 这种多公司整合的是事情的类型SOAP世界唯一的梦想 。 一个最好的例子是被用来驱动StackOverflow的UI了jQuery库是从谷歌的内容分发网络检索到的事实。 该SO可以直接在客户端的事实(即Web浏览器),以从第三方网站下载的代码以提高性能证明了Web客户端和服务器之间的低耦合。

这些都是在工作中REST架构的例子。

现在一些网站/应用程序都打破REST的规则 ,然后按预期的浏览器不能正常工作。

  • 臭名昭著的后退按钮问题通过使用服务器端的会话状态造成的。
  • 负载均衡可以成为一种痛苦时,你有服务器端的会话状态。
  • Flash应用程序常常防止特异性鉴定的表示的URL。
  • 打破Web浏览器的另一个问题是一致性差的媒体类型的标准。 我们听到的所有关于IE6需要如何被杀害的时间。 这个问题存在着标准是不恰当的操作,或者被忽略无论出于何种原因。
  • 使用登录会话的许多安全漏洞的来源。

REST是无处不在。 这是使得它的工作以及网络的一部分。 如果你想建立分布式应用程序,可以扩展网络一样,是有弹性的改变,如网络和促进再利用作为网络已经完成,然后按照构建Web浏览器时,他们也做了同样的规则。



Answer 2:

剩下的就是拉开序幕,据我所知,由Roy Fielding的论文的建筑风格和基于网络的软件架构的设计 ,如果你还没有看它,这是值得一读。

在本文的顶部是一个报价:

几乎每个人都觉得在和平与自然:听着岸边的海浪,由尚湖,草的领域,就被风吹的健康。 有一天,当我们再次了解到永恒的方式,我们将感到我们的城镇一样,我们将感到尽可能多的在他们平安,就像我们今天所做的海洋散步,或在一个长草伸出草地。

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

这确实有总结一下。 REST在许多方面更优雅。

SOAP是在HTTP之上的协议,所以它绕过了很多的HTTP规范的建立在SOAP新的公约,并在许多方面多余的HTTP。 HTTP,但是,是程序来检索,搜索,写作,并通过HTTP删除信息绰绰有余,这是一个很大的东西REST是。 由于REST与HTTP,而不是在它的上面建,这也意味着希望与它集成(如Web浏览器)并不需要了解SOAP这样做,只是HTTP,它必须是最软件广泛理解和综合 - 用在使用协议在这一点上。



Answer 3:

从这里 :

REST的优势:

  • 轻量级 - 不是很多额外的XML标记
  • 人类可读的结果
  • 易建 - 无需工具包

还要检查这个出来:

为了公平起见,REST并不是每个Web服务的最佳解决方案。 这需要保密的数据不应该被作为中的URI参数。 而大量的数据,比如,在详细的采购订单,可以很快成为累赘,甚至出一个URI内界外。 在这些情况下,SOAP的确是一个坚实的解决方案。 但它首先尝试REST和诉诸SOAP只在必要时是很重要的。 这有助于保持应用程序的开发简单访问。



Answer 4:

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

只是为了拉你,

想想什么是“传统的web服务”是。 它与裸露的接口“的方法。” 客户知道了这些方法的名称,输入和输出,因此可以给他们打电话。

现在想象一下,不公开“办法”的接口。 相反,它暴露了“对象”。 因此,当客户看到这个界面,所有它认为是一个或多个“对象”。 “一个目标”没有输入和输出 - 因为“它没有做任何事情。” 这是一个名词,而不是动词。 这是“东西”,而不是“动作”。

例如,认为传统的Web服务,如果你为它提供一个城市,提供当前的天气条件。 它可能有像GetWeatherInfo(一个Web方法),这需要城市作为输入,并提供天气数据作为输出。 这很容易让你至今了解客户如何将消耗该Web服务。

现在想象一下,在上面的Web服务的地方,有一个新的,公开的城市为对象。 所以,当你看到它作为一个客户端,而不是GetWeatherInfo(),你看纽约,达拉斯,洛杉矶,伦敦等。 而这些城市没有从他们身上挂任何应用程序的具体方法 - 他们显然像惰性气体 - 他们自己还没有反应过来。

你一定在想 - 嗯,那怎么帮你,作为一个客户,去达拉斯的天气怎么样? 我们将获得在几分钟的时间。

如果你从一个Web服务得到的是一个“对象集”,很明显,你需要一种方法来“对他们采取行动”。 这些对象本身没有方法你打电话,所以你需要一组可以应用到这些对象的动作。 换句话说,你需要“应用动词名词”。 如果你看到一个物体,比如说,一个苹果,这是“名词”,你可以申请“动词”喜欢吃的,给它。 但并不是所有的动词可以适用于所有的名词。 就像,你会开车,但不能开车电视。

因此,如果网络服务仅公开对象,并要求您 - 好了,现在让我们设计了几个标准动作或动词,“所有的客户端可以适用于他们所看到的所有对象”,...



Answer 5:

以下是一些建议:

  • REST约束你的服务使用统一的接口。 你不必浪费时间做白日梦(或争论)有关所有可能的方式为您服务可以工作 - 你获得工作权识别系统中的资源。 真可谓是一项艰巨的任务本身,好在问题往往是备受更好地界定。
  • 随着资源,他们的协会,并在他们的手表示,有真的很少,因为很多决定已经做出了,你实现你的服务做的。
  • 您的系统看起来非常像其他的RESTful系统; 学习的队友,合作伙伴和客户的曲线将减少。
  • 您将有一个共同的词汇来讨论设计问题与其他开发者,甚至与那些缺乏技术头脑的(如客户)。
  • 正如达雷尔称,由于您使用的是超文本驱动的设计,为您服务变窄耦合一件事情的范围-媒体类型。 这有助于你作为一个开发人员,因为更改系统包含接触的窄的范围内。 这有助于你的客户在你的变化将打破他们的代码更少。
  • 几乎所有你可能在执行REST每一个问题可以通过解决暴露出新的资源或重新思考你的资源模型。 这重点是,国际海事组织,一个大的提高生产力。

底线,REST消除许多最耗时和您的团队的工作流程有争议的设计和实现决策。 它变为从实施服务, 设计它你的注意。 和它这样做而不打桩官样文章到HTTP协议。



Answer 6:

大部分关于REST“亲”的答案似乎来自使用这为任务提供合适的工具环境从来没有谁开发SOAP Web服务或客户端的人。 他们抱怨说,我根本就不曾遇到的问题,使用Visual Studio .NET和IBM的Rational Web Developer中。 我想,如果你有开发Web服务或客户端脚本语言,或其他语言很少或根本没有工具的支持,这些都是有效的投诉。

我也不得不承认,一些“亲”点听起来像的东西,实际上可能是真的 - 但是我从来没有见过,说明其价值的例子。 特别是,我会非常感激,如果有人会发布含有链接到一个REST Web服务的一个很好的例子评论。 这应该是一个使用资源的多层次,可能在层次结构,并正确使用的媒体类型。 也许,如果我看到一个很好的例子,我会明白,在这种情况下,我会回到这里,承认这一点。



Answer 7:

要在已经给予我们使用REST服务,我在哪里的原因的答案添加一个稍微平淡的旋转是,如果你知道你可以用手一个贸易伙伴的URL,并知道他们会接受,作为回报,XML的一个很好的布局板无论他们在.net XX,PHP,Python和Java中,红宝石还是正在努力神不知,它严重降低头痛。

这也意味着,在非易怒结束我们的销售人员可以吹嘘我们的多功能API,以人无看似完整布偶担忧。

从技术的好处很多东西相距很容易让非易怒的讲解,示范和有信心是好事。 SOAP,虽然只是作为酷的技术人员是远远低于平易近人由非技术人员,因此不容易“卖出”。

我倾向于注意到,事非技术人员能够得到他们的头一轮倾向于坚持。 所以我怀疑REST作为一种技术是容易像SOAP时尚率性的敏感。

但是,如果所有关于应该锁定一个REST服务不放置任何东西,东西是双真只是因为这项技术的人谁不那么技术头脑如此容易理解。



Answer 8:

REST是用于设计网络应用程序的架构风格。 这个想法是,而不是用复杂的机制,如CORBA,RPC或SOAP到机器之间的连接,简单的HTTP是用来制造机器之间的通话。

在许多方面,基于HTTP万维网本身,可以被看作是一个基于REST的架构。 RESTful应用程序使用的HTTP请求发布的数据(创建和/或更新),读取数据(例如,进行查询),并删除数据。 因此,REST使用HTTP所有四个CRUD(创建/读取/更新/删除)操作。

REST是一种轻量级替代像RPC机制(远程过程调用)和Web服务(SOAP,WSDL等)。 稍后,我们将看到REST多少的简单。

尽管是简单的,REST是全功能; 有基本上没有什么,你可以在Web服务中不能使用RESTful架构来完成做。 REST是不是一个“标准”。 永远不会有一个休息的W3C recommendataion,例如。 虽然有REST编程框架,与REST工作是如此简单,你可以经常在如Perl,Java或C#语言标准库功能“滚你自己”。



文章来源: Why do we need RESTful Web Services?