【发布时间】:2020-07-11 05:17:34
【问题描述】:
我有一个实体 contract,关系为 contract_contacts,应该以 JSON API 格式呈现。
为了更清楚,这里是我的实体的结构:
合同
- 身份证
- 姓名
合同联系方式
- contract_id
- contact_id
- 类型
- 评论
联系方式
- 身份证
- 姓名
可能的 JSON API 输出如下所示:
{
"data": {
"type": "contracts",
"id": "1",
"attributes": {
"name": "Contract 1"
},
"relationships": {
"contacts": {
"data": [
{
"type": "contract_contacts",
"id": "1"
},
{
"type": "contract_contacts",
"id": "2"
}
]
}
}
}
}
这种方法还不够好 - 您必须为关系创建额外的资源,您将在其中存储您的联系人和带有类型的评论。您必须包含 2 个级别的深度才能获得联系字段。同样在这种情况下,创建contract 前端应该同时使用这两种资源:
- 创建合同联系人并获取 ID
- 然后创建具有关系的合同 上面有id
第二种方法对我来说似乎hacky,因为它会使用meta,如何使用它取决于你。示例:
{
"data": {
"type": "contracts",
"id": "1",
"attributes": {
"name": "Contract 1"
},
"relationships": {
"contacts": {
"data": [
{
"meta": {
"comment": "comment 1",
"type": 1
},
"type": "contacts",
"id": "10"
},
{
"meta": {
"comment": "comment 2",
"type": 2
},
"type": "contacts",
"id": "11"
}
]
}
}
}
}
这种方法将简化前面示例中的 api 请求的混乱情况。
但是对于带有元字段的 POST/PUT/PATCH 是否正确,因为它们不应该从客户端(或不应该)更改?我对这部分感到困惑。
【问题讨论】: