将HATEOAS链接映射到实际的API链接

时间:2018-08-07 09:25:29

标签: spring-boot spring-hateoas hal-json

我正在尝试使用Spring Boot实现HATEOAS Rest Client。

现在,我陷入了需要将HATEOAS转换为实际API URI的地步。

如果我发布客户类型为的新对象,如:

{
    "name": "Frank",
    "address": "http://localhost:8080/address/23"
}

然后我收到对http://localhost:8080/api/customer/1`的请求,HATEOAS给了我类似的东西

{
    "name": Frank,
    "_links": {
        "address": {
            "href": "http://localhost:8080/api/customer/1/address"
        }
    }
}

是否可以将http://localhost:8080/api/customer/1/address形式的链接转换为http://localhost:8080/api/address/23之类的API调用?

1 个答案:

答案 0 :(得分:0)

如果您说完后看到HATEOS返回的信息,

GET: http://localhost:8080/api/customer/1

{
"name": Frank,
"_links": {
    "address": {
        "href": "http://localhost:8080/api/customer/1/address"
    }
  }
}

根据Understanding HATEOS

It's possible to build more complex relationships. With HATEOAS, the output makes it
easy to glean how to interact with the service without looking up a specification or 
other external document

这意味着,

收到带有

的资源详细信息之后

http://localhost:8080/api/customer/1 使用接收到的资源还可以进行哪些其他操作,这些操作将更容易显示/通过对您的服务/应用程序的访问单击,

在这种情况下,HATEOS可以找到一个链接http://localhost:8080/api/customer/1/address,一旦您拥有customer/1,就可以访问该链接;如果需要,可以从那里访问customer/1的地址与/customer/1/address

类似地,如果您拥有/customer/1的{​​{1}}详细信息,那么在occupation链接下面将有另一个链接称为address

因此,如果http://localhost:8080/api/customer/1/occupation依赖于address,即没有customer就不会有address,那么您的API端点必须是customer而不是直接{ {1}}。

但是,在理解了HATEOS这样的响应背后的这些标准和逻辑之后,如果您仍然希望使用自己的链接,而这些链接可能与您可以使用的HATEOS逻辑不符,那么

Link Object由HATEOS的/api/customer/1/address界面提供。

示例: 对象类型为/api/address/23,例如:

LinkBuilder

您还可以创建一个链接列表,并继续将许多此类链接添加到该列表中,然后将该列表添加到您的对象中。

希望这对您有帮助!