【问题标题】:express-graphql: How to remove external "data" object layer.express-graphql:如何删除外部“数据”对象层。
【发布时间】:2018-10-18 23:01:07
【问题描述】:

我正在用 GraphQL 替换现有的 REST 端点。

在我们现有的 REST 端点中,我们返回一个 JSON 数组。

[{
    "id": "ABC"
  },
  {
    "id": "123"
  },
  {
    "id": "xyz"
  },
  {
    "id": "789"
  }
]

GraphQL 似乎将数组包装在两个额外的对象层中。有什么办法可以去掉“数据”和“客户端”层?

响应数据:

{
  "data": {
    "Client": [
      {
        "id": "ABC"
      },
      {
        "id": "123"
      },
      {
        "id": "xyz"
      },
      {
        "id": "789"
      }
    ]
  }
}

我的查询:

{
  Client(accountId: "5417727750494381532d735a") {
    id
  }
}

【问题讨论】:

    标签: express graphql express-graphql


    【解决方案1】:

    没有。这就是 GraphQL 的全部目的。拥有单个 endoint 并允许用户通过指定查询格式而不是 REST API 的输入来获取不同类型/粒度的数据,然后将它们映射到返回的 JSON 输出。

    'data' 充当您查询的不同实体的父级/根级容器。如果返回的 JSON 数据中没有这些键,将无法分离相应的数据。例如

    您的上述查询可以修改为包含另一个实体,例如所有者,

    {
      Client(accountId: "5417727750494381532d735a") {
        id
      }
      Owner {
        id
      }
    }

    在这种情况下,输出将类似于

    {
      "data": {
        "Client": [
          ...
        ],
        "Owner": [
          ...
        ]
      }
    }

    如果 JSON 输出中没有 'Client' 和 'Owner' 键,就无法分离对应的数组值。

    在您的情况下,您只能通过在返回的输出上执行 data.Client 来获取数组。

    【讨论】:

      猜你喜欢
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      • 2021-12-20
      • 2018-08-28
      • 1970-01-01
      相关资源
      最近更新 更多