什么是REST资源?

时间:2012-05-29 12:30:50

标签: rest api terminology

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

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

以下网址是资源吗?如果是,那该资源的名称是什么,它的表示是什么?

  

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

URL的GET响应应如下所示:

[
   {
      id: 6,
      name: "John"
   },
   {
      id: 7,
      name: "Jane"
   }
]

11 个答案:

答案 0 :(得分:35)

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

  

以下网址是资源吗?

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

JSON是资源的表示

答案 1 :(得分:23)

  

什么是资源?

     

资源是任何重要的东西,可以被引用为   事物本身。如果您的用户可能“想要创建超文本链接   它,制作或反驳关于它的断言,检索或缓存a   它的表示,包括全部或部分参考   另一个表示,注释,或执行其他操作   它“,那么你应该把它变成一种资源。

     

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

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

该文字来自O'Reilly的书“RESTful Web Services”。

答案 2 :(得分:13)

URL绝不是资源或其名称或其表示形式。

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

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

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

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

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

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

答案 3 :(得分:12)

  

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

REST并不意味着你可以更好地使用HTTP动词(GET,POST,PUT,DELETE等)。

  

以下网址是资源吗?

所有URL都是告诉计算机资源位于何处的字符串。 (因此名称:Uniform Resource Locator)。

答案 4 :(得分:6)

资源是:

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

我在我的博客帖子What, Exactly, Is a RESTful Resource?

上详细介绍了一下

答案 5 :(得分:6)

REST

这种建筑风格在Roy T. Fielding的论文chapter 5中定义。

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

资源

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

  

5.2.1.1 Resources and Resource Identifiers

     

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

     

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

资源表示

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

引用菲尔丁的论文:

  

5.2.1.2 Representations

     

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

     

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

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

资源标识符

URL em>资源标识符,用于标识/定位服务器中的资源。

answer也可能具有洞察力。

答案 6 :(得分:4)

从概念上讲,您可以将资源视为可以使用URL在Web上访问的所有内容。 如果您遵守此规则http://api.example.com/users.json?length=2&offset=5可以被视为资源

答案 7 :(得分:4)

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

答案 8 :(得分:2)

您只提供了看似相对参数而不是“ID”,这是(或应该)具体的。请记住,获取操作应该是幂等的(即可以使用相同的结果重复)。

答案 9 :(得分:0)

什么是REST?

REST是一种架构样式,代表Representational(RE)State(S)transfer(T)。

什么是REST资源?

Rest资源是我们想要执行操作的数据。因此,这些数据可以作为表的记录或任何其他形式存在于数据库中。该记录具有唯一的标识符可以像员工的ID一样被识别。

现在,当像http://www.example.com/employees/123,so这样的唯一网址请求此数据时,数据库中存在的数据或记录将由Rest Service转换为JSON / XML /纯文本格式,并将发送给消费者。

所以基本上,这里发生的是REPRESENTATIONAL STATE TRANSFER,它将数据库中存在的数据状态转换为另一种格式,可以是JSON / XML或纯文本。

因此,在这种情况下,1名员工代表1个资源,可以通过http://www.example.com/employees/123等唯一网址访问

如果我们想获得所有资源(员工)的列表,我们将: http://www.example.com/employees

希望这会有所帮助。

答案 10 :(得分:-2)

REST代表REpresentational State Transfer。这是一种将可变信息从一个位置传输到另一个位置的方法。执行此操作的常用方法是使用JSON - 一种格式化变量的方法,以便可以在不丢失信息的情况下传输它们。

例如,PHP内置了JSON支持。将PHP数组传递给json_encode($array)将以您发布的格式输出一个字符串(顺便说一下,它确实是一个REST资源,因为它为您提供变量和信息)。

在PHP中,您发布的数组将显示为:

Array (

    [0]=>Array (
        ['id']=>6;
        ['name']=>'John';
    )
    [1]=>Array (
        ['id']=>7;
        ['name']=>'Jane';
    )

)