javascript - 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 对象。
解决方案
我的回答有点太长了,所以我决定在这里写一个直接的答案。首先,我认为这两个评论都非常有帮助。有一个解决方案,让两个查询共享一个 HTTP 请求,这可能已经是您正在寻找的优化。此外,合并查询并非易事。这需要付出很多努力才能做到现场级别。不仅片段会使这变得困难,您还必须考虑变量。据我所知,没有公开的解决方案可以做到这一点,所以你必须自己做。我也没有听说过有这样的公司。我认为没有解决方案的事实表明这样做可能不值得。
我只能猜测您的问题,但是减少前端应用程序发送的查询量的另一种方法是使用片段。虽然您的片段不能有变量,但健康的组件结构仍然非常适合片段:
fragment PostHeader on Post {
title
description
}
fragment PostMeta on Post {
tags
author {
name
}
}
query {
post(id: 1234) {
...PostHeader
...PostMeta
}
}
推荐阅读
- bash - 一个班轮工作,但在 bash 脚本中不起作用,为什么?
- javascript - findTransformECC 标准的 opencv.js 问题
- java - 改进计算器循环的建议?
- oracle - ORA-12170: TNS: 发生连接超时 12170. 00000 - “TNS: 发生连接超时”
- reactjs - React Hook 在带有钩子的 react.js 中使用上下文错误
- perl - 不能使用数组作为参考 SnortSnarf HTMLMemStorage
- android - 如何返回上一个活动
- pyspark - 删除 spark 中 90% 列匹配的重复项
- wcf - TCP 错误代码 10048:每个套接字地址(协议/网络地址/端口)通常只允许使用一次
- router - Zabbix- 来自 SNMP 监控主机的 Ping 检查