理解RESTful及其含义的简洁方法是什么?

时间:2010-08-22 19:48:25

标签: ruby-on-rails rest

**更新:horray!所以这是一次实践和理解的旅程。 ;)现在我不再感到愚蠢。*

我已经阅读了很多关于REST的文章,并编写了几个使用RESTful资源的rails应用程序。但是,我从来没有真正感觉到我完全理解它是什么,以及RESTful和非宁静之间有什么区别。我也很难向人们解释为什么/何时应该使用它。

如果有人发现了一个非常明确的REST解释和关于何时/为何/何处使用它的情况,(以及何时不使用),如果你能把它放好,它将有益于世界,谢谢! =)

5 个答案:

答案 0 :(得分:20)

REST通常是这样学习的:

  1. 您听说REST 使用HTTP的方式,并且从中避开了SOAP Web Services的包络,因为许多SOAP标准所需的大多数都是由HTTP处理的以简单,严肃的方式。您还可以快速了解到需要使用正确的方法进行正确的操作
  2. 稍后,也许多年后,您会听到 REST不仅仅是。 REST实际上也是资源之间链接的概念。这通常需要一段时间才能掌握完整的含义,但是当您了解这一点时,您开始在响应中引入超链接,以便客户端可以导航您的系统,而无需与服务器如何命名其资源(即URI)相关联。
  3. 即使以后,你还是知道你还没有理解REST!这是因为您发现媒体类型很重要。您开始制作名为application/vnd.example.foo+json的媒体类型并在其中加入超链接,因为这已经是您对REST的理解。
  4. 多年过去了,你无数次重读菲尔丁的论文,看看你有没有错过任何东西,它突然明白了真正 HATEOAS约束是什么:它是关于客户的没有任何关于服务器资源结构的概念,但它在运行时发现了这些关系。这也意味着用户面前的屏幕完全由通过线路传递的内容驱动,所以实际上,如果服务器传递了一个图像/ jpeg,那就是你应该显示的内容对用户而言,不是说“AtomProcessor无法处理image / jpeg”的错误消息。
  5. 我刚刚和#4达成协议,我希望梯子不会长久!我花了七年时间。

答案 1 :(得分:2)

This article可以很好地将几种http应用程序样式的差异从WS- *分类到RESTian纯度。我喜欢这篇文章的是它提醒你,我们称之为REST的大部分内容都只是部分符合Roy Fielding最初的定义。

InfoQ还有whole section解决了更多“什么是REST”角度。

就REST与SOAP而言,this question似乎有很多好的回应,尤其是选定的答案。

答案 2 :(得分:1)

我会想象YMMV,但我发现在我意识到REST基本上是静态WWW概念到Web应用程序设计空间的延续之后,我很容易开始理解REST的细节。我曾写过(相当长篇)帖子:Why REST?

答案 3 :(得分:1)

可伸缩性是REST(无状态,缓存)的明显优势。

但是 - 这可能是超文本的主要好处 - 当你有很多客户服务时,REST是理想的选择。遵循REST和超文本约束极大地减少了所有这些客户端和服务器之间的耦合,这意味着随着时间的推移,您可以更自由地发展/开发服务 - 您不会受到打破可能耦合客户端的风险的束缚。

实际上,如果你正在使用rails - 那么restfulie是一个很好的小框架,用于在客户端和服务器上处理超文本。服务器端是rails扩展,客户端是用于处理状态更改的DSL。有趣的东西,请在这里查看:http://restfulie.caelum.com.br/ - 我强烈推荐他们在vimeo上的教程/演示视频:)

答案 4 :(得分:0)

内容类型:text / x-flamebait

我最近一直在问同样的问题,我的假设就是这样 问题的一半解释为什么全面的REST是一件好事 为机器消耗的数据定义一个接口是很多 时间不是。好的,你需要一个很好的理由忽略它 常识位(URL定义资源,HTTP动词定义动作, 等等) - 我绝不是在暗示我们会回到可憎的地步 是SOAP。但是以一种都是菲尔丁认可的方式做HATEOAS (没有非标准的媒体类型)和机器友好似乎提供 收益递减:使用标准媒体类型非常好 描述有效转换(如果存在这样的媒体类型)但在哪里 应用程序仍然是您的消费者代理的复杂 需要知道哪些是正确的过渡来实现 期望的目标(购票,或其他),它不能这样做 除非你的消费者(一个人)告诉它。如果他需要的话 在他的程序中构建了带路径的带外知识 linkrels create_order => add_line => add_payment_info =>确认是 正确的一个,而reset_order不是正确的路径,那么我没有 看到让他教他的XML是一件多么严重的罪 解析器如何处理application / x-vnd.yourname.order。

我的意思是,显然如果有合适的话,那么全面的工作就更少了 标准格式与库和诸如可以重用的东西,但在 (可能更常见的)没有的情况,你的选择 根据Fielding-REST,(a)创建标准,或(b) 通过向其下载代码来增强客户端。如果你只是 期待完成工作而不是改变世界,选项(c) “只是做点什么”可能看起来很诱人而且我不会 责怪你接受它。