【问题标题】:Can there be two ids for an object in json apijson api中的一个对象可以有两个id吗
【发布时间】:2021-02-15 21:19:57
【问题描述】:

我正在使用一个以 json api 格式提供响应的 restful web 服务。有一个具有 id 和类型参数的关系属性。根据 id 引用,它会在包含的属性中显示值。 id 是在作为最终输出处理的两个请求之后创建的。直到那时我将我的数据作为一个对象保存在数据库中。现在,当我使用 rest webservice 从数据库中获取数据时,输出显示除了包含的所有属性。我相信这是因为它无法找到参考,所以没有显示。但在数据库中,所有值都完美呈现。我不确定 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
                    }
                ]
            }
        }
    }
}

【问题讨论】:

    标签: java rest web-services json-api


    【解决方案1】:

    我不确定我是否正确理解了您的问题。不过让我试着回答一下。

    typeid 的组合在 JSON API specification 中用于标识资源:

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

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

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

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

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

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

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

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

    【讨论】:

    • 正确,由于业务用例,项目是一个单独的实体,我们必须以关系的形式将其合并为一个单一的响应。我将尝试与 v1.1 相同。谢谢
    猜你喜欢
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 2018-04-11
    • 2016-12-15
    • 2017-08-15
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多