graphql - 多个字段解析器使用不同的查询参数解析相同的 REST API
问题描述
我们计划使用 graphql 进行编排(例如,UI 客户端调用 graphql 服务,该服务转到多个 rest 端点并返回结果)。这里的问题是来自一个休息端点,我们必须根据客户端请求的字段传递不同类型的查询参数。
我们使用 spring-boot-graphql 和 graphql-java-tools 库来初始化 graphql
type Query{
user(id: ID): User
}
type User{
phone: [Phone]
address: [Address]
}
type Phone{...}
type Address{...}
我的代码解析用户字段并调用 rest 端点以在单个调用中获取电话和地址信息,例如 https:restservice.com\v1\user\123?fields=phone,address
如何解析两个期望来自同一休息服务的数据的字段。我想要像客户端请求电话时那样的东西,然后我需要将请求参数中的字段作为电话单独发送而没有地址。我们可以这样做吗?或者有没有其他方法来定义模式来解决这个问题?
解决方案
query {
user(userId : "xyz") {
name
age
weight
friends {
name
}
}
}
了解字段选择集有助于提高 DataFetchers 的效率。例如,在上面的查询中,假设用户字段由 SQL 数据库系统支持。数据获取器可以提前查看字段选择集并使用不同的查询,因为它知道调用者想要朋友信息以及用户信息。
DataFetcher smartUserDF = new DataFetcher() {
@Override
public Object get(DataFetchingEnvironment env) {
String userId = env.getArgument("userId");
DataFetchingFieldSelectionSet selectionSet = env.getSelectionSet();
if (selectionSet.contains("user/*")) {
return getUserAndTheirFriends(userId);
} else {
return getUser(userId);
}
}
};
https://www.graphql-java.com/documentation/v12/fieldselection/
推荐阅读
- java - Android 应用程序未运行。模拟器说它一直在关闭
- javascript - 使用 DynamoDB 的 LocalSecondaryIndexes 出现“键架构太大”错误?
- javascript - 如何在外部 JS 中写出今天的特定格式
- php - 当你给一个数组赋值而索引为空时会发生什么?
- javascript - express-validator isAfter 总是假的
- c# - 如何将安装程序单选按钮对话框中的输入用作文件系统 DefaultLocation 的一部分的变量
- python - 有没有办法错开或躲避多个 matplotlib.plot 误差线?
- java - Android File.listFiles() 返回 null
- python - 我只能在python中将某些变量设置为true时记录吗?
- c++ - 我的代码无法将输入验证为整数