GraphQL查询及Java整合
简介:GraphQL是一种用于API的查询语言,被称为Restful的替代品,只有一个接口/graphql,它一次查询可以获取多个资源,用类型来区分资源,而Restful的一个接口只能返回一个资源,是用URL来区分资源。
1. 基础语法
A. 查询请求构成:
操作类型 操作名称(变量:字段类型 [= 默认值]) {
方法名(字段:变量){
需要返回的字段1
需要返回的字段2
}
}
操作类型:描述打算做什么类型的操作,如query、mutation、subscription;
操作名称:指操作有意义和明确的名称;
B. 关键字
变量:其前缀必须是$,都必须是标量、枚举型或输入对象类型,可以附带默认值;
fragment(片段),一组字段构成的可复用单元;
指令:查询方法里控制字段是否返回,@include(if: Boolean)指参数为true时包含此字段,@skip(if: Boolean)指参数为true时跳过此字段;
mutaion:GraphQL主要是数据查询,但也可以修改数据,一个变更可以包含多个字段,与查询的区别是查询字段是并行执行,而变更字段时是线性执行,一个接着一个;
内联片段:on Droid,用于查询字段里是对象,但是只取某个字段时的场景;
元字段:__typename,用于不知道GraphQL服务提供什么类型,通过这个可以获取那个位置的对象类型名称;
其他:[]代表数组或列表,!代表参数不能为空;
C. 默认标量类型:
Int:有符号32位证数;
Float:有符号双精度浮点值;
String:UTF-8字符系列;
Boolean:true或false;
ID:表示一个唯一标识符,不一定是可读型;
D. 其余类型
枚举类型:enum,是一种特殊的标量,它限制在一个特殊的可选值集合内;
接口类型:interface,一个接口是一个抽象类型,它包含某些字段,而对象类型必须包含这些字段,才能算实现了这个接口;
联合类型:union,与接口类似,但是它并不指定类型之间的任何共同字段,使用__typename;
输入类型:input,传递复杂对象时使用,输入对象类型的字段不能拥有参数。
E.客户端请求示例:
D. 查询数据使用query,对应type,修改使用Mutation,对应input。
2. 高级
A. 使用GraphQLObjectType定义类型type。
B. GraphiQL支持调试模式;
C. java调用GraphQL接口,需要引入graphql-client,可以用postman调用graphql接口调试
3. 工具
A. 借助工具GraphQL Playground来模拟请求。
可参考:GraphQL中文网