我阅读了一些相关文章,但它们过于抽象,让我比之前更加困惑。
以下URL是否为资源?如果是,那么该资源的名称和表示是什么?
URL的GET响应应该是这样的:
[
{
id: 6,
name: "John"
},
{
id: 7,
name: "Jane"
}
]
URL的GET响应应该是这样的:
[
{
id: 6,
name: "John"
},
{
id: 7,
name: "Jane"
}
]
REST资源的文章之所以抽象,是因为REST资源的概念本身就是抽象的。它基本上是“由你提供的URL访问的任何东西”。因此,在您的示例中,资源将是从某个更大列表的偏移量5开始的两个用户列表。请注意,除非您是编写实现的人,否则您不关心资源的实现方式是什么细节。
以下URL是否是资源?
该URL不是资源,它只是标识资源的标签,如果您愿意,它是资源的名称。
JSON是资源的表示。
资源是任何重要到足以被引用为一个独立物体的东西。如果你的用户可能“想要创建超文本链接、对其进行断言、检索或缓存其表示形式、将其全部或部分地引用到另一个表示形式中、注释它或执行其他操作”,那么你应该将其作为资源。
通常,资源是可以存储在计算机上并表示为一系列比特流的东西:文档、数据库中的一行或运行算法的结果。资源可以是像苹果这样的物理对象,也可以是像勇气这样的抽象概念,但是(如我们后面将看到的)这些资源的表示形式都会令人失望。以下是一些可能的资源:
URL并不是资源本身、其名称或其表示。
URL只是指示资源所在的位置,您可以对此URL进行GET、POST、PUT、DELETE等操作来调用资源。
响应的数据是资源,而数据的形式是它的表示。
比如说,您带有给定GET参数的URL可以输出JSON资源 - 这是这个资源的JSON表示。而使用GET中的其他标志,则会以XML的形式响应相同的数据 - 这将是同一资源的另一种表示。
编辑:由于对OP和我的回答的评论,我添加了其他解释。
此外,资源名称被认为是'脚本名称',例如在这种情况下它是users.json
,而当调用此资源时,资源名称本身描述了资源表示 - 当我们调用此资源时,我们期望资源以JSON格式呈现,而当调用例如users.xml
时,我们将期望数据以XML格式显示。
- 当我在GET中更改
offset
参数时,响应包含不同的数据集 - 这是一个新资源还是它的表示?- 当我在GET响应中定义返回的列时,这是不同的资源还是不同的表示,或者是其他什么?
http://api.example.com/users/123?fields[]=id&fields[]=email
那么:
这是一个不同的资源吗?
这是一个不同的表示形式吗?
还是其他什么东西? - Haralan Dobrev这种架构风格在Roy T. Fielding的论文第5章中定义。
REST是通过客户端和服务器之间无状态通信,在其表示形式上对资源状态进行操作的。它是一种独立于协议的架构风格,但在实践中,通常在HTTP协议的基础上实现。
资源本身是一种抽象概念,并且按照作者的说法,资源可以是任何可以命名的信息。应用程序的领域实体(例如人、用户、发票、发票集合等)可以是资源。请参阅Fielding论文中的以下引用:
REST 中信息的关键抽象是 资源。任何可以命名的信息都可以是资源:文档或图像、时态服务(例如“洛杉矶今天的天气”)、其他资源的集合、非虚拟对象(例如人)等等。换句话说,任何可能成为作者超文本引用目标的概念都必须符合资源的定义。资源是到一组实体的概念映射,而不是在任何特定时间点对应于映射的实体。
更准确地说,一个资源 R 是一个随时间变化的成员函数 MR(t),它将时间 t 映射到一组等效的实体或值。集合中的值可以是 资源表示 和/或 资源标识符。[...]
JSON 文档是一种 资源表示,它允许您表示资源的状态。服务器可以为同一资源提供不同的表示形式。例如,使用 XML 和 JSON 文档。客户端可以使用 内容协商 请求同一资源的不同表示形式。
引用 Fielding 的论文:
REST组件通过使用表示来捕获资源的当前状态或意图状态,并在组件之间传输该表示以对资源执行操作。表示是一系列字节,加上表示元数据来描述这些字节。表示的其他常用但不太精确的名称包括:文档、文件和HTTP消息实体、实例或变体。
表示由描述数据的元数据、有时还包括描述元数据的元数据(通常是为了验证消息完整性)组成。元数据采用名称-值对的形式,其中名称对应于定义值结构和语义的标准。响应消息可以包括表示元数据和资源元数据:关于不特定于提供的表示的资源的信息。[...]
在HTTP中,请求和响应头可以用于交换有关表示的元数据。
URL是服务器中标识/定位资源的资源标识符。
这个answer也许会很有启发性。
REST资源是什么,它们与资源名称和资源表示有什么关系?
REST不仅仅意味着正确使用HTTP动词(GET、POST、PUT、DELETE等)。
以下URL是否为资源?
所有的URL都是字符串,告诉计算机资源位于何处(因此称为统一资源定位符)。
我在我的博客文章中详细介绍了这个概念:什么是RESTful资源?
名词
的意思是:指人、地方、事物、事件、物质或品质的词语
。名词的例子包括:人、桌子、行为、工具、所有者等。 - nav从概念上讲,您可以将资源视为使用URL在Web上可访问的所有内容。如果遵循此规则,可以认为http://api.example.com/users.json?length=2&offset=5
是一种资源。
/users
,它检索多个项目,和/users/123
,它检索一个项目。 - Emanuil Rusev您提供的似乎只是相对参数,而不是具体的“ID”参数。请记住,获取操作应该是幂等的(即使用相同的结果可重复执行)。
什么是REST?
REST是一种架构风格,代表着表征性(RE)状态(S)转移(T)。
什么是REST资源?
REST资源是我们想要执行操作的数据。因此,这些数据可以作为表格记录或以其他形式存在于数据库中。该记录具有唯一标识符,例如Employee的ID。
当使用唯一的URL请求此数据时,例如http://www.example.com/employees/123,最终Rest服务将把数据库中存在的数据或记录转换为JSON/XML/普通文本格式,并发送给消费者。
因此,基本上在这里发生的是表征性状态转移,以一种方式将存在于数据库中的数据的状态转移到可以是JSON/XML或普通文本的另一种格式。
因此,在这种情况下,1个员工表示1个资源,可以通过唯一的URL访问,例如http://www.example.com/employees/123。
如果我们想要获取所有资源(员工)的列表,我们将会执行以下操作: http://www.example.com/employees 希望这能有所帮助。
users
? - Emanuil Rusev