我们正计划将graphql用于业务流程(例如,UI客户端调用graphql服务,该服务会转到多个其他端点并返回结果)。这里的问题是从一个其他端点,我们必须根据客户请求的字段传递不同类型的查询参数。
我们使用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 =电话,地址
如何解析两个字段,这些字段期望来自同一休息服务的数据。我想要类似客户端请求电话时的内容,然后我需要将请求参数中的字段作为电话单独发送而没有地址。我们能做到吗?还是有其他方法来定义架构来解决此问题?
答案 0 :(得分:0)
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/