REST:这破名字让我晚红了十几年

REST 是目前常用的 Web 架构风格,大家 RESTful 地贼 6,提起 REST 却有点犯怵,不太敢说它究竟是个什么。

没关系,很简单,REST 就是 Representational State Transfer,表述性状态转移。作者写论文的时候可能是这么想的:
REST:这破名字让我晚红了十几年_第1张图片
REST:这破名字让我晚红了十几年_第2张图片

REST:这破名字让我晚红了十几年_第3张图片
(只是刚好看到这个段子,无意冒犯博士,手动狗头谢罪)

为了解释好这个词儿,我搜索了半天,想找个通俗易懂的贴给大家,但后来发现,像我一样抖机灵的人太多,说的那些鬼话我都不敢信,到最后其实还是论文本身讲的最清楚,最可靠。

REST components communicate by transferring a representation of a resource in a format matching one of an evolving set of standard data types, selected dynamically based on the capabilities or desires of the recipient and the nature of the resource. Whether the representation is in the same format as the raw source, or is derived from the source, remains hidden behind the interface. The benefits of the mobile object style are approximated by sending a representation that consists of instructions in the standard data format of an encapsulated rendering engine (e.g., Java [45]). REST therefore gains the separation of concerns of the client-server style without the server scalability problem, allows information hiding through a generic interface to enable encapsulation and evolution of services, and provides for a diverse set of functionality through downloadable feature-engines.

REST 组件通过将资源以某种标准化的数据格式传输实现通信,这个标准可以根据使用者的能力、意愿或资源的性质动态选择。

无论这个表现形式是否与原始数据格式一致,是否来源于原始数据,都无关紧要,因为这些细节都隐藏在接口后面。

这种移动的风格的优势在于可以通过发送包含指令的标准格式的数据这一 “表现形式”,实现客户端和服务器风格的关注点分离(客户端关注会话状态,服务器关注资源状态),并且不存在伸缩性问题(服务器不用维持会话状态,因此可横向扩展)。

REST 允许通过通用接口隐藏信息,从而实现服务的封装和演化(服务的实现方式可以更改迭代,但接口本身保持稳定),并通过可下载的特征引擎提供各种各样的功能。

下面是原文总结的 REST 数据元素列表:

Data Element Modern Web Examples
resource the intended conceptual target of a hypertext reference
resource identifier URL, URN
representation HTML document, JPEG image
representation metadata media type, last-modified time
resource metadata source link, alternates, vary
control data if-modified-since, cache-control

这个表就很清楚了,representation 在现代 Web 中的实例,就是 HTML 文档、JPEG 图像这种浏览器渲染引擎认可的标准的数据格式。而 resource,就是通过这种格式要展示的东西,比如数据库里的数据。

因此,REST 的含义,就是用标准化的数据格式在客户端和服务器之间传递信息,来实现资源的状态的改变(转移)。

representation 翻译成表现形式、表征,可以视为是作者此篇论文背景下的一个专有名词,而 representational 翻译为“表征性”,倒不如不装这个比,老老实实叫“使用表征的”。

综上所述,REST 本来是用起来很简洁很自然的一个东西(相比 SOAP),因为命名和翻译造成了理解上的双重困难。

不想记这个词儿的含义也没关系,就理解成是“放松、休息”也行。与其纠结这个,不如去看看具体的约束,那些倒都是人话。

你可能感兴趣的:(Web,开发,rest)