我是 REST 新手,刚开始阅读一些教程。
真正让我感到困惑的一件事是:以 txt/xml/json 形式出现的是什么:资源还是资源表示? 一定是后者,对吧?由于资源可以是视频、音频或其他 MIME 类型。
以下面的例子为例。假设我得到的描述类似于“RESTful 服务,其中用户是使用以下 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“对象”?
如果 User 有图像属性怎么办? HTTP 将以何种形式向我传送哪种“包”:图像本身还是图像链接?
编辑
另一个例子:
这里我应该理解为返回的资源本身是一个 XML 文件,或者资源不是 XML 文件,但嵌入在 XML 资源表示中的一些数据是?
如果我想要的资源包含图片、视频等怎么办?这些不是可以嵌入 XML 或 JSON 格式的文本数据——在那种情况下,我能得到什么?
最佳答案
资源
REST 资源的概念是抽象的,您可以将其理解为由服务器提供的 URL 标识的东西。
资源可以是用户、用户列表、客户、文件或应用程序的任何实体。
例如,将用户视为具有以下属性和值的资源:
- 编号:1
- 名字:约翰
- 姓氏:Doe
- 电子邮箱:john.doe@example.com
网址
URL (Uniform Resource Locator)只是标识资源,即资源在服务器中的位置。
例如,当 URL /app/users/1
找到 ID 为 1
的用户时,URL /app/users
找到应用程序中的所有用户。
HTTP 方法
REST 独立于协议(protocol),但是,如果您使用的是 HTTP,则可以对使用 HTTP 方法访问 URL 的资源执行操作,例如 GET
, POST
, PUT
和 DELETE
.
例如,当您执行 GET
到 URL /app/users/1
,您将获得 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。
要做到这一点,在执行 GET
时到 URL /app/users/1
,您将添加 HTTP header Accept
使用 application/json
值来告诉服务器客户端接受的表示形式。
因此,服务器将返回表示为 JSON 的资源。响应将包含 Content-Type
带有 application/json
值的 header ,表示响应的内容是一个 JSON。
示例 2
例如,除了 JSON 和 XML 之外,资源还可以表示为图像或视频。
考虑一个定位用户个人资料图片的 URL:/app/users/1/profile-picture
。
根据图像类型,Content-Type
响应的格式将是 image/jpeg
、image/png
、image/gif
等
这answer也可能是有见地的。
关于json - REST 中的资源和资源表示有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33706191/