我试图找到最佳实践,以便在Restful API中创建多对多关系。用例非常简单,但我找不到
“干得好。
在我们的模型中
小孩
与多对多关系相关的
守护者
在关系表中,
类型
(父母、保姆、紧急情况等)和
忙碌的
(布尔值)。
守护者
现存的
小孩
,但现有
守护者
可以与另一个链接
小孩
.
今天,我们这样做
POST kids/{kidID}/guardians
{
"type": "parent"
"active": false
"guardian": {
"first_name": "foo"
"last_name": "bar"
}
}
这将创建
守护者
把它加到孩子身上。但是,使用这种方法,我们无法处理我要添加现有
守护者
小孩
下面是我找到的答案,以代表这一点,但我不知道哪一个是最好的(和restful的)方式(可能没有一个是好的…):
解决方案1-保持端点不变
但把非强制性
身份证件
现场
守护者
如果
身份证件
如果为空,则API必须创建ressource,否则只需检索它并在需要时更新值。
POST kids/{kidID}/guardians/
{
"type": "parent"
"active": false
"guardian": {
"id": "ab65f263-dd3d-bbc6-8b7b-57a3b4b26c21"
}
}
# Create the Guardian
POST guardians/
{
"first_name": "foo"
"last_name": "bar"
}
# This method can only "link" the models
POST kids/{kidID}/guardians/
{
"type": "parent"
"active": false
"guardian_id": "ab65f263-dd3d-bbc6-8b7b-57a3b4b26c21"
}
[已编辑]解决方案2.5-创建与PUT的关系
如前所述,您必须创建监护人,但为了添加关系,您需要创建
PUT kids/{kidID}/guardians/{guardianID}
{
"type": "parent"
"active": false
}
辅助解决方案
:在第二种选择中,我们可以通过以下方式更改ressource的URI:
POST kids/{kidID}/kid-guardians/
因为它并没有真正发布“监护人”资源,而是儿童监护人资源(关系)。我不太喜欢它,因为使用旧URI,我们可以更容易地假设
GET kids/{kidID}/guardians/
监护人
与孩子有关,但不是
DELETE kids/{kidID}/guardians/{guardianID}
将删除关系,而不是
守护者
.
所以,你知道,我真的迷路了,非常感谢你的帮助。
顺致敬意,