graphql - 在一个查询中组装 graphql 查询,而无需重新编写解析器或定义
问题描述
我有 3 个调用 3 个不同服务的 graphql 查询:
{
individualQ{
name
}
addressQ{
address
}
contactQ{
phone
}
}
这 3 个查询中的每一个都有自己的解析器:
individualQ (root , args) {
const individual_options = getOption(cfg.INDIVIDUAL_ENDPOINT);
return axios(individual_options).then(res => res.data);
} ,
addressQ (root , args) {
const address_options = getOption(cfg.ADDRESS_ENDPOINT);
return axios(address_options).then(res => res.data);
} ,
contactQ (root , args) {
const contact_Options = getOption(cfg.CONTACT_ENDPOINT);
return axios(contact_Options).then(res => res.data);
}
实际上,我想创建一个组合三个查询的新查询。
我想找到一种方法如下:
personalInfo {
individualQ{
name
}
addressQ{
address
}
contactQ{
phone
}
}
所以我的要求就是
{
personalInfo
}
解决方案
如果您只想合并查询,则可以添加新类型和新查询。像这样的东西:
# Type definitions
type PersonalInfo {
individual: Individual
address: Address
contact: Contact
}
type Query {
personalInfo: PersonalInfo
# other queries
}
然后为这三个字段添加解析器:
const resolvers = {
PersonalInfo: {
individual (root , args) {
const individual_options = getOption(cfg.INDIVIDUAL_ENDPOINT);
return axios(individual_options).then(res => res.data);
} ,
address (root , args) {
const address_options = getOption(cfg.ADDRESS_ENDPOINT);
return axios(address_options).then(res => res.data);
} ,
contact (root , args) {
const contact_Options = getOption(cfg.CONTACT_ENDPOINT);
return axios(contact_Options).then(res => res.data);
},
},
Query: {
personalInfo: () => ({})
},
}
我们为查询返回一个空对象,因为我们的字段解析器正在做繁重的工作,但我们仍然需要返回一个对象,以便它们真正被触发(否则您将返回null
查询)。
如果您想将任何内容传递给解析器(例如,查询字段的参数),您可以根据需要通过返回的对象来实现。然后,该数据将作为传递给每个字段解析器的第一个参数(“根”值)可用。
旁注:如果您正在寻找一种在不选择子字段的情况下发出 GraphQL 请求的方法,那将是不可能的——在请求返回类型而不是返回类型的字段时,您始终必须准确请求所需的字段一个标量。
推荐阅读
- google-apps-script - “您无权调用 showModalDialog”
- reactjs - node-sass-chokidar 只会将一个文件夹而不是一个文件输出到我的 src 目录中
- python - OPC UA 服务器实现
- reactjs - ESLint 为 reactjs 数据组件抛出 no-unused-vars
- templates - 使用 Blaze Meteor.js 动态加载模板(部分)
- visual-studio - 在预览模式 SSRS 下执行时调试查询
- c# - 在 C# 中使用 OData 服务不起作用
- woocommerce - 最后如何验证我的自定义 WooCommerce 结帐字段?
- c - 某些输入的整数到二进制转换程序失败
- amazon-web-services - AWS SAM Deploy,如何找到 API Gateway 的 URL?