我正在更新RESTful API并且它已经在使用JSON API。
我想启用/quotes
的POST,但引号需要product
。
我的问题是:客户应该如何了解和识别与报价相关的产品?
以下是一些想法;我欢迎其他人。
/products
,在返回的列表中找到所需的产品,然后发送相关产品的id
。"acme_1"
等。对于选项2,代码可以作为attribute
或relationship
发送。也就是说,我们可以做到
// option 2a
"data": {
"type": "accounts",
"attributes": {
"foo": "bar",
"product_code": "acme_1"
}
}
// option 2b
"data": {
"type": "accounts",
"attributes": {
"foo": "bar"
}
relationships: {
"type": "products",
"id": "acme_1"
}
}
请发送想法,建议和/或阅读建议!
答案 0 :(得分:0)
如果quote
和product
之间存在一对多关系,则应在您的有效负载中反映出来。关系必须位于资源对象的relationships
键中。 resource linkage
必须位于data
的{{1}}密钥下。因此,显示为2a和2b的两个选项都不符合规范。创建具有关系的资源的有效负载如下所示:
relationships object
请注意,该示例显示了一对一关系的关系对象。如果帐户可以包含许多产品 {
"data": {
"type": "accounts",
"attributes": {
"foo": "bar"
}
relationships: {
"product": {
"data": {
"type": "products",
"id": "acme_1"
}
}
}
}
}
属性
关系对象必须是一个数组:
data
从JSON API规范的角度来看,客户端如何知道要关联的ID并不重要。 {
"data": {
"type": "accounts",
"attributes": {
"foo": "bar"
}
relationships: {
"product": {
"data": [
{
"type": "products",
"id": "acme_1"
},
{
"type": "products",
"id": "acme_2"
},
]
}
}
}
}
id
必须是字符串的spec only states,type
和id
"的组合必须标识单个唯一资源"。
当然,客户端必须知道应该将哪个资源与创建的资源相关联。它完全取决于应用程序如何实现那个。它可以是硬编码的,也可以从后端获取。出于可伸缩性和可维护性的原因,如果有可能定期更改,我建议不要对其进行硬编码。但是从JSON API规范的角度来看,只有引用的相关资源存在才有意义。否则服务器must return a 404 Not Found
。