REST中的资源和资源表示有什么区别?

时间:2015-11-14 07:30:46

标签: json xml rest

我是REST新手,刚开始阅读一些教程。

让我感到困惑的一件事是: txt / xml / json形式的内容:资源或资源表示?必须是后者,对吧?由于资源可以是视频,音频或其他MIME类型。

以下面的例子为例。假设我给出的描述类似于“RESTful服务,其中User是使用以下XML格式表示的资源”:

<user>
   <id>1</id>
   <name>Mahesh</name>
   <profession>Teacher</profession>
</user>

或JSON格式:

{
   "id":1,
   "name":"Mahesh",
   "profession":"Teacher"
}

然后,当我使用HTTP GET访问资源时,我实际得到的数据是什么?我得到'1,Mahesh,教师',因为这是除格式之外的真实数据,或者我得到包含数据和数据表示的整个xml或json'对象'?

如果用户有图像属性怎么办? HTTP将什么样的“包”以及以何种形式提供给我:图像本身或图像的链接?

修改

这里的另一个例子是:

http://maps.googleapis.com/maps/api/geocode/xml?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false

我应该理解返回的资源本身是XML文件,或者资源不是XML文件,但是嵌入在XML资源表示中的一些数据是?

如果我想要的资源包含图像,视频等,该怎么办?那些不是可以嵌入XML或JSON格式的文本数据 - 在这种情况下,我得到了什么?

3 个答案:

答案 0 :(得分:8)

资源

REST资源的概念是抽象的,您可以将其理解为由服务器提供的URL标识的内容

资源可以是用户,用户列表,客户,文件或应用程序的任何实体。

例如,将用户视为具有以下属性和值的资源:

  • ID:1
  • 名字:John
  • 姓氏:Doe
  • 电子邮件:john.doe@example.com

URL

URL (Uniform Resource Locator)只标识资源,即资源在服务器中的位置。

例如,当网址/app/users/1找到ID为1的用户时,网址/app/users会找到该应用中的所有用户。

HTTP方法

REST与协议无关,但是,如果您使用HTTP,则可以使用HTTP方法对访问URL的资源执行操作,例如GETPOSTPUTDELETE

例如,当您对网址/app/users/1执行GET时,您将获得ID为1的用户的代表。

资源代表

资源可以用多种格式表示,例如JSON,XML,YAML等。

在JSON中,表示形式为:

{
    "id": 1,
    "firstName": "John",
    "lastName": "Doe",
    "email": "john.doe@example.com"
}

在XML中,表示形式如下:

<user>
    <id>1</id>
    <firstName>John</firstName>
    <lastName>Doe</lastName>
    <email>john.doe@example.com</email>
</user>

示例1

考虑您正在使用JavaScript开发应用程序,并且服务器可以将资源表示为JSON和XML。在JavaScript应用程序中处理JSON而不是XML更容易。因此,您希望表示为JSON的资源。

要执行此操作,在对/app/users/1执行GET时,您需要添加带有application/json值的HTTP标头Accept来告诉服务器客户接受的陈述。

因此,服务器将返回表示为JSON的资源。响应将包含Content-Type标头,其中包含application/json值,表示响应内容为JSON。

示例2

除了JSON和XML之外,例如,资源可以表示为图像或视频。

考虑用于查找用户个人资料照片的网址:/app/users/1/profile-picture

根据图片类型,回复的Content-Type将为image/jpegimage/pngimage/gif等。

answer也可能具有洞察力。

答案 1 :(得分:3)

以下是REST教父Roy T. Fielding的话(来自his dissertation

  

§5.2.1.1资源和资源标识符

     

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

实际上,资源可以是抽象概念,可以通过URI识别,并且可以在可传输数据中表示。

  

§5.2.1.2陈述

     

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

     

[...]

     

表示的数据格式称为媒体类型。表示可以包含在消息中,并由接收者根据消息的控制数据和媒体类型的性质进行处理。

所以表示实际上是表示资源的数据(或状态)。

表示的数据格式正式是媒体类型,但您也可能听到它被称为变体。

每个对REST感兴趣的人,至少应该阅读该论文的第5章。毕竟,这就是REST的结果。

答案 2 :(得分:0)

使用REST取决于您在HTTP GET中请求的表示形式(即MIME格式)。例如有用于表达的HTTP标头。从客户的角度来看,它始终是关于“原始”数据之前的表示。

荣耀的细节是here

所以是的,您将“获取包含数据和数据表示的整个xml或json'对象”。