Как должны быть реализованы ссылки в стиле HATEOAS для коллекций RESTful JSON?
Чтобы упростить задачу и избежать именных коллизий, яя связывал ссылки в моих ресурсах записи вот так ...
{
id: 211,
first_name: 'John',
last_name: 'Lock',
_links: [
{ rel: 'self', href: 'htttp://example.com/people/211' }
]
}
Тем не менее, я могуt понять, как реализовать ссылки в коллекциях. Я потратил много времени на то, чтобы копаться в Интернете для примеров и других, чем использование не так скудноHAL I 'Я не могу решить мою проблему.
[
{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 на прощание за то, что заставил меня слишком усложнить структуру данных?