GraphQL API 与 Java:逐步实践教程

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

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

博客

书籍推荐