Java上的GraphQL API简介
GraphQL是一种现代的API查询语言,它允许客户端只请求他们真正需要的数据。与响应结构固定的REST不同,GraphQL提供了灵活性和效率。在本逐步教程中,我们将使用流行的graphql-java库和Spring Boot在Java上创建一个完整的GraphQL API。您将学习如何配置服务器、定义模式、编写解析器以及执行查询。所有代码示例均可直接运行。
您将学到什么
- 如何为GraphQL配置Spring Boot项目
- 如何定义GraphQL模式(类型、查询、变更)
- 如何在Java中编写解析器
- 如何执行query和mutation查询
1. 项目设置与依赖
首先,我们创建一个使用Maven的Spring Boot项目。在pom.xml中添加必要的依赖:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <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></dependencies>这些库提供了GraphQL与Spring Boot的集成,并方便地处理模式。添加依赖后,请更新项目。
项目结构
我们的项目将包含以下主要组件:
- GraphQL模式(文件
schema.graphqls) - 数据模型(Java POJO)
- 解析器(查询处理器)
- 用于测试的控制器
2. 定义GraphQL模式
创建文件src/main/resources/schema.graphqls。在其中,我们描述数据类型和可用操作。以"Book"模型为例:
type Book { id: ID! title: String! author: String! year: Int}
type Query { getBook(id: ID!): Book getAllBooks: [Book]}
type Mutation { addBook(title: String!, author: String!, year: Int): Book}这里Book是一个对象类型,带有必填字段(!)。Query定义了读取数据的入口点,而Mutation则用于修改数据。请注意:在GraphQL中,变更用于创建、更新和删除数据。
3. 创建Java模型和解析器
Book模型
创建一个简单的POJO类Book.java:
public class Book { private String id; private String title; private String author; private int year;
public Book(String id, String title, String author, int year) { this.id = id; this.title = title; this.author = author; this.year = year; }
// getters and setters public String getId() { return id; } public String getTitle() { return title; } public String getAuthor() { return author; } public int getYear() { return year; }}Query的解析器
解析器将模式与数据连接起来。创建类QueryResolver.java:
import com.coxautodev.graphql.tools.GraphQLQueryResolver;import org.springframework.stereotype.Component;import java.util.*;
@Componentpublic class QueryResolver implements GraphQLQueryResolver {
private final List<Book