我正在尝试使用 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/