什么是REST资源?

Ema*_*sev 41 api rest terminology

什么是REST资源以及它们如何与资源名称和资源表示相关联?

我读了几篇关于这个主题的文章,但是它们太抽象了,让我比以前更加困惑.

以下URL是资源吗?如果是,那个资源的名称是什么,它的代表是什么?

http://api.example.com/users.json?length=2&offset=5

URL的GET响应应如下所示:

[
   {
      id: 6,
      name: "John"
   },
   {
      id: 7,
      name: "Jane"
   }
]
Run Code Online (Sandbox Code Playgroud)

Jer*_*myP 36

REST资源上的文章是抽象的原因是因为REST资源的概念抽象的.它基本上是"你提供的URL访问的任何东西".因此,在您的示例中,资源将是在较大列表中从偏移量5开始的两个用户的列表.请注意,除非您是编写实现的人,否则如何实现资源是您不关心的细节.

以下URL是资源吗?

URL不是资源,它是标识资源的标签,如果您愿意,它是资源的名称.

JSON是资源的表示.

  • 基本上,URL是您要使用的资源所在的端点 (5认同)

Ema*_*sev 25

什么是资源?

资源是任何重要的东西,可以作为一个东西本身被引用.如果您的用户可能"想要创建一个超文本链接,制作或反驳关于它的断言,检索或缓存它的表示,通过引用将其全部或部分包含在另一个表示中,对其进行注释或对其执行其他操作"那么你应该把它变成一种资源.

通常,资源可以存储在计算机上并表示为位流:文档,数据库中的行或运行算法的结果.资源可以是像苹果这样的物理对象,也可以是像勇气这样的抽象概念,但(我们稍后会看到)这些资源的表示必然会令人失望.以下是一些可能的资源:

  • 软件版本1.0.3版
  • 最新版本的软件版本
  • 2006年10月24日的第一篇博客文章
  • 阿肯色州小石城的路线图
  • 关于水母的一些信息
  • 与水母有关的资源目录
  • 1024之后的下一个素数
  • 1024之后的下五个素数
  • Q42004的销售数字
  • 两个熟人,爱丽丝和鲍勃之间的关系
  • bug数据库中的开放错误列表

该文本来自O'Reilly的书" RESTful Web Services ".


sha*_*yyx 13

URL永远不是资源或其名称或其表示形式.

URL只是告诉资源所在的位置,您可以在此URL上调用GET,POST,PUT,DELETE等来调用资源.

回复的数据是资源,而数据的形式是其表示.

假设您使用给定GET参数的URL可以输出JSON资源 - 这是此资源的JSON表示形式.虽然在GET中使用其他标志,但它可以使用XML中的相同数据进行响应 - 这将是同一资源的另一种表示.

编辑:由于对OP的评论和我的回答,我正在添加另一种解释.

此外,资源名称被视为"脚本名称",例如,在这种情况下users.json,此资源名称是自描述资源表示本身 - 当调用此资源时,我们期望资源是JSON,而在调用时users.xml我们会期待XML中的数据.

  1. 当我offset在GET中更改参数时,响应包含不同的数据集 - 它是新资源还是其表示?
  2. 当我在GET中定义响应中返回哪些列时,它是不同的资源还是不同的表示,或者?
  1. 好吧,这里的问题和答案很清楚 - 我们仍然调用相同的URL,服务器响应同一形式的数据(仍然是JSON),数据仍然包含有关用户的信息 - 只是信息本身已经改变,因为新的偏移参数.因此很明显,它仍然是具有相同表示和相同资源名称的相同资源.
  2. 第二个问题可能有点令人困惑.虽然我们正在调用相同的资源,但是资源包含相同的数据(仅使用预定义的列集),尽管数据具有相同的表示,但在我们看来它们可能是不同的资源.但由于上段中的要点,它也不是不同的资源或不同的表示.虽然数据集包含较少的信息,但请求方(过滤此数据集)应该考虑这一点并相应地表现.所以再次:它是具有相同资源名称和相同资源表示的相同资源.


Que*_*tin 12

什么是REST资源以及它们如何与资源名称和资源表示相关联?

REST并不意味着你可以正确地使用HTTP动词(GET,POST,PUT,DELETE等).

以下URL是资源吗?

所有URL都是告诉计算机资源可以位于何处的字符串.(因此名称:统一资源定位器).


cas*_*lin 9

休息

这种建筑风格在Roy T. Fielding的论文第5章中有所定义.

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

资源

资源本身是一个抽象的,在作者的话,资源可以是可以被命名为任何信息.应用程序的域实体(例如,个人,用户,发票,发票集合等)可以是资源.请参阅Fielding的论文中的以下引文:

5.2.1.1资源和资源标识符

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

更确切地说,资源R是时间上变化的隶属函数M R(t),其对于时间t映射到等效的一组实体或值.集合中的值可以是资源表示和/或资源标识符.[...]

资源表示

JSON文档是资源表示,允许您表示资源的状态.服务器可以为同一资源提供不同的表示.例如,使用XML和JSON文档.客户端可以使用内容协商来请求相同资源的不同表示.

引用菲尔丁的论文:

5.2.1.2表示

REST组件通过使用表示捕获该资源的当前或预期状态并在组件之间传输该表示来对资源执行操作.表示是字节序列,加上用于描述这些字节的表示元数据.其他常用但不太精确的表示名称包括:文档,文件和HTTP消息实体,实例或变体.

表示由数据,描述数据的元数据以及有时描述元数据的元数据(通常用于验证消息完整性)组成.元数据采用名称 - 值对的形式,其中名称对应于定义值的结构和语义的标准.响应消息可以包括表示元数据和资源元数据:关于不是特定于所提供的表示的资源的信息.[...]

通过HTTP,请求和响应头可用于交换有关表示的元数据.

资源标识符

URL是标识/定位服务器中的资源的资源标识符.


这个答案也可能很有见地.


tec*_*ous 7

资源是:

  • 一个名词
  • 这是独一无二的
  • 并可以表示为数据
  • 并且至少有一个URI

我在博客文章中详细介绍了什么,究竟是什么,是一个RESTful资源?


Mas*_*uso 5

从概念上讲,您可以将资源视为使用 URL 在网络上可访问的所有内容。如果你坚持这个规则http://api.example.com/users.json?length=2&offset=5可以被认为是一种资源


ver*_*ude 5

具象状态传输 (REST) 是一种用于分布式系统(例如万维网)的软件架构风格。REST 风格的架构由客户端和服务器组成。客户端向服务器发起请求;服务器处理请求并返回适当的响应。请求和响应是围绕资源表示的传输构建的。资源是一组可寻址对象,基本上是文件和文档,使用 URL 链接。正如 Quentin 上面正确指出的那样,REST 架构仅仅意味着您将使用 HTTP 动词 GET/POST/PUT/DELETE...