当对资源关系进行建模时,给出的经典示例是针对articles
和comments
的。建模起来很简单,因为:
但是如何处理相关资源仅存在于父级上下文中的情况?
例如order
和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>
}
}
数据的类型和ID必须与订单号123相关。当然,假设它们实际上不是一个复合键,因此不会从数据库中分配给它们UUID或类似物。它们主要作为外键组合存在。
如何处理?
该关系的一个选项是将type用作order_item
,将id用作订单ID和商品ID的散列或分隔字符串的字符串。 (例如123_abc)。 123我从订单中得到,abc从订单中得到。
除了完全避免提供资源链接之外,还有其他方法吗?
答案 0 :(得分:1)
每个资源都必须根据JSON API规范由type
和id
组合唯一标识:
标识
每个资源对象必须包含一个id成员和一个type成员。 id和type成员的值必须为字符串。
在给定的API中,每个资源对象的类型和ID对必须标识一个唯一的资源。 (由一台或多台服务器控制的一组URI构成一个API。)
https://jsonapi.org/format/#document-resource-object-identification
因此,您不仅需要resource linkage的ID,而且还需要建立任何有效的响应,包括此类资源。
但是没有关于如何为每种类型生成唯一ID的规则。如果您的数据模型不包含ID,则将唯一的订单ID与唯一的商品ID组合在一起以获取订单中每个商品的唯一ID似乎是一种好方法。