【问题标题】:What exactly does REST mean? What is it, and why is it getting big now?REST 到底是什么意思?它是什么,为什么它现在变大了?
【发布时间】:2010-09-19 14:14:47
【问题描述】:

理解(我认为)RESTful-ness 背后的基本思想。在语义上使用 HTTP 方法 - GET 获取、PUT 放置、DELETE 删除等......对吗? 以为我理解了 REST 背后的想法,但我认为我将其与 HTTP 实现的细节混淆了。休息背后的驱动理念是什么,为什么这变得很重要?人们是否真的在我的手电筒从未照到的互联网角落里使用了很长时间?


Google 演讲提到 Atom 发布协议与 RESTful 实现有很多协同作用。对此有什么想法吗?

【问题讨论】:

  • @Graeme REST 不限于 HTTP,是吗?
  • 我觉得说HTTP是REST实现更准确。
  • 没有。 REST 不限于 HTTP。 HTTP 也不是 REST 实现。按预期使用 HTTP 本身并不是 RESTful。 REST 独立于任何单一的通信协议。请参考权威来源,如菲尔丁的实际论文,不要传播错误信息,或选择不同的流行语(@bryanbcook,肯尼)
  • 扩展@aehlke 评论,HTTP 只是用于连接系统组件的隧道的一个示例。 REST 架构风格分为数据元素(资源和表示)、组件(管理和准备要通信的数据的服务器和客户端)和连接器(数据的实际通信器,HTTP 是一个选项)。

标签: http rest


【解决方案1】:

这就是 REST 的样子:

POST /user
fname=John&lname=Doe&age=25

服务器响应:

201 Created
Location: /user/123

以后,您可以检索用户信息:

GET /user/123

服务器响应(假设是 XML 响应):

200 OK
<user><fname>John</fname><lname>Doe</lname><age>25</age></user>

更新:

PUT /user/123
fname=Johnny

【讨论】:

  • 你有 RESTful JavaScript 的例子吗?
  • 这应该是公认的答案。没有bla bla bla。很有帮助。
  • "没有 bla bla bla。非常有帮助。"哈哈哈是真的。
  • 另一个问题是(嗯,是;我修复了它)可以在许多表示中检索用户; XML 只是其中一种可能。
  • 我知道对于你们大多数人来说,这将是一个令人满意的答案,但这个答案实际上是对 REST 含义的一个非常狭隘的看法,请记住这一点(REST 是一种架构风格)。这就像在问“什么是文艺复兴时期的建筑?”有人回答“这是西斯廷教堂”……
【解决方案2】:

这是我的看法...

制作 RESTful 服务的吸引力在于,我们不是使用数十种功能方法创建 Web 服务,而是标准化四种方法(创建、检索、更新、销毁):

  • 发布
  • 获取
  • 删除

REST 变得越来越流行,因为它还代表了应用层消息格式的标准化。虽然 HTTP 使用 REST 的四个基本动词,但 HTML 的常见 HTTP 消息格式并不是构建应用程序的合同。

我听到的最好的解释是 TCP/IP 与 RSS 的比较。

以太网代表物理网络的标准化。 Internet 协议 (IP) 代表了更高层次的标准化,并且有几种不同的风格(TCP、UDP 等)。 “传输控制协议”(保证数据包交付)的引入定义了通信合同,为我们打开了应用层的全新服务集(FTP、Gopher、Telnet、HTTP)。

以此类推,我们采用 XML 作为“协议”,我们现在开始标准化消息格式。 RSS 正在迅速成为许多 RESTful 服务的基础。 Google 的 GData API 是 RSS/ATOM 变体。

“桌面小工具”很好地实现了这种炒作:一个简单的客户端可以使用通用 API 和消息传递标准来使用基本的 Web 内容或复杂的混搭。

【讨论】:

  • 但是 CRUD 不是 REST;这只是您可以映射到 REST 原则的事情之一。
【解决方案3】:

HTTP 当前使用不足和误用。

我们通常只使用 HTTP 的两种方法:GET 和 POST,但还有更多:DELETE、PUT 等 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html)

