我在客户端使用self
href
来自我的 HAL 资源的 CRUD 操作找到正确的路径。在单(吨)资源中,这工作正常(请参阅下面的地址资源,_links
包含self
href
在嵌入资源中)但是当涉及到集合时,情况就不同了。当_links
集合位于 时,不会呈现集合的_embedded
。
早些时候,我通过阅读第一个孩子的 url 来解决这个问题。但这还不够。如果集合是空的,我只有一个空数组,不可能像这样提取 url。如果我想在集合中创建一个新项目,我希望我的客户POST
通过读取self
href
from知道在哪里发送数据_links
。_links
像这样将其包含到我的收藏中是否是个好主意:
{
"_links": {
"self": {
"href": "http://example.com/api/v1/users/1"
}
},
"_embedded": {
"contacts": {
现在我可以在这里访问 self href:
"_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
对于联系人集合,我将在数组中有指向我的集合端点的链接,并将联系人本身放在_embedded
.