0

不知道是不是在这里问这些关于 REST 的基本问题......

我越是尝试理解 REST 并想要实现它,我就越感到困惑。我想可能是因为当人们来教你什么是 REST 时我看到的那些抽象词。例如,

来自维基百科的 REST,

代表性状态转移(REST)是万维网架构的抽象;更准确地说,REST 是一种架构风格,由一组协调的架构约束组成,这些约束应用于分布式超媒体系统中的组件、连接器和数据元素。

从这个链接

  1. 资源的表示应该是统一的

  2. 使用超媒体(而不是 URL 方案或资源名称映射)来表示关系

  3. 使用 API 的单个条目,从那里获得超链接(超链接?为什么不使用超媒体??)

  4. 在您的陈述中包含“自我”链接

  5. REST 不仅仅意味着将 ActiveRecord 模型作为 JSON 输出(那么你应该输出什么??

那么,下面这些抽象的术语是什么意思呢?

  1. 陈述,
  2. 资源,
  3. URL方案,
  4. 超媒体(它与超文本超链接有什么区别???),
  5. 资源名称映射——到,
  6. ActiveRecord 模型

你能用一个具体的例子来解释它们吗?

4

2 回答 2

1

许多人很快指出,通常使用的“REST”并不是最初定义的真正的 REST。

围绕这个话题有无休止的(和毫无意义的)讨论和辩论,但从实际的角度来看,我更喜欢考虑“资源”以及如何最好地公开它们。

REST 的概念在这方面可能具有指导意义,即使常见的实现与源代码不同。

最后,我们是程序员,必须构建满足今天目标的东西,知道它们不会是明天的。

于 2014-12-08T12:59:12.130 回答
1

表示是当您使用链接向资源发出请求时通过线路发送的完整字节集的名称。

资源是对您的应用程序很重要并且您希望将其公开给客户端应用程序的任何概念。资源由 URL 标识。

从技术上讲,URL 方案是出现在冒号之前的 URL 的前几个字节。例如http、urn、ftp、文件等。但是,我怀疑在您所看到的上下文中,它意味着组织路径段和查询字符串参数和URL 并为URL 的这些片段分配意义的约定。

从 REST 的角度来看,服务器可以创建 URL 约定,但客户端应该对这些约定一无所知。

超媒体是支持超链接的媒体类型的分类。超文本是一个较老的术语,几乎是超媒体的同义词。理论上,超媒体不需要是基于文本的格式。到目前为止,我不知道任何不是超文本的超媒体格式。

超链接、链接和网页链接是同义词。

不幸的是,这些术语在定义上是抽象的。有许多不同的方式来实现这些概念。

ActiveRecord是一个实现概念,通常用于包含将用于构建资源表示的数据。但是,如果您将自己限制为只能从 ActiveRecord 实例创建资源,则可能难以实现有效的 REST API。


资源的表示应该是统一的——这对我来说毫无意义。有一个称为“统一接口”的 REST 约束。但是,此约束是指使用一致的接口来支持构建分层应用程序。即当客户端想要与服务器通信时,您可以在其间插入代理、负载均衡器、缓存,客户端和服务器不知道区别,因为接口是一致的。

使用超媒体- 超媒体帮助您将客户端和服务器解耦,以允许两者独立发展。如果这对您不重要(即您总是可以在部署网站的同时部署您的客户端 javascript),那么您将不会从中获得很多价值。

对 API 使用单个条目- 请参阅上一点。如果您需要独立的可进化性,请探索更多。

在您的陈述中包含“自我链接”再次......

REST 不仅仅意味着吐出 ActiveRecord 模型,因为 JSON REST 是应用程序边界的一种架构风格。将 ActiveRecords 公开为资源将您的客户端与服务器的实现细节联系起来。此外,HTTP 仅限于几种方法(GET、PUT、POST、DELETE、OPTIONS、HEAD)。为了弥补这个有限的词汇量,您需要创建与数据库中的记录无关的资源。

于 2014-12-11T15:00:44.627 回答