Если у вас есть отношение «один ко многим» между quote
и product
, это должно быть отражено в вашей полезной нагрузке.Отношение должно быть в relationships
ключе объекта ресурса.A resource linkage
должно быть под data
ключом relationships object
.Поэтому оба ваших варианта, представленные как 2a и 2b, не соответствуют спецификации.Допустимая полезная нагрузка для создания ресурса, имеющего отношение, будет выглядеть следующим образом:
{
"data": {
"type": "accounts",
"attributes": {
"foo": "bar"
}
relationships: {
"product": {
"data": {
"type": "products",
"id": "acme_1"
}
}
}
}
}
Обратите внимание, что в примере показан объект отношения для отношения «один к».Если учетная запись может иметь много product data
свойство объекта отношения должно быть массивом:
{
"data": {
"type": "accounts",
"attributes": {
"foo": "bar"
}
relationships: {
"product": {
"data": [
{
"type": "products",
"id": "acme_1"
},
{
"type": "products",
"id": "acme_2"
},
]
}
}
}
}
С точки зрения спецификации JSON API это не имеет значениякак клиент знает, какой идентификатор связать.В спецификации указано , что id
должен быть строкой и что комбинация type
и id
"должна идентифицировать один уникальный ресурс".
Конечно,Клиент должен знать, какой ресурс должен быть связан с созданным.Это полностью зависит от приложения, как реализовать это.Это может быть жестко закодировано или извлечено из серверной части.Из соображений масштабируемости и ремонтопригодности я бы рекомендовал не кодировать его жестко, если есть вероятность его регулярного изменения.Но с точки зрения спецификации JSON API это имеет значение только в том случае, если указанный ресурс существует.В противном случае сервер должен вернуть 404 Not Found
.