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

时间:2013-01-06 17:58:44

标签: rest hateoas hypermedia

我在REST上阅读的所有文章和书籍都重复了为您的超媒体响应添加“自我”重要链接的重要性,但他们对原因和用例都很清楚。

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

2 个答案:

答案 0 :(得分:17)

主要原因是客户端(甚至某些服务器)不存储具有表示的表示的位置。例如,如果您wget http://.../foo.json,表示将保存到磁盘,但获取它的URI将不会。如果表示中没有嵌入“自”链接,则会导致两个问题:

  1. 文档中的相对链接可能不再具有要解决的基础,因此将“破坏”;以及

  2. 客户端没有嵌入式概念,例如如果文档修改它,则将文档PUT返回给服务器。少数客户独立维护这些信息,但大多数客户不这样做。

  3. 重要的是要理解表示可能在HTTP会话之外有生命,甚至可以通过其他协议(电子邮件,FTP,书籍等)传输。因此,经验丰富的媒体类设计师通常会包含“自我”链接。

答案 1 :(得分:1)

返回资源时,可能不是完整的表示形式。 self链接应提供访问该完整表示的网址

e.g。

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"
    }
  ]
}