SpringBoot GraphQL初体验(三): 多个endpoint
背景
我这里的场景,会授权不同的用户,访问不同的资源。
业务上,是通过SpringBoot的切片方式,实现的根据访问的url来鉴权。
所以期望提供多个endpoint,每个endpoint访问自己的资源。
初体验
这里就没有用 graphql-spring-boot-starter中的提供服务的方法。
根据schema生成GraphQL
InputStream inputStream = GraphQueryService.class.getResourceAsStream("/schema/evaluation.graphqls");
String schema = IOUtils.toString(inputStream);
SchemaParser schemaParser = new SchemaParser();
TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.parse(schema);
RuntimeWiring runtimeWiring = RuntimeWiring.newRuntimeWiring()
.type("Query", builder -> {
// 下面的fieldName,要与schema中的保持一致。
builder.dataFetcher("getUserById", env -> {
int id = Integer.parseInt(env.getArgument("id").toString());
// 下面是自己的从DB中查询数据的方法
return queryService.getUserById(id);
});
return builder;
}
).build();
SchemaGenerator schemaGenerator = new SchemaGenerator();
GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeDefinitionRegistry, runtimeWiring);
this.graphQL = GraphQL.newGraphQL(graphQLSchema).build();
进行查询
有了graphQL,就可以直接进行查询了。
public Object query(String query){
ExecutionResult executionResult = this.graphQL.execute(query);
return executionResult.getData();
}
这样只要在controller中,调用query方法,就可以得到GraphQL的查询结果了。