我使用客户端HAL资源中的self
href
来查找CRUD操作的正确路径。在单个(吨)资源中,这工作正常(请参阅下面的地址资源,包含_links
self
的{{1}}包含在嵌入资源中)但当归结为集合时是一个不同的故事。当集合位于href
时,不会呈现集合的_links
。
之前我通过阅读第一个孩子的网址来解决这个问题。但这还不够。如果收集是空的我只有
一个空数组,没有可能像这样提取url。如果我想在集合中创建新项目,我希望我的客户通过阅读_embedded
中的POST
self
,了解使用href
发送数据的位置。将_links
包含在我的收藏中是不是一个好主意:
_links
现在我可以访问自我href:
{
"_links": {
"self": {
"href": "http://example.com/api/v1/users/1"
}
},
"_embedded": {
"contacts": {
最后,我总是通过将嵌入资源的链接添加到父资源来解决这个问题。所以在上面的例子中,我的响应对象看起来像这样:
"_links": {
"self": {
"href": "http://example.com/api/v1/users/1/contacts"
}
},
"_embedded": {
"contacts": [
{
"_links": {
"self": {
"href": "http://example.com/api/v1/users/1/contacts/2"
}
},
"id": "2",
"name": "John Smith"
},
{
"_links": {
"self": {
"href": "http://example.org/api/v1/users/1/contacts/3"
}
},
"id": "3",
"name": "Jane Doe"
}
],
}
},
"address": {
"_links": {
"self": {
"href": "http://example.com/api/v1/addresses/1"
}
},
"street": "Bakerstreet 11",
"postal code": "123456",
"city": "Some city",
"country": "Some country",
}
},
"id": "1",
"name": "John Doe"
}
所以无论我是否嵌入了资源,我总是知道它们的位置。对于联系人集合,我将在{
"_links": {
"self": {
"href": "http://example.com/api/v1/users/1"
},
"contacts": {
"href": "http://example.com/api/v1/users/1/contacts"
},
"address": {
"href": "http://example.com/api/v1/addresses/1"
}
},
"_embedded": {
"contacts": [
{
"_links": {
"self": {
"href": "http://example.com/api/v1/users/1/contacts/2"
}
},
"id": "2",
"name": "John Smith"
},
{
"_links": {
"self": {
"href": "http://example.org/api/v1/users/1/contacts/3"
}
},
"id": "3",
"name": "Jane Doe"
},
],
"address": {
"_links": {
"self": {
"href": "http://example.org/api/v1/addresses/1"
}
},
"street": "Bakerstreet 11",
"postal code": "123456",
"city": "Some city",
"country": "Some country",
}
},
"id": "1",
"name": "John Doe"
}
数组中添加指向我的集合终结点的链接,并在_links
中指定联系人本身。
答案 0 :(得分:5)
是。这样做不仅是好习惯;它是recommended by the HAL spec:
每个资源对象应该包含一个“自我”链接,该链接与IANA注册的“自我”关系(由RFC5988定义)相对应,其目标是资源的URI。
资源集合本身就是一种资源,不要忘记。