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:当一个类型涉及到多个数据源的时候,同时返回部分结果和异常信息。
作者介绍: