为了简单起见并避免命名冲突,我一直在像这样在我的记录资源中捆绑链接......
{
id: 211,
first_name: 'John',
last_name: 'Lock',
_links: [
{ rel: 'self', href: 'htttp://example.com/people/211' }
]
}
但是,我无法弄清楚如何在集合中实现链接。我花了很长时间在网上搜索示例,除了使用不太精简的HAL之外,我无法解决我的问题。
[
{id:1,first_name:.....},
{id:2,first_name:.....},
{id:3,first_name:.....},
"_links": "Cant put a key value pair here because its an-array"
]
这意味着我必须将数组包装在一个容器对象中。
{
people: [ {id:1,first_name:.....} ],
links: [ { rel:parent, href:.... ]
}
但是它与单一资源不同,所以我要让记录表现得像集合一样,并将其包装在一个容器中......
{
person: {
id: 211,
first_name: 'John',
last_name: 'Lock'
},
links:[
{ rel: 'self', href: 'htttp://example.com/people/211' }
]
}
从表面上看,这似乎是一个非常巧妙的解决方案。生成的 JSON 更深一层,但 HATEOAS 已经实现,所以没问题吧?一点也不。当我回到收藏品时,真正的刺痛来了。现在单个资源已经被包装在一个容器中以便与集合保持一致,现在必须更改集合以反映更改。这就是它变得丑陋的地方。十分难看。现在集合看起来像这样......
{
"people": [
{
"person": {
....
},
"links" : [
{
"rel": "self",
"href": "http://example.com/people/1"
}
]
},
{
"person": {
....
},
"links" : [
{
"rel": "self",
"href": "http://example.com/people/2"
}
]
}
],
"links" : [
{
"rel": "self",
"href": "http://example.com/people"
}
]
}
是否有更简单的解决方案来为集合实施 HATEOAS?或者我应该和 HATEOAS 告别,因为它迫使我过度复杂化数据结构?