具象状态转移 (REST) 中的“表示”、“状态”和“转移”是什么?

hmm*_*mmm 8 rest json restful-architecture

我遇到了一些关于 REST 的资源,但我无法清楚地理解事情。如果有人可以就我下面的示例解释一些事情,那将对我有所帮助。

我有一张名为 User

User 表格内容

id name
1  xxx
Run Code Online (Sandbox Code Playgroud)

我要调用的 URL 是 /test/1

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

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

  • 资源- 用户表内容
  • 表示- 表/JSON
  • 状态传输- 以表格形式的数据到 JSON。

请让我知道我的理解是否正确。否则,请回答以下问题:

  • 我的示例中的资源是什么?
  • 在我的示例中什么是表示?
  • 什么是状态转移或在我的示例中何时发生这种情况?

cas*_*lin 7

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

在设计基于 HTTP 的 REST 时,URL 用于定位资源,HTTP 方法用于表达对资源的操作,并且诸如 JSON 和/或 XML 文档之类的表示用于表示资源的状态。HTTP 标头可用于交换有关请求和响应的一些元数据,而 HTTP 状态代码用于通知客户端有关操作的状态。


我的示例中的资源是什么?

资源理解为用户的概念。不要考虑数据库中的表,而是考虑用户及其属性集的抽象。

我的示例中的表示是什么?

JSON 文档可用于表示特定资源的状态。一个资源可以有多种表示,例如 JSON 和/或 XML 文档,并且客户端可以使用内容协商来请求同一资源的不同表示。

什么是状态转移或在我的示例中何时发生这种情况?

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

GET请求,例如,可以检索一个资源,在响应有效载荷发送的状态的表示。甲PUT请求,例如,允许您使用由封闭在请求有效载荷表示所定义的状态替换资源的状态。


例子

考虑一个用户资源,其属性如idname以某种方式存储在您的服务器中:

  • 编号:1
  • 姓名:约翰·杜

这些细节构成了资源的状态

/users/1可用于定位服务器中的资源的URL 。

可以针对此 URL 执行诸如GETPUT和 之类的请求,以DELETE使用表示检索/操作资源的状态,例如 JSON 和/或 XML 文档(可以根据您的需要支持其他表示):

{
  "id": 1,
  "name": "John Doe"
}
Run Code Online (Sandbox Code Playgroud)
<user>
  <id>1</id>
  <name>John Doe</name>
</user>
Run Code Online (Sandbox Code Playgroud)

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