GraphQL-java重要机制介绍

897 阅读2分钟
1、内省、查询dsl和schema分析工具

graphql区别于restful的最大优点之一便是方便数据治理:将各个数据源的数据抽象为一颗树中的子树及其节点(严格来说是DAG)、将对多个接口的请求抽象为一个类sql语句。

能够使用程序分析schema和分析语句,对于数据的把控和治理非常重要。

graphql规范规定了一些内省的语法和辅助数据,但是在使用过程中:spec.graphql.org/draft/#sec-…

graphql-java本身也提供了两个利器分析查询dsl和schema:QueryTraverser和SchemaTraverser。最佳实践见两者官方单测:QueryTraverserTest和SchemaTraverserTest。

2、Instrument机制

graphql-java引擎在执行请求的各个环节都提供了更改中间数据、修改解析工具行为的(回调)方法,实现相关接口可方便的修改请求的执行时行为。

指令提供的运行时信息,均可通过该机制进行实现。

最佳实践:TestCase下包路径为graphql.execution.instrumentation的相关测试用例;

官方文档:www.graphql-java.com/documentati…

3、指令

graphql作为一种描述性语言,除了查询dsl的执行计划,并没有针对单个节点或者子树进行执行计算的能力、和任何描述运算的 + - * / 等符号。

graphql提供了指令,对schema和查询dsl的运行时行为进行描述。结合Instrument机制,将非常容易实现指令描述的行为。

4、DataLoader

当涉及到list类型字段的时候,常常会遇到n+1问题。

使用DataLoader可用来解决n+1问题,实现数据缓存层。www.graphql-java.com/documentati…

5、其他
  • PreparsedDocumentEntry:预编译缓存;
  • ValueUnboxer:dataFetcher返回值的解析工具;
  • DataFetcherResult:当一个类型涉及到多个数据源的时候,同时返回部分结果和异常信息。

作者介绍: