Чтобы все было просто и чтобы избежать коллизий, я связывал ссылки в своих ресурсах записи, например...
{
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:
},
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 на прощание, заставив меня усложнить структуру данных?