**更新:horray!所以这是一次实践和理解的旅程。 ;)现在我不再感到愚蠢。*
我已经阅读了很多关于REST的文章,并编写了几个使用RESTful资源的rails应用程序。但是,我从来没有真正感觉到我完全理解它是什么,以及RESTful和非宁静之间有什么区别。我也很难向人们解释为什么/何时应该使用它。
如果有人发现了一个非常明确的REST解释和关于何时/为何/何处使用它的情况,(以及何时不使用),如果你能把它放好,它将有益于世界,谢谢! =)
答案 0 :(得分:20)
REST通常是这样学习的:
application/vnd.example.foo+json
的媒体类型并在其中加入超链接,因为这已经是您对REST的理解。我刚刚和#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) “只是做点什么”可能看起来很诱人而且我不会 责怪你接受它。