物事をシンプルに保ち、名前の衝突を避けるために、私はこのようにレコード リソースにリンクをまとめています...
{
id: 211,
first_name: 'John',
last_name: 'Lock',
_links: [
{ rel: 'self', href: 'htttp://example.com/people/211' }
]
}
ただし、コレクションにリンクを実装する方法がわかりません。私は例を求めて Web をトロールするのに長い時間を費やしましたが、あまり無駄のない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 は 1 レベル深くなりますが、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 に別れを告げるべきでしょうか?