更新HATEOAS rels

时间:2016-02-04 20:20:50

标签: rest api-design hateoas

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

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

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

3 个答案:

答案 0 :(得分:2)

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

  • 您可以使用PUT修改资源,如果需要,也可以修改链接
  • 您可以公开一个单独的"所有者"汽车的资源,以及PUT新的所有者
  • 你可以揭露一辆拥有汽车的汽车"来自人的资源,以及POST到该集合的资源,这会导致汽车更改所有者

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

如果一切都在您的控制之下,那么所有选项都是可能的。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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