多字段解析器使用不同的查询参数解析相同的其余API

时间:2019-05-16 06:37:19

标签: graphql graphql-java

我们正计划将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 =电话,地址

如何解析两个字段,这些字段期望来自同一休息服务的数据。我想要类似客户端请求电话时的内容,然后我需要将请求参数中的字段作为电话单独发送而没有地址。我们能做到吗?还是有其他方法来定义架构来解决此问题?

1 个答案:

答案 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/