更新 HATEOAS rels

Updating HATEOAS rels

假设我正在拍摄符合 HATEOAS 标准的 API。我提供端点 /cars/{id}。如果用户调用 GET /cars/12,他们会看到如下内容:

{
    "color": "Red",
    [...],
    "links": [
        { "rel": "driver", "href": "/people/123" },
        { "rel": "owner", "href": "/people/456" },
    ]
}

在此模型中,如何更新关系?比如说,汽车卖给了 /people/42PUT 是否改变了 owner href 的值?

您的 PUT 请求可以再次包含 links 属性 以获取更新。我想 PUT 请求正文应该与您从 GET 收到的内容几乎相同,但具有更新的所有者。

有很多可能性可以做到这一点。这个 API 不需要是一对一的数据表示,所以请注意:

  • 您可以使用 PUT 修改资源,如果需要,甚至可以修改链接
  • 您可以为汽车公开一个单独的 "owner" 资源,PUT 那里有一个新车主
  • 您可以向人们公开 "owned cars" 资源,然后 POST 向该集合公开,这会导致汽车易主

这取决于系统的分布方式,可能并非所有资源都在您的控制之下。人们可能会联合链接到第三方资源,在这种情况下,他们可能没有链接回您的系统等。

如果一切都在你的掌控之中,那么所有的选择都是可能的。

在 HATEOAS 中,服务器应通过某种超媒体格式(HAL,...)提供链接。客户端不应直接创建、更新或删除这些链接。您应该有 属性 所有者和 driver,客户端可以更新这些属性,但不能更新所有者或 driver 的详细信息的链接。那些指向所有者和 driver 详细信息的链接应该生成服务器,而不是客户端。服务器可能会随时间更改资源的 URL。