首页 > 解决方案 > Graphql 将多个查询合并(组合)为一个?

问题描述

我正在尝试使用 JavaScript 将多个 Graphql 查询组合成一个查询。
我正在寻找这样的东西:

let query3 = mergeQueries(query1, query2);

我们不会事先知道将合并哪些查询。

假设我有这样的查询:

输入查询1:

{
  post(id: 1234) {
    title
    description
  }
}

输入查询2:

{
  post(id: 1234) {
    tags
    author {
      name
    }
  }
}

然后我希望结果 query3 是:
结果 query3:

{
  post(id: 1234) {
    title
    tags
    description
    author {
      name
    }
  }
}

这将与 lodash_.merge()对 JSON 对象的功能相同,但使用 Graphql 查询而不是 JSON 对象。

标签: javascriptgraphql

解决方案


我的回答有点太长了,所以我决定在这里写一个直接的答案。首先,我认为这两个评论都非常有帮助。有一个解决方案,让两个查询共享一个 HTTP 请求,这可能已经是您正在寻找的优化。此外,合并查询并非易事。这需要付出很多努力才能做到现场级别。不仅片段会使这变得困难,您还必须考虑变量。据我所知,没有公开的解决方案可以做到这一点,所以你必须自己做。我也没有听说过有这样的公司。我认为没有解决方案的事实表明这样做可能不值得。

我只能猜测您的问题,但是减少前端应用程序发送的查询量的另一种方法是使用片段。虽然您的片段不能有变量,但健康的组件结构仍然非常适合片段:

fragment PostHeader on Post {
  title
  description
}

fragment PostMeta on Post {
  tags
  author {
    name
  }
}

query {
  post(id: 1234) {
    ...PostHeader
    ...PostMeta
  }
}

推荐阅读