我有一些问题重新定位HAL以及链接和取消链接资源的预期行为。我无法找到以下问题的指南或规范。
我试着做一个简单的例子,希望这能帮助更多的人(这是一个休息和管理多对多关系的问题,在这里也可以作为例子How to handle many-to-many relationships in a RESTful API?)
想想一支球队和球员:球队有很多球员,球员属于很多球队。 休息服务以获得玩家和团队的名单/玩家和/团队,我可以向/ teams / {id}或/ players / {id}询问特定团队或玩家。
所以询问/团队的GET我会得到类似的东西:
{
"count": 2,
"_embedded": {
teams: [{
"name": "red team",
"_links": {
"self": {"href": "/teams/RT"},
"players": {"href": "/teams/RT/players"}
}
}, {
"name": "blue team",
"_links": {
"self": {"href": "/teams/BT"},
"players": {"href": "/teams/BT/players"}
}
}]
},
_links: {
"self": {"href": "/teams"}
}
}
我正在考虑使用自我链接作为关键,以独特的方式识别资源 所以/ teams / RT或/ players / 1是表示Red Team和player 1的资源实例的键。
如果我想了解红队的球员,我会获得链接'球员'红色团队资源,所以当我获得/团队/ RT /玩家时,重新组合将是:
{
"count": "2",
"_embedded": {
players: [{
"name": "Jack",
"_links": {
"self": {"href": "/teams/RT/players/02"},
"myself": {"href": "/players/18"}
}
}, {
"name": "George",
"_links": {
"self": {"href": "/teams/RT/players/1"},
"myself?": {"href": "/players/3"}
}
}]
},
_links: {
"self": {"href": "/teams/RT/player"}
}
}
问题(作为客户休息api消费者):
在每个嵌入式资源的自身中,我期望链接有助于理解嵌入式资源与相关资源之间的关系。
还需要取消列表中的资源链接! (在这个例子中,从Team Red中删除Jack,可以使用DELETE / teams / RT / players / 0完成。)
它是否正确?或者哪个应该是自我href内容?
应该更正确/球队/ RT /球员/ 18或/球队/ RT /球员/ 0? (指玩家ID,或者关系的ID?)
我希望有一个链接能够区分/比较嵌入式相关资源,以及通用/资源/服务列表(或任何其他关系,例如团队组件)产生的通用资源蓝光!!) 在这个例子中,我自己?'使用href / players / 18它可以比较/ player GET中列出的资源。你知道吗这有什么指导方针吗?还是我在问题1中误解了自我的意思。?
将现有资源(例如/ players / 8)链接到现有团队(例如/ teams / BT),我可以通过多种方式进行,但我不知道哪个可能是最有效的一个(我知道它与多对多的关系,所以它可能还取决于谁拥有这种关系):
注意:
我不想在api服务中介绍' membership'的含义,因为它是db所需的连接表的抽象,以维持多对多的关系。在这个例子中,api消费者应该只知道一个团队与玩家有关系,玩家作为一个关系团队与团队。
这个问题在一对多的关系中是一样的,从父亲到孩子都在看。例如:玩家有一张或多张他的照片。 所以/ players / 3有:
_links:{ 图片:{href:' / players / 3 / pictures'}, 自我:{href:' / players / 3'} }
如果我想将/ pictures / 193识别的图片添加到播放器3的现有图片列表中.... PATCH / players / 3 / pictures? 玩家3的图片列表将由玩家/ 3 /图片的GET解决:
{
"count": 2,
"_embedded": {
pcitures: [{
"url": "http://server-storage.com/images/pic_scan_12.jpg",
"_links": {
"self": { "href": "/players/3/pictures/845"},
"myself?": {"href": "/pictures/845"}
}
}, {
"url": "http://server-storage.com/images_old/john_smith.jpg",
"_links": {
"self": { "href": "/players/3/pictures/293"},
"myself?": {"href": "/pictures/293"}
}
}]
},
_links: {
"self": {"href": "/players/3/pictures"}
}
}