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

Json REST中的资源和资源表示有什么区别?,json,xml,rest,Json,Xml,Rest,我刚开始休息,刚开始阅读一些教程 真正让我困惑的是:什么是txt/xml/json格式:资源还是资源表示?必须是后者,对吗?因为资源可以是视频、音频或其他MIME类型 以下面的例子为例。假设我得到了一个类似“RESTful服务”的描述,其中用户是使用以下XML格式表示的资源: <user> <id>1</id> <name>Mahesh</name> <profession>Teacher</prof

我刚开始休息,刚开始阅读一些教程

真正让我困惑的是:什么是txt/xml/json格式:资源还是资源表示?必须是后者,对吗?因为资源可以是视频、音频或其他MIME类型

以下面的例子为例。假设我得到了一个类似“RESTful服务”的描述,其中用户是使用以下XML格式表示的资源:

<user>
   <id>1</id>
   <name>Mahesh</name>
   <profession>Teacher</profession>
</user>
然后,当我使用HTTP GET访问资源时,我实际得到了什么数据?我得到了“1,Mahesh,Teacher”,因为这是不包括格式的真实数据,还是得到了包含数据和数据表示的整个xml或json“object”

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

编辑

另一个例子是:

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


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

使用REST时,所有这些都取决于您在HTTP get中请求的表示形式(即MIME格式)。例如,有HTTP头来传达这一点。从客户的角度来看,它总是关于“原始”数据之前的表示

荣耀的细节是

因此,是的,您将“获得包含数据和数据表示的整个xml或json“对象”。

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

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

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

  • 身份证号码:1
  • 名字:约翰
  • 姓氏:Doe
  • 电子邮件:约翰。doe@example.com
统一资源定位地址 仅标识资源,即资源在服务器中的位置

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

HTTP方法 REST是独立于协议的,但是,如果使用HTTP,则可以使用HTTP方法对访问URL的资源执行操作,例如,和

例如,当您对URL
/app/users/1
执行一个操作时,您将获得ID为
1
的用户表示

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

在JSON中,表示形式为:

{
“id”:1,
“名字”:“约翰”,
“姓氏”:“能源部”,
“电子邮件”:“约翰。doe@example.com"
}
在XML中,表示形式如下所示:


1.
约翰
雌鹿
厕所。doe@example.com

示例1

假设您正在用JavaScript开发一个应用程序,服务器可以提供JSON和XML形式的资源表示。在JavaScript应用程序中处理JSON比处理XML更容易。因此,您需要将资源表示为JSON

为此,在对URL
/app/users/1
执行请求时,您将添加带有
application/json
值的HTTP头,以告知服务器客户端接受的表示

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


示例2

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

考虑一个URL,该URL定位用户的配置文件图片:
/app/users/1/profile picture

根据图像类型,响应的格式将是
image/jpeg
image/png
image/gif
,等等



这可能也很有见地。

以下是REST教父罗伊·T·菲尔丁(Roy T.Fielding)的话

§5.2.1.1资源和资源标识符

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

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

§5.2.1.2陈述

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

[……]

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

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