更新 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/42
。 PUT
是否改变了 owner
href
的值?
您的 PUT
请求可以再次包含 links
属性 以获取更新。我想 PUT
请求正文应该与您从 GET
收到的内容几乎相同,但具有更新的所有者。
有很多可能性可以做到这一点。这个 API 不需要是一对一的数据表示,所以请注意:
- 您可以使用
PUT
修改资源,如果需要,甚至可以修改链接 - 您可以为汽车公开一个单独的 "owner" 资源,
PUT
那里有一个新车主 - 您可以向人们公开 "owned cars" 资源,然后
POST
向该集合公开,这会导致汽车易主
这取决于系统的分布方式,可能并非所有资源都在您的控制之下。人们可能会联合链接到第三方资源,在这种情况下,他们可能没有链接回您的系统等。
如果一切都在你的掌控之中,那么所有的选择都是可能的。
在 HATEOAS 中,服务器应通过某种超媒体格式(HAL,...)提供链接。客户端不应直接创建、更新或删除这些链接。您应该有 属性 所有者和 driver,客户端可以更新这些属性,但不能更新所有者或 driver 的详细信息的链接。那些指向所有者和 driver 详细信息的链接应该生成服务器,而不是客户端。服务器可能会随时间更改资源的 URL。