RESTful编程到底是什么?


当前回答

RESTful编程是关于:

资源由持久标识符标识:URI是当今普遍使用的标识符使用一组常见的动词来操纵资源:HTTP方法是常见的情况-古老的Create、Retrieve、Update、Delete变为POST、GET、PUT和Delete。但REST并不局限于HTTP,它只是目前最常用的传输。为资源检索的实际表示取决于请求,而不是标识符:使用Accept标头来控制是否需要XML、HTTP,甚至是表示资源的Java对象保持对象中的状态并在表示中表示状态在资源表示中表示资源之间的关系:对象之间的链接直接嵌入到表示中资源表示描述了如何使用表示,以及在什么情况下应该以一致的方式丢弃/重新处理表示:HTTP缓存控制头的使用

最后一个可能是REST的后果和整体有效性方面最重要的。总体而言,大多数RESTful讨论似乎都集中在HTTP及其在浏览器中的使用上。我知道R.Fielding在描述导致HTTP的架构和决策时创造了这个术语。他的论文更多的是关于资源的体系结构和缓存能力,而不是HTTP。

如果你真的对RESTful架构是什么以及它为什么工作感兴趣,请读几遍他的论文,并阅读整个内容,而不仅仅是第5章!接下来看看DNS为什么工作。阅读DNS的分级组织以及转介的工作原理。然后阅读并考虑DNS缓存的工作原理。最后,阅读HTTP规范(尤其是RFC2616和RFC3040),并考虑高速缓存的工作方式及其原因。最终,它只会咔嚓一声。当我看到DNS和HTTP之间的相似性时,我得到了最后的启示。在这之后,了解SOA和消息传递接口是可伸缩的就开始了。

我认为,要理解RESTful和SharedNothing架构的架构重要性和性能含义,最重要的技巧是避免被技术和实现细节所困扰。关注谁拥有资源,谁负责创建/维护资源等。然后思考表示、协议和技术。

其他回答

我看到了一堆回答,说将用户123的所有内容放在资源“/user/123”是RESTful的。

罗伊·菲尔丁(Roy Fielding)创造了这个术语,他表示RESTAPI必须是超文本驱动的。特别是,“REST API不能定义固定的资源名称或层次结构”。

因此,如果您的“/user/123”路径在客户端上被硬编码,那么它就不是真正的RESTful。很好地使用HTTP,也许,也许不是。但不是RESTful。它必须来自超文本。

REST使用各种HTTP方法(主要是GET/PUT/DELETE)来处理数据。

您不需要使用特定的URL来删除方法(例如/user/123/delete),而是向/user/[id]URL发送delete请求,以编辑用户,检索有关向/user/[id]发送GET请求的用户的信息

例如,取而代之的是一组URL,可能看起来像下面的一些。。

GET /delete_user.x?id=123
GET /user/delete
GET /new_user.x
GET /user/new
GET /user?id=1
GET /user/id/1

您使用HTTP“动词”并具有。。

GET /user/2
DELETE /user/2
PUT /user

REST代表代表性状态转移。

它依赖于一个无状态的、客户端-服务器的、可缓存的通信协议——实际上在所有情况下都使用HTTP协议。

REST通常用于移动应用程序、社交网络网站、mashup工具和自动化业务流程。REST风格强调通过有限数量的操作(动词)来增强客户端和服务之间的交互。通过将资源(名词)分配给它们自己独特的通用资源指示符(URI)来提供灵活性。

休息介绍

RESTful编程是关于:

资源由持久标识符标识:URI是当今普遍使用的标识符使用一组常见的动词来操纵资源:HTTP方法是常见的情况-古老的Create、Retrieve、Update、Delete变为POST、GET、PUT和Delete。但REST并不局限于HTTP,它只是目前最常用的传输。为资源检索的实际表示取决于请求,而不是标识符:使用Accept标头来控制是否需要XML、HTTP,甚至是表示资源的Java对象保持对象中的状态并在表示中表示状态在资源表示中表示资源之间的关系:对象之间的链接直接嵌入到表示中资源表示描述了如何使用表示,以及在什么情况下应该以一致的方式丢弃/重新处理表示:HTTP缓存控制头的使用

最后一个可能是REST的后果和整体有效性方面最重要的。总体而言,大多数RESTful讨论似乎都集中在HTTP及其在浏览器中的使用上。我知道R.Fielding在描述导致HTTP的架构和决策时创造了这个术语。他的论文更多的是关于资源的体系结构和缓存能力,而不是HTTP。

如果你真的对RESTful架构是什么以及它为什么工作感兴趣,请读几遍他的论文,并阅读整个内容,而不仅仅是第5章!接下来看看DNS为什么工作。阅读DNS的分级组织以及转介的工作原理。然后阅读并考虑DNS缓存的工作原理。最后,阅读HTTP规范(尤其是RFC2616和RFC3040),并考虑高速缓存的工作方式及其原因。最终,它只会咔嚓一声。当我看到DNS和HTTP之间的相似性时,我得到了最后的启示。在这之后,了解SOA和消息传递接口是可伸缩的就开始了。

我认为,要理解RESTful和SharedNothing架构的架构重要性和性能含义,最重要的技巧是避免被技术和实现细节所困扰。关注谁拥有资源,谁负责创建/维护资源等。然后思考表示、协议和技术。

剩下的一点是,如果我们同意对基本操作使用通用语言(http动词),那么可以配置基础结构来理解它们并适当地优化它们,例如,通过使用缓存头在所有级别实现缓存。

通过正确实现的restful GET操作,信息来自服务器的DB、服务器的memcache、CDN、代理的缓存、浏览器的缓存或浏览器的本地存储都无关紧要。可以使用最快、最容易获得的最新来源。

说Rest只是语法上的改变,从使用带有动作参数的GET请求到使用可用的http动词,这看起来没有任何好处,而且纯粹是修饰。重点是使用一种可以被链的每个部分理解和优化的语言。如果GET操作有副作用,则必须跳过所有HTTP缓存,否则结果将不一致。