什么是REST资源以及它们如何与资源名称和资源表示?
我读了关于这个问题的几篇文章,但他们过于抽象,他们给我留下了更多的困惑比我以前。
在下面的URL的资源? 如果是,那是资源的名称,什么是它的代表性?
http://api.example.com/users.json?length=2&offset=5
该URL的GET响应应该是这个样子:
[
{
id: 6,
name: "John"
},
{
id: 7,
name: "Jane"
}
]
Answer 1:
为什么REST资源文章是抽象的原因是因为一个REST资源的概念是抽象的。 它基本上是“力所能及的事是由您提供的URL访问”。 所以,在你的榜样,资源将开始在两个用户的列表中一些更大的列表偏移5。 需要注意的是,实施资源怎么又是你不关心,除非你是一个写作实施细节。
在下面的URL的资源?
该URL不是一种资源,它是标识资源的标签,它是,如果你喜欢,资源的名称。
该JSON是资源的表示 。
Answer 2:
什么是资源?
资源是什么,这就足够重要,因为本身就是一个东西被引用。 如果您的用户可能“想创建一个超文本链接到它,制造或反驳它断言,检索或缓存它的代表性,包括它的全部或部分参照成另一种表示,注释,或在其上执行其他操作”,那么你就应该让一个资源。
通常,资源的东西,可以被存储在计算机上,并表示为比特流:一个文档,在一个数据库中的一行,或运行算法的结果。 资源可能会像苹果一样的物理对象,或一个抽象的概念般的勇气,但(我们将在后面看到)这种资源的表示一定会令人失望。 下面是一些可能的资源:
- 软件发布的版本1.0.3
- 软件发布的最新版本
- 2006年10月24日,第一个博客文章
- 阿肯色州小石城的路线图
- 关于水母的一些信息
- 资源属于水母目录
- 1024之后的下一个素数
- 1024后的未来五年的素数
- 销售号码Q42004
- 两人的熟人,Alice和Bob之间的关系
- 在开放的错误的bug数据库列表
文字是由O'Reilly出版的“ REST Web服务 ”。
Answer 3:
该URL是从来没有的资源或者其名称或表示。
URL只是告诉那里的资源所在,你可以调用GET,POST,PUT,DELETE这个URL等来调用资源。
数据也回应道:是的资源,而数据的形式是其代表。
比方说,你的URL与给定的GET参数可以输出一个JSON资源 - 这是该资源的JSON表示。 虽然在它可以与XML相同的数据响应GET其他标志 - 那将是非常相同的资源的另一种表示。
编辑:由于意见的OP和我的答案我添加另一种解释。
另外, 资源名字被认为是“脚本名称”,例如在这种情况下, users.json
而这种资源名称自描述的资源表示本身-在调用该资源时,我们预计资源是JSON,当调用而例如users.xml
我们希望在XML数据。
- 当我改变
offset
参数得到的回应包含不同的数据集-它是一个新的资源或者其表示? - 当我定义的列在GET响应返回,它是一个不同的资源或不同的表示,还是?
- 那么,这里的问题和答案是明确的 - 我们仍然调用同一个网址,在同一个表单中的数据(它仍然是JSON),数据仍然包含用户信息的服务器响应 - 只是由于本身已更改为信息新的偏移量参数。 所以很明显, 它仍然是相同的表示和以前相同的资源名称相同的资源 。
- 第二个问题可能是一个有点混乱。 虽然我们调用相同的资源,但资源包含相同的数据(只是唯一的预定义列集),虽然该数据在相同的表示它可能似乎给我们一个不同的资源。 但由于它上面的段落中的点是,也不是不同的资源和不同的表示。 虽然数据集包含较少的信息请求侧(过滤该数据集)应考虑这一点,并相应的行为。 所以,再一次: 这是具有相同的资源名称和相同的资源表示相同的资源 。
Answer 4:
什么是REST资源以及它们如何与资源名称和资源表示?
REST并不意味着更大量的,那么你使用HTTP动词(GET,POST,PUT,DELETE等)正常。
在下面的URL的资源?
所有的网址为字符串,告诉电脑在那里的资源可以定位。 (因此,名称:统一资源定位符)。
Answer 5:
资源是:
- 一个名词
- 这是独一无二的
- 并且可以被表示为数据
- 和具有至少一个URI
我进入更详细的我的博客文章,究竟是什么,是一个RESTful资源?
Answer 6:
休息
这种建筑风格的定义第5章罗伊T. Fielding的论文。
REST是关于通过其对客户端和服务器之间的通信无状态的顶部表示资源状态的操作。 这是一个与协议无关的建筑风格,但实际上,它是对HTTP协议的顶部普遍实现。
资源
资源本身是一种抽象,在笔者的话,资源可以是可以命名的任何信息 。 一个应用程序的域实体(例如一个人,用户,发票,发票的集合等),可资源。 看到Fielding的论文以下报价:
5.2.1.1资源和资源标识符
在REST信息的关键抽象是一种资源 。 可名可以是一个资源的任何信息:文档或图像,时间服务(例如,“今天的天气洛杉矶”),其他资源的集合,非虚拟对象(例如人),等等。 换句话说,这可能是作者的超文本引用的目标的任何构想必须适应资源的定义范围内。 资源是一个概念性映射到一组实体,而不是对应于所述映射在任何特定时间点的实体。
更准确地说,一个资源R是随时间变化的隶属函数M R(t),其为时间t映射到一组实体,或值的,这是等价的。 在设定的值可能是资源的陈述和/或资源标识符 。 [...]
资源表示
一个JSON文件是资源表示 ,可以让你代表一个资源的状态。 一台服务器可以提供相同的资源不同的表示。 例如,使用XML和JSON文件。 客户端可以使用内容协商来请求同一资源的不同表示。
引用Fielding的论文:
5.2.1.2交涉
REST部件通过使用表示以捕获资源的当前或预期状态和转移部件之间的表示执行中的资源的操作。 的表示是一个字节序列,加上表示元数据来描述的那些字节。 用于表示其他常用但不太精确的名称包括:文档,文件,和HTTP消息的实体,例如,或变体。
一种表示由数据的,元数据描述数据,并且,有时,元数据来描述元数据(通常是用于验证消息的完整性的目的)。 元数据是在名称 - 值对的形式,其中该名称对应于限定值的结构和语义的标准。 响应消息可以包括表示元数据和资源元数据:关于不特定于所提供的表示中的资源信息。 [...]
通过HTTP,请求和响应标头可用于对表示交换元数据。
资源标识符
的URL标识/ 资源标识符定位在服务器中的资源。
这个答案也可能是有见地的。
Answer 7:
具象状态传输(REST)是一种软件体系结构的分布式系统,如万维网的样式。 REST风格的架构由客户端和服务器的。 客户端发起请求到服务器; 服务器处理请求并返回适当的响应。 请求和响应是围绕资源表示的传输建立。 资源是一组可寻址的对象,基本档案和文件,使用URL链接。 上述昆廷作为正确地指出,REST archiecture只是意味着你会使用HTTP动词GET / POST / PUT /删除...
Answer 8:
从概念上讲,你可以想想资源作为一切是使用URL在网络上访问。 如果你坚持这个规则http://api.example.com/users.json?length=2&offset=5
可以被认为是一种资源
Answer 9:
你只提供了什么似乎是相关参数,而不是“ID”,这是(或应该是)混凝土。 请记住,获取操作应幂等(即重复使用相同的结果)。
Answer 10:
什么是REST?
REST是一种体系结构样式其代表具象(RE)状态(S)传送(T)。
什么是REST资源?
其余资源是其上我们希望执行的操作(一个或多个)数据。所以这个数据可以存在于数据库中作为表(一个或多个)的记录(一个或多个),或在任何其他form.This记录具有唯一的标识符与它可被识别像ID为员工。
现在,当该数据是由唯一的URL请求等http://www.example.com/employees/123,so最终数据或记录,其存在于数据库将由REST服务和将被转换为JSON / XML /纯文本格式发送给消费者。
所以基本上,这里发生了什么是表述性状态转移,在某种程度上存在于数据库中的数据的状态转移到可JSON / XML或纯文本另一种格式。
因此,在这种情况下,1名员工代表1级的资源可以通过唯一URL等访问http://www.example.com/employees/123
如果我们想获得的所有资源(员工)的列表中,我们会做: http://www.example.com/employees
希望这会有所帮助。
Answer 11:
REST表示代表性状态传输。 这是从一个地点转移可变信息到其他的方法。 这样做的一个常用方法是使用JSON - 格式化你的变量,这样他们可以在不丢失信息被转移的一种方式。
PHP,例如,已建成JSON支持。 传递一个PHP数组json_encode($array)
将输出在您发布的格式(顺便说一下,确实是一个REST资源,因为它给了你的变量和信息)的字符串。
在PHP中,您发布的数组会变成如下:
Array (
[0]=>Array (
['id']=>6;
['name']=>'John';
)
[1]=>Array (
['id']=>7;
['name']=>'Jane';
)
)
文章来源: What are REST resources?