Когда моделируются отношения ресурсов, классический пример дает для articles
и comments
. Это становится простым для моделирования, потому что:
- статьи могут быть однозначно идентифицированы: / Articles / 1
- комментариев можно однозначно идентифицировать: / comments / 2
- их отношения могут быть предоставлены как / article / 1 / comments, в которых будут возвращаться только комментарии к этой статье
Но как справиться со случаем, когда связанный ресурс существует только в контексте родителя?
Например, order
и items
:
- заказ может быть однозначно идентифицирован / orders / 123
- элементы в этом порядке существуют только как / orders / 123 / items
- и НЕ как / items
В JSON-API объекту взаимосвязи нужны "тип" и "id", чтобы указать связь:
"relationships": {
"links": {
"self": "http://example.com/orders/123/relationships/items",
"related": "http://example.com/orders/123/items"
},
"data": {
"type": <what goes here>,
"id": <what goes here>
}
}
Тип и идентификатор для данных должны соответствовать номеру заказа 123. Предполагая, конечно, что им не присваивается UUID или что-либо подобное из базы данных, поскольку они, по сути, являются составным ключом. Они существуют главным образом как комбинация внешних ключей.
Как с этим справиться?
Один из вариантов отношения - использовать тип как order_item
, а идентификатор - как хеш или что-то с разделением строк, объединяя идентификатор заказа и идентификатор элемента. (например, 123_abc). 123 Я получаю от заказа, и ABC я получаю от товара в заказе.
Есть ли другой способ, кроме того, чтобы вообще избегать необходимости обеспечивать связь с ресурсами?