json API 中一个对象可以有两个 id 吗?



我正在使用一个 restful 网络服务,它以 json api 格式给出响应。有一个关系属性具有 id 和类型参数。根据 id 引用,它显示包含属性中的值。id 是在作为最终输出处理的两个请求之后创建的。在那之前,我将数据作为单个对象保存在数据库中。现在,当我使用 rest Web 服务从数据库中获取数据时,输出显示除包含的属性之外的所有属性。我相信这是因为它找不到参考,所以没有显示。但是在数据库中,所有值都完美地存在。我不确定 json api 是否支持关系属性的多个 ID。 例: 请求正文:

{
"data": {
"type": "orders",
"attributes": {
"name": "new order",
"updateDate": "",
"register":"yes",
"items":[
{
"description": "newly added item",
"type": "new item",
"amount": [
{
"deliveryfee": "123",
"mrp": "456"
}
]
}
]
}
}
}

预期响应正文:

{
"data": {
"type": "orders",
"id": "1",
"attributes": {
"name": "new order",
"updateDate": "",

},
"relationships": {
"items": {
"data": [
{
"type": "items",
"id": null
}
]
}
}
},
"included": [
{
"type": "items",
"id": null,
"attributes": {
"type": "new item",
"description": "newly added item",
"amount": [
{
"deliveryfee": "123",
"mrp": "456"
}
]
}
}
]
}

实际响应正文:

{
"data": {
"type": "orders",
"id": "1",
"attributes": {
"name": "new order",
"updateDate": "",

},
"relationships": {
"items": {
"data": [
{
"type": "items",
"id": null
}
]
}
}
}
}

我不完全确定我是否正确理解了你的问题。但让我试着回答。

JSON API 规范中使用typeid的组合来标识资源:

在给定的 API 中,每个资源对象的typeid对必须标识单个唯一的资源。

示例中使用null不是id的有效值:

idtype成员的值必须是字符串。

API 可以组合其内部数据库中使用的多个标识符,以构造用于 JSON API 文档中id的值,只要它对于给定类型是唯一的。从 JSON API 规范的角度来看,这将是一个有效的id值,只要它保证是唯一的。

{
"type": "posts":
"id": "post_id:5,locale:en"
}

API 可以将 ID 反序列化为两个不同的标识符:具有 id5的帖子和具有 id"en"的本地。这将是 API 的内部实现细节。消费者不应该关心一个含义是否编码在id值中。

您的问题中给出的请求和响应机构不适合在一起。两者都包含一个字段items。但在请求正文中,items字段是一个属性,而它是响应中的关系

似乎您正在尝试一次创建多个资源。JSON API 规范 v1 不支持此功能。在规范的 v1.1 的第三个候选版本中,通过官方扩展原子操作支持它。

最新更新