什么是#34;表示","州"和"转移"在Representational State Transfer(REST)中?

时间:2018-01-05 15:12:54

标签: json rest restful-architecture

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

我有一个名为User

的表格

User表格内容

id name
1  xxx

我将调用的网址是/test/1

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

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

  • 资源 - 用户表格内容
  • 代表 - table / JSON
  • 状态转移 - 表格形式为JSON的数据。

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

  • 我的示例中的资源是什么?
  • 我的例子中的表示是什么?
  • 什么是状态转移?在我的例子中是什么时候发生的?

2 个答案:

答案 0 :(得分:3)

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

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

  

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

资源理解为用户的概念。不要考虑数据库中的表,考虑用户的一组属性抽象。

  

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

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

  

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

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

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

实施例

考虑在服务器中以某种方式存储 id name 等属性的用户资源:

  • ID:1
  • 姓名:John Doe

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

/users/1等网址可用于找到服务器中的资源。

可以对此网址执行GETPUTDELETE等请求,以使用表示检索/操纵资源状态,例如JSON和/或XML文档(可根据您的需要支持其他表示):

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

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

答案 1 :(得分:1)

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

  

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

好的,回顾这个​​词:

  

REST中信息的关键抽象是一种资源。可以命名的任何信息都可以是资源:文档或图像,临时服务(例如“洛杉矶的今天天气”),其他资源的集合,非虚拟对象(例如人)等等。换句话说,任何可能是作者超文本引用目标的概念都必须符合资源的定义。资源是对一组实体的概念映射,而不是与任何特定时间点的映射相对应的实体。

换句话说,“资源”就是你所谈论的概念。在这种情况下,名为xxx 的用户。但它可能是任何东西 - 保存名称为xxx的用户数据的表也是“资源”。

  

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

表示基本上是字节数组

  

表示是一个字节序列,加上用于描述这些字节的表示元数据。其他常用但不太精确的表示名称包括:文档,文件和HTTP消息实体,实例或变体。

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

  

什么是状态转移?在我的示例中是什么时候发生的?

当客户端和服务器交换消息时;客户端服务器体系结构样式是REST体系结构样式中的第一个体系结构约束。