繁体   English   中英

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

[英]What is the difference between resource and resource representation in 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格式的文本数据 - 在这种情况下,我得到了什么?

资源

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

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

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

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

网址

URL( 统一资源定位符仅标识资源,即资源在服务器中的位置。

例如,当URL /app/users/1找到ID为1的用户时,URL /app/users找到应用程序中的所有用户。

HTTP方法

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

例如,当您对URL /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的资源。

为此,当对URL /app/users/1执行GET时,您将使用application/json值添加HTTP头Accept ,以告知服务器客户端接受的表示。

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


例2

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

考虑一个用于查找用户个人资料图片的URL: /app/users/1/profile-picture

根据图像类型,响应的Content-Type将是image/jpegimage/pngimage/gif等。


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

以下是REST教父Roy T. Fielding的话(来自他的论文

§5.2.1.1资源和资源标识符

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

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

§5.2.1.2陈述

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

[...]

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

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

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

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

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

荣耀的细节在这里

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM