超媒体API中自链接的重要性是什么?

22

我读过的所有关于REST的文章和书籍都反复强调了在超媒体响应中添加“self” rel链接的重要性,但它们对原因和用例都没有详细说明。

为什么应该添加自我链接以及它如何有用?

2个回答

20
主要原因是客户端(甚至有些服务器)不会将表示的位置与表示保存在一起。例如,如果您使用 wget http://.../foo.json 命令下载一个表示,那么表示会被保存到磁盘上,但是它被获取时的URI则不会保存下来。如果表示中没有嵌入 "self" 链接,则会导致两个问题:
  1. 文档中的相对链接可能无法根据基础URL进行解析,并因此无法正常工作;

  2. 如果客户端对表示进行了修改,它将没有内置的概念知道在哪里向服务器发出 PUT 请求。一些客户端会独立维护这些信息,但大多数不会。

重要的是要理解,表示可能会在HTTP交互之外存在很长时间,甚至可以通过其他协议进行传输(电子邮件、FTP、书籍等)。因此,经验丰富的媒体类型设计人员通常会包含一个 "self" 链接。

4

当返回一个资源时,可能不是完整的表示。 self 链接应该提供一个URL来访问完整的表示。

例如:

GET /objects

[
  {
    "name": "tech",
    "links": [
      "rel": "self",
      "href": "/objects/1"
    ]
  },
  {
    "name": "book",
    "links": [
      "rel": "self",
      "href": "/objects/2"
    ]
  }
]

GET /objects/1

{
  "name": "tech",
  "ratio": 1,
  "precision": 2,
  "links": [
    {
      "rel": "self",
      "href": "/objects/1"
    }
  ]
}      

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接