首发个人博客:https://totalo.top/20190611/startGraphQL/
关于GraphQL(官方API: https://graphql.cn/learn/)
GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。— 引自GraphQL中文官网(https://graphql.cn/)所得即所想查询
本文以Spring Boot + GraphQL入手介绍
1、首先构建SpringBoot项目,作为web项目引入web依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2、引入SpringBoot + GraphQL的相关依赖
<!--整合包 -->
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-spring-boot-starter</artifactId>
<version>5.0.2</version>
</dependency>
<!--工具包,提供依赖 -->
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java-tools</artifactId>
<version>5.2.4</version>
</dependency>
<!-- lombok插件提供@Data、@Builder注解,可以省略构造方法以及get、set方法 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
<scope>provided</scope>
</dependency>
<!-- 可视化调试工具 -->
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphiql-spring-boot-starter</artifactId>
<version>5.0.2</version>
</dependency>
3、编写测试代码
Author类:
package com.totalo.graphql.pojo;
import lombok.Builder;
import lombok.Data;
@Builder
@Data
public class Author {
private Integer id;
private String name;
private Integer age;
}
Book类:
package com.totalo.graphql.pojo;
import lombok.Builder;
import lombok.Data;
@Builder
@Data
public class Book {
private Integer id;
private String name;
private Author author;
private String publisher;
}
QueryResolver作为数据源
package com.totalo.graphql;
import com.coxautodev.graphql.tools.GraphQLQueryResolver;
import com.totalo.graphql.pojo.Author;
import com.totalo.graphql.pojo.Book;
import graphql.schema.GraphQLFieldDefinition;
import graphql.servlet.GraphQLQueryProvider;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class QueryResolver implements GraphQLQueryResolver {
public List<Book> findBooks() {
Author author = Author.builder()
.id(1)
.name("Bill")
.age(30)
.build();
Book b = Book.builder()
.id(1)
.name("Java核心编程")
.author(author)
.publisher("电子工业出版社")
.build();
List<Book> bookList = new ArrayList<Book>();
bookList.add(b);
return bookList;
}
}
5、添加graphql的接口定义
在resources目录下添加相关的配置文件,在这个项目中,需要配置两个配置文件分别是:root.graphqls这个文件主要是对于方法的定义,schema.graphqls主要是定义可查询的数据以及字段的信息。
root.graphqls
# 查询相关接口
type Query {
findBooks: [Book]
}
# 变更相关接口
type Mutation {
......
}
schema.graphqls
type Author {
id: Int
name: String
age: Int
}
type Book {
id: Int
name: String
author: Author
publisher: String
}
6、启动项目并访问http://localhost:8080/graphiql 进行可视化测试即可。
查询语句
{
findBooks {
name
author{
name
age
}
}
}
结果显示
{
"data": {
"findBooks": [
{
"name": "Java核心编程",
"author": {
"name": "Bill",
"age": 30
}
}
]
}
}
简单的学习笔记,后续进行更新