Representational State Transfer (REST) 中的 "representation"、"state" 和 "transfer" 是什么?

What is "representation", "state" and "transfer" in Representational State Transfer (REST)?

我遇到了一些关于 REST 的资源,但我无法清楚地理解它们。如果有人可以针对我下面的示例进行解释,这将对我有所帮助。

我有一个名为 User

的 table

Usertable内容

id name
1  xxx

我要拨打的URL是/test/1

结果将采用JSON格式,例如:{ 1: "xxx" }

到目前为止我对 REST 的理解:

如果我的理解正确,请告诉我。 否则,请回答以下问题:

REST 是关于通过它们在客户端和服务器之间的无状态通信之上的表示来操纵资源状态。它是一种独立于协议的架构风格,但在实践中,它通常在 HTTP 协议之上实现。

在设计 REST over HTTP 时,URLs 用于定位资源,HTTP 方法用于表达对资源的操作和表示,例如 JSON and/or XML 文件用来表示资源的状态。 HTTP headers 可用于交换有关请求和响应的一些元数据,而 HTTP 状态代码用于通知客户端有关操作状态。


What is a resource in my example?

资源理解为一个用户的概念。不要考虑数据库中的 table,请考虑用户及其属性集的抽象。

What is a representation in my example?

JSON 文档可用于表示 特定资源的状态。一个资源可以有很多表示,比如JSONand/orXML个文档,客户端可以使用内容协商来请求同一个资源的不同表示资源。

What is a state transfer or when does this happens in my example?

给定资源的状态可以使用表示来检索和操作。

例如,

GET 请求允许您检索在响应负载中发送的资源状态的表示。例如,PUT 请求允许您将资源状态替换为请求负载中包含的表示所定义的状态。


例子

考虑以某种方式存储在您的服务器中的具有 idname 等属性的用户资源:

  • ID: 1
  • 姓名:李四

这些详细信息构成资源的状态

一个URL比如/users/1可以用来定位你服务器中的资源。

可以针对此 URL 到 retrieve/manipulate 资源状态使用 [=45] 执行 GETPUTDELETE 等请求=]representations,如JSON and/or XML 文件(可根据需要支持其他表示):

{
  "id": 1,
  "name": "John Doe"
}
<user>
  <id>1</id>
  <name>John Doe</name>
</user>

上面显示的文件不是资源本身。它们只是 表示 资源的一种方式。它以某种方式存储在您的服务器中。

如果你想了解REST,你真的应该从源头开始:Fielding's thesis

What is a Resource in my example?

好的,复习术语:

The key abstraction of information in REST is a resource. Any information that can be named can be a resource: a document or image, a temporal service (e.g. "today's weather in Los Angeles"), a collection of other resources, a non-virtual object (e.g. a person), and so on. In other words, any concept that might be the target of an author's hypertext reference must fit within the definition of a resource. A resource is a conceptual mapping to a set of entities, not the entity that corresponds to the mapping at any particular point in time.

也就是说,"resource"就是你说的这个概念。在这种情况下,名称为 xxx 的用户。但它可以是任何东西——保存有关名为 xxx 的用户的数据的 table 也是一个 "resource"。

What is a Representation in my example?

表示基本上是字节数组

A representation is a sequence of bytes, plus representation metadata to describe those bytes. Other commonly used but less precise names for a representation include: document, file, and HTTP message entity, instance, or variant.

所以您的 json 文档——更准确地说,是 utf-8 编码的字节数组,是一种表示形式。给定资源在任何给定时间可能有许多表示。

What is a state transfer or when does this happens in my example?

当客户端和服务器交换消息时;客户端服务器架构风格是 REST 架构风格中的第一个架构约束。