Graphql-Java简介
GraphQL 是 Facebook 发明和提出的一种查询数据的方式,即一种API方式,Graphql-Java则是这种方式的Java实现。本教程的graphql-java版本是version: v15。JAVA哥哥教程
从HelloWorld开始
依赖包
本实例是通过maven方式导入依赖包
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java</artifactId>
<version>15.0</version>
</dependency>
示例代码
package com.javagege;
import graphql.ExecutionResult;
import graphql.GraphQL;
import graphql.schema.GraphQLSchema;
import graphql.schema.StaticDataFetcher;
import graphql.schema.idl.RuntimeWiring;
import graphql.schema.idl.SchemaGenerator;
import graphql.schema.idl.SchemaParser;
import graphql.schema.idl.TypeDefinitionRegistry;
public class HelloWorld {
public static void main(String[] args) {
//这里是定义schema 的字符串,定义了一个名为hello的查询,返回的数据类型是String
//schema除了直接通过String字符串定义之外,还可以通过SDL文件(后缀为*.graphqls的文件)或编码的方式定义。
String schema = "type Query{hello: String}";
SchemaParser schemaParser = new SchemaParser();
TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.parse(schema);
//实例化一个RuntimeWiring对象,这个对象中关联了一个DataFetcher对象,DataFetcher对象是用来获取数据的,获取数据的方式需要开发人员根据实际情况实现,它只关心返回结果
//这里是将名为hello的查询关联到一个简单的StaticDataFetcher对象,它返回一个字符串"world"
RuntimeWiring runtimeWiring = RuntimeWiring.newRuntimeWiring()
.type("Query", builder -> builder.dataFetcher("hello", new StaticDataFetcher("world")))
.build();
SchemaGenerator schemaGenerator = new SchemaGenerator();
//将schema定义与RuntimeWiring绑定,生产可执行的schema
GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeDefinitionRegistry, runtimeWiring);
GraphQL build = GraphQL.newGraphQL(graphQLSchema).build();
//执行hello查询
ExecutionResult executionResult = build.execute("{hello}");
//输出查询结果,结果为{hello=world},默认是Map格式的数据
System.out.println(executionResult.getData().toString());
}
}
示例中的关键点
- 有schema定义信息,其中定义了方法名称、输入数据、返回数据等等结构信息。
- 有一个RuntimeWiring对象,RuntimeWiring对象中关联了相关DataFetcher对象。
- schema定义信息与RuntimeWiring对象绑定,生成一个可执行的GraphQLSchema对象。
- 通过GraphQLSchema对象,实例化一个GraphQL对象,通过GraphQL对象执行查询并返回结果。