我正在尝试使用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调用?
答案 0 :(得分:0)
如果您说完后看到HATEOS返回的信息,
GET: http://localhost:8080/api/customer/1
是
{
"name": Frank,
"_links": {
"address": {
"href": "http://localhost:8080/api/customer/1/address"
}
}
}
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
您还可以创建一个链接列表,并继续将许多此类链接添加到该列表中,然后将该列表添加到您的对象中。
希望这对您有帮助!