RESTful编程到底是什么?


当前回答

什么是REST?REST代表代表性状态转移。(有时拼写为“ReST”。)它依赖于无状态的、可缓存的客户端服务器通信协议——实际上在所有情况下,都是HTTP使用协议。REST是一种用于设计网络应用程序的架构风格。其思想是,使用RPC或SOAP连接机器,使用简单的HTTP机器之间的呼叫。在许多方面,可以查看基于HTTP的万维网本身作为基于REST的架构。RESTful应用程序使用HTTP请求发布数据(创建和/或更新)、读取数据(例如,并删除数据。因此,REST对所有四个CRUD使用HTTP(创建/读取/更新/删除)操作。REST是RPC(远程过程调用)和Web服务(SOAP、WSDL等)看看REST有多简单。尽管REST很简单,但它功能齐全;基本上有在Web服务中,没有什么是RESTful无法完成的建筑学REST不是“标准”。永远不会有W3C例如REST推荐。尽管有REST编程框架,使用REST非常简单通常使用诸如Perl、Java或C#。

当我试图找到休息的简单真正含义时,我找到了最好的参考之一。

http://rest.elkstein.org/

其他回答

这是一个令人惊讶的漫长的“讨论”,但至少可以说相当令人困惑。

IMO:

1) 没有一个大的酒吧和大量的啤酒,就没有一个安静的程序:)

2) 代表性状态转移(REST)是罗伊·菲尔丁(Roy Fielding)论文中提出的一种体系结构风格。它有许多限制。如果您的服务/客户尊重这些,那么它就是RESTful。就这样。

您可以(显著地)总结以下约束:

无状态通信遵守HTTP规范(如果使用HTTP)清晰传达传输的内容格式使用超媒体作为应用程序状态引擎

还有一个很好的帖子很好地解释了事情。

许多答案复制/粘贴了有效的信息,混淆了这些信息,增加了一些混乱。人们在这里谈论级别、RESTFulURI(没有这样的东西!)、应用HTTP方法GET、POST、PUT。。。REST不是关于这个或者不仅仅是关于这个。

例如,链接-有一个漂亮的API是很好的,但最终客户端/服务器并不真正关心你获得/发送的链接,重要的是内容。

最终,只要内容格式已知,任何RESTful客户端都应该能够使用任何RESTful服务。

我会说,RESTful编程是关于创建遵循REST体系结构风格的系统(API)。

我发现M.Elkstein博士的这篇关于REST的精彩、简短且易于理解的教程,并引用了最能回答您问题的重要部分:

学习REST:教程

REST是一种用于设计网络应用程序的架构风格。其思想是,使用RPC或SOAP连接机器,使用简单的HTTP机器之间的呼叫。在许多方面,基于HTTP的万维网本身可以被视为基于REST的架构。RESTful应用程序使用HTTP请求来发布数据(创建和/或更新)、读取数据(例如进行查询)和删除数据。因此,REST对所有四个CRUD(创建/读取/更新/删除)操作使用HTTP。

我认为你不应该因为没有听到堆栈溢出之外的REST而感到愚蠢。。。,我也会遇到同样的情况!;另一个SO问题“为什么REST现在变得越来越大”的答案可能会缓解一些情绪。

一本关于REST的好书是《实践中的REST》。

必须读取代表性状态传输(REST),并且REST API必须是超文本驱动的

有关RESTful服务的解释,请参见Martin Fowlers的文章《Richardson成熟度模型》(RMM)。

要实现RESTful,服务需要实现作为应用程序状态引擎的超媒体。(HATEOAS),也就是说,它需要达到RMM中的3级,阅读文章以了解详细信息或qcon演讲中的幻灯片。

HATEOAS约束是首字母缩略词超级媒体的引擎应用程序状态。这一原则是REST之间的关键区别以及大多数其他形式的客户端服务器系统...RESTful应用程序的客户端需要只知道要访问的单个固定URL所有未来的行动都应该可从中动态发现超媒体链接包含在资源的表示从该URL返回。标准化媒体类型也是预期任何人都能理解可能使用RESTful API的客户端。(来自免费百科全书维基百科)

Web框架的REST Litmus测试是Web框架的类似成熟度测试。

接近纯REST:学会爱HATEOAS是一个很好的链接集合。

针对公共云的REST与SOAP讨论了REST使用的当前级别。

REST和版本控制讨论了可扩展性、版本控制、可演化性等。通过可修改性

这是一种编程,您的系统架构符合Roy Fielding在论文中提出的REST风格。由于这是描述网络的架构风格(或多或少),所以很多人都对它感兴趣。

另外一个答案是:没有。除非你是作为学术研究软件架构或设计web服务,否则真的没有理由听过这个词。

这是我对REST的基本概述。我试图演示RESTful架构中每个组件背后的思想,以便更直观地理解概念。希望这有助于为某些人揭开REST的神秘面纱!

REST(代表性状态转移)是一种设计架构,它概述了网络资源(即共享信息的节点)的设计和寻址方式。一般来说,RESTful体系结构使得客户端(请求机器)和服务器(响应机器)可以请求读取、写入和更新数据,而客户端不必知道服务器是如何操作的,并且服务器可以在不需要了解客户端的任何信息的情况下将数据传递回去。好吧,酷。。。但我们如何在实践中做到这一点?

最明显的要求是需要有某种通用语言,以便服务器可以告诉客户端它正在尝试如何处理请求,并让服务器做出响应。但是,要找到任何给定的资源,然后告诉客户该资源所在的位置,需要有一种指向资源的通用方法。这就是通用资源标识符(URI)的作用;它们基本上是查找资源的唯一地址。

但REST架构并没有就此结束!虽然以上内容满足了我们所需的基本需求,但我们也希望拥有一个支持高流量的体系结构,因为任何给定的服务器通常都会处理来自多个客户端的响应。因此,我们不想让服务器记住以前请求的信息,从而使服务器不堪重负。

因此,我们施加了一个限制,即客户端和服务器之间的每个请求-响应对都是独立的,这意味着服务器不必记住以前的请求(客户端-服务器交互的以前状态)来响应新请求。这意味着我们希望我们的交互是无状态的。为了进一步减轻我们的服务器因重做最近已为给定客户端完成的计算而承受的压力,REST还允许缓存。基本上,缓存意味着对提供给客户端的初始响应进行快照。如果客户端再次发出相同的请求,服务器可以向客户端提供快照,而不是重做创建初始响应所需的所有计算。但是,由于它是一个快照,如果快照尚未过期(服务器提前设置了过期时间),并且响应自初始缓存以来已更新(即请求将给出与缓存响应不同的答案),则客户端将不会看到更新,直到缓存过期(或缓存被清除),并且再次从头开始呈现响应。关于RESTful架构,最后一件事是它们是分层的。实际上,我们已经在讨论客户端和服务器之间的交互时隐式地讨论了这个需求。基本上,这意味着我们系统中的每个层只与相邻层交互。因此,在我们的讨论中,客户端层与服务器层交互(反之亦然),但可能有其他服务器层帮助主服务器处理客户端不直接通信的请求。相反,服务器根据需要传递请求。

现在,如果所有这些听起来都很熟悉,那就太好了。超文本传输协议(HTTP)定义了通过万维网的通信协议,它是RESTful架构抽象概念的一种实现(如果你像我一样是OOP狂热者,则是抽象REST类的实现)。在REST的这个实现中,客户端和服务器通过GET、POST、PUT、DELETE等进行交互,这些都是通用语言的一部分,可以使用URL指向资源。