Drupal 8 jsonapi:如何更改返回的json关系包含数组的结构?

问题描述 投票:0回答:2

我正在向 jsonapi 节点端点发送请求,并使用以下参数包含这些节点的用户(帖子作者数据)和用户图片(头像)的“关系”对象:

include=uid,uid.user_picture

这将向我返回节点的 json 数据以及集中在一起(无论类型如何)到“包含”数组中的所有关系对象。默认情况下,包含的数组最终看起来像这样:

"included": [
        {
            "type": "user--user",
            "id": "4c717273-f903-4ffa-abe2-b5e5709ad727",
            "attributes": {
                "display_name": "cherylm1234",
               ...etc...
            }
        },
        {
            "type": "file--file",
            "id": "4c717273-f903-4ffa-abe2-b5e5709ad727",
            "attributes": {
                "filename": "Cheryl-Fun.jpg",
               ...etc...
            }
        }
    ]

上下文:我们正在尝试将 jsonapi 与 iOS 应用程序作为客户端/消费者集成。

我的问题:很难在iOS客户端中为这些关系编写数据模型(无需循环和排序每个响应),因为它们都集中到“包含”数组的同一级别中。还有一个问题是每个“类型”都有自己的一组属性/字段,因此 iOS 中的数据模型需要基于“类型”构建。

问题:是否可以更改此结构,以便所有包含的对象按类型排序?

我希望“包含”数组由“类型”索引,其中该类型的所有对象都将位于该索引内。也许是这样的:

included['user--user'] = [
    {user-object},
    {user-object},
    ...etc.
],
included['file--file'] = [
    {file-object},
    {file-object},
    ....etc.
],

我假设这需要一个带有某种钩子的自定义模块,我可以在将数据返回到 iOS 应用程序之前对数据进行循环和排序。但是,还没有找到任何关于这种类型的 json 响应修改的文档。

任何帮助将不胜感激。

drupal json-api
2个回答
1
投票

Drupal 实现了 JSON:API 规范。该规范指定了资源应如何编码。如果它作为主要数据返回或作为关系资源包含在内。

如果您希望以其他格式返回数据,您需要按照另一个规范在 Drupal 中实现自己的 REST API。

但是,如果这只是管理客户端中的数据,我建议使用 JSON:API 规范的现有库之一。 jsonapi.org/implementations/ 提供了实现列表。该页面上列出的 JSONAPI Swift 包 似乎维护得很好。


0
投票

JSONAPI Include 模块 执行与所要求的类似的操作。它将包含的对象嵌入到 JSON 响应的

data
部分中的相应位置。

© www.soinside.com 2019 - 2024. All rights reserved.