graphQL新手,我使用以下架构:
type Item {
id: String,
valueA: Float,
valueB: Float
}
type Query {
items(ids: [String]!): [Item]
}
我的API可以在每种类型的单个请求(A和B)上返回多个项目,但不能同时返回两个项目,即:
类型A的REST请求: api/a/items?id=[1,2]
响应:
[
{"id":1,"value":100},
{"id":2,"value":30}
]
类型B的REST请求: api/b/items?id=[1,2]
响应:
[
{"id":1,"value":50},
{"id":2,"value":20}
]
我想将这两个api endpoints 合并到一个graphQL响应中,如下所示:
[
{
id: "1",
valueA: 100,
valueB: 50
},
{
id: "2",
valueA: 30,
valueB: 20
}
]
Q: 如何编写一个解析器,为每种类型运行 single fetch(获取多项响应),确保在查询缺少类型时不会触发不必要的提取,即:
{items(ids:["1","2"]) {
id
valueA
}}
上面的示例应该只获取 api/a/items?id=[1,2]
并且graphQL响应应该是:
[
{
id: "1",
valueA: 100
},
{
id: "2",
valueA: 30
}
]
1 回答
所以我假设你使用JavaScript作为语言 . 在这种情况下,您需要的不是使用直接查询,而是使用片段
所以查询将成为
接下来在解析器中,我们需要访问这些片段以查找作为片段一部分的字段,然后根据这些片段解析数据 . 下面是一个简单的nodejs文件
如果我们运行它,输出是
如果我们将查询更改为
输出是
因此,这演示了如何在不需要字段时避免调用api A / B.正如你所要求的那样