GraphQL Java

阅读: 评论:0

GraphQL Java

GraphQL Java

Query查询

在一个schema上执行查询,需要首先创建一个GraphQL对象,然后调用该对象的execute()方法

GraphQL在执行结束后返回一个ExecutionResult对象,其中包含查询的数据(data字段)或错误信息(errors字段)。

        GraphQLSchema schema = wSchema().query(queryType).build();GraphQL graphQL = wGraphQL(schema).build();ExecutionInput executionInput = wExecutionInput().query("query { hero { name } }").build();ExecutionResult executionResult = ute(executionInput);Object data = Data();List<GraphQLError> errors = Errors();

Data Fetcher

每个GraphQL中的field(字段)都会绑定一个DataFetcher。在其他的GraphQL实现中,也称DataFetcher为Resolver。

一般,我们可以使用PropertyDataFetcher对象,从内存中的POJO对象中提取field的值。如果你没有为一个field显式指定一个DataFetcher,那么GraphQL默认会使用PropertyDataFetcher与该field进行绑定。
但对于最顶层的领域对象(domain object)查询来说,你需要定义一个特定的data fetcher。顶层的领域对象查询,可能会包含数据库操作,或通过HTTP协议与其他系统进行交互获得相应数据。
GraphQL - Java并不关心你是如何获取领域对象数据的,这是业务代码中需要考虑的问题。它也不关心在获取数据时需要怎样的认证方式,你需要在业务层代码中实现这部分逻辑。

一个简单的Data Fetcher示例如下:

        DataFetcher userDataFetcher = new DataFetcher() {@Overridepublic Object get(DataFetchingEnvironment environment) {return Argument("userId"));}};

每个DataFetcher的方法中,都会传入一个DataFetchingEnvironment对象。这个对象中包含了当前正在被请求的field,field所关联的请求参数argument,以及其他信息(例如,当前field的上层field、当前查询的root对象或当前查询的context对象等)。
在上面的例子中,GraphQL会在data fetcher返回执行结果前一直等待,这是一种阻塞的调用方式。也可以通过返回data相关的CompletionStage对象,将DataFetcher的调用异步化,实现异步调用。

数据获取时产生的异常

如果在GraphQL的DataFetcher执行过程中产生了异常,在GraphQL的执行策略下, 将生成一个ExceptioinWhileDataFetching错误对象,并将它添加到返回的ExecutionResult对象的errors列表字段当中。GraphQL允许返回部分成功的数据,并带上异常信息。

正常的异常处理逻辑如下:

    public class SimpleDataFetcherExceptionHandler implements DataFetcherExceptionHandler {private static final Logger log = Logger(SimpleDataFetcherExceptionHandler.class);@Overridepublic void accept(DataFetcherExceptionHandlerParameters handlerParameters) {Throwable exception = Exception();SourceLocation sourceLocation = Field().getSourceLocation();ExecutionPath path = Path();ExceptionWhileDataFetching error = new ExceptionWhileDataFetching(path, exception, sourceLocation);ExecutionContext().addError(error);log.Message(), exception);}}

如果抛出的异常是一个GraphqlError对象,那么它会将异常信息和扩展属性

本文发布于:2024-01-31 09:31:18,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170666467927548.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:GraphQL   Java
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23