javascript - Graphql 将多个查询合并(合并)为一个?

标签 javascript graphql

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

let query3 = mergeQueries(query1, query2);

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

假设我有这样的查询:

输入查询1:

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

输入查询2:

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

那么我希望结果 query3 是:
结果查询3:

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

这与 lodash _.merge() 对 JSON 对象的功能相同,但随后使用 GraphQL 查询而不是 JSON 对象。

最佳答案

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

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

fragment PostHeader on Post {
  title
  description
}

fragment PostMeta on Post {
  tags
  author {
    name
  }
}

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

关于javascript - Graphql 将多个查询合并(合并)为一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54744066/

相关文章:

typescript - 使用 eslint 从 graphql 解析器返回什么严格的 typescript 类型?

javascript - 使用正则表达式在 JavaScript 中查找最长的重复子字符串

javascript - Webstorm 2016.1无法打开js文件

php - 设计用户界面时有趣的计算内容

reactjs - 使用 Graphql、React 的映射函数

meteor - Apollo/GraphQl-类型必须为输入类型

c# - 错误 : The type or name space "GraphQLRequest" could not be found

javascript - 将递增变量添加到 Html Select 的 Id

javascript - 如何将数组从 ["1","2","3","4"] 转换为 [1,2,3,4]?

c# - 是否可以在 GraphQL 中发送具有多个值的 Enum