引言:为什么 GraphQL 和 Java 是强大的组合
现代 API 开发需要灵活性和效率。REST API 尽管广受欢迎,但常常面临 over-fetching(数据过度加载)或 under-fetching(数据不足)的问题。GraphQL 通过允许客户端仅请求所需数据来解决这些问题。
而 Java 仍然是企业级开发中最可靠的语言之一。通过 Spring Boot 框架将 GraphQL 和 Java 结合,为构建可扩展且高性能的 API 提供了强大工具。在本逐步教程中,我们将从零开始创建一个简单的 GraphQL API。
本材料将帮助希望掌握现代 API 构建方法的 Java 开发者。我们将解析关键概念、编写代码并测试我们的实现。
1. 项目设置与依赖管理
第一步是创建一个基本的 Spring Boot 项目。我们将使用 Maven 来管理依赖。请确保您已安装 JDK 17+ 和 Maven 3.8+。
创建包含以下内容的 pom.xml 文件:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.0</version> </parent>
<groupId>com.example</groupId> <artifactId>graphql-java-tutorial</artifactId> <version>1.0.0</version>
<properties> <java.version>17</java.version> </properties>
<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></project>配置好 pom.xml 后,创建应用程序的主类:
package com.example.graphqldemo;
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplicationpublic class GraphqlDemoApplication { public static void main(String[] args) { SpringApplication.run(GraphqlDemoApplication.class, args); }}现在项目结构已准备就绪。接下来我们进行数据定义。
2. 数据模型与 GraphQL Schema 定义
GraphQL Schema 是客户端与服务器之间的契约。我们将从创建一个简单的 Book(书籍)模型开始。
2.1 Java 模型类
package com.example.graphqldemo.model;
public class Book { private String id; private String title; private String author; private int pages;
public Book(String id, String title, String author, int pages) { this.id = id; this.title = title; this.author = author; this.pages = pages; }
// Getters and Setters public String getId
```