因此,如果我们拥有由 RESTful URL 定义的资源(您的应用程序中的每个域对象都有唯一的 URL,形式为 http://yoursite.com/path/to/the/resource)和体面的 HTTP 实现,我们可以通过编写语句来操作域中的对象:

获取http://yoursite.com/path/to/the/resource

删除http://yoursite.com/path/to/the/resource

发布http://yoursite.com/path/to/the/resource

架构很好,一切都很好。

但这只是理论观点,在我之前的答案中发布的所有链接中都描述了现实世界的场景。

【讨论】:

  • URI 命名约定不是 REST 的一部分。这是一个带外约定。资源导航必须是超文本驱动的。 GET/DELETE/POST/PUT 是“正确使用 HTTP”,但不一定是 REST。
【解决方案4】:

让我们回到历史,谈谈罗伊菲尔丁的研究——“Architectural Styles and the Design of Network-based Software Architectures”。它是一篇大论文,谈论了很多各种各样的东西。但是作为一名标准工程师,您想如何解释清楚 REST(Representational State Transfer)的含义,以及它的架构风格是什么。

这是我的解释方式——“什么是 REST”。

查看这个运行在各种硬件之上的 www(万维网),例如路由器、服务器、防火墙、云基础设施、交换机、LAN、WAN。这个www(万维网)的总体目标是分发hypermedia。这个万维网配备了各种服务,例如基于信息的服务、网站、youtube 频道、动态网站、静态网站。这个万维网使用 HTTP 协议通过客户端/服务器机制在世界范围内分发超媒体。此 HTTP 协议在 TCP/IP 或其他适当的网络堆栈之上运行。

这个HTTP protocol 正在使用八种方法来管理“分发协议”或“分发架构样式”。这八种方法分别是:OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT。

但是在这个 HTTP 之上,Web 应用程序正在使用自己的方式来分发超媒体,例如 Web 应用程序正在使用与客户端和服务器高度相关的 Web 服务,或者 Web 应用程序正在使用自己的客户端/服务器设计方式在 HTTP 之上建立这种分发渠道的机制。

Roy Fielding Research 说的,HTTP 的 OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT 这八种方法非常成功地在各种硬件资源和网络之上将超媒体传递到世界各地与客户端/服务器机制相结合,为什么我们不在我们的基于 Web 的应用程序中使用类似的策略。在此 GET、POST、DELETE 和 PUT 上使用最多。所以有四种方法将超媒体传送到世界各地。

在 REST API Architecture Style 应用程序中,Web 应用程序需要设计具有所有对象实体集的业务逻辑(驻留在服务器中,例如 Tomcat、Apache HTTP)(例如,客户是一个实体) 和可能的操作(例如“根据客户 ID 检索客户信息”)。这些实体的那些可能的操作应该设计有四个主要的操作或方法,即创建、检索、更新、删除。这些实体称为资源,它们以某种形式呈现表示,例如JSON 或 XML 或其他东西。我们有客户端(浏览器)调用 Create、Retrieve、Update、Delete (CRUD) 方法来对驻留在服务器中的此类资源执行适当的功能。

但正如表示的概念所解释的,表示业务逻辑或对象的实体的表示方式。但是“状态转移”呢?

状态转移,它谈论从客户端到服务器的“通信状态”。它讨论了从客户端到服务器的“状态传输”的设计,例如客户首先调用了“创建客户”操作,然后调用了“客户”可以调用的下一个客户状态或客户状态。它的状态可能是“检索创建的客户端数据”、“更新客户端数据”或什么

【讨论】:

    【解决方案5】:

    REST 是一种定义和处理资源的架构。

    要更好地理解 REST,您应该查看Resource Oriented Architecture (ROA),它为实际实施 REST 架构提供了一套指导方针。

    REST 不需要通过 HTTP,但它是最常见的。 REST 最初是由 HTTP 的创建者之一创建的。

    【讨论】:

    • 维基百科的文章不是基于权威来源,而是相当混乱和误导。
    • @Wahnfrieden:主要是链接显示对 ROA 的引用是存在的,而不是我编造的。我的回答内容是基于 ROA 而不是维基百科文章的内容。
    • 但您仍将其表述为“为了最好地理解 REST,您应该查看 ”,这可能会产生误导。感谢您清理它。我对 Wikipedia 上的 REST 有很大的疑问。
    猜你喜欢
    • 2011-04-21
    • 2011-09-08
    • 1970-01-01
    • 2022-01-25
    • 2011-09-28
    • 2011-07-05
    • 2011-04-30
    • 1970-01-01
    • 2018-08-29
    相关资源
    最近更新 更多