使用Java构建GraphQL API:逐步实践教程

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

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

开始课程

Java中GraphQL API简介

\n\n

GraphQL是一种用于API的查询语言,它允许客户端只请求他们真正需要的数据。与响应结构固定的REST不同,GraphQL可以灵活地构建响应,从而显著减少传输的数据量并加快开发速度。

\n\n

在本教程中,我们将实践如何使用graphql-java库和Spring Boot框架创建使用Java的GraphQL API。您将学习如何配置模式、编写解析器以及执行查询。

\n\n

本文对于希望掌握构建API的现代方法并改善客户端与服务器之间交互的Java开发人员非常有用。

\n\n

1. 项目配置与依赖项

\n\n

首先,我们创建一个新的Spring Boot项目。最方便的方法是使用Spring Initializr。添加以下依赖项:

\n\n
    \n
  • Spring Web — 用于启动Web服务器
  • \n
  • Spring Boot DevTools — 用于加速开发
  • \n
  • Lombok — 用于减少样板代码
  • \n
\n\n

创建项目后,将主要的GraphQL库添加到pom.xml中:

\n\n
<dependency>\n    <groupId>com.graphql-java</groupId>\n    <artifactId>graphql-java-spring-boot-starter-webmvc</artifactId>\n    <version>2021-06-30T00-00-00-1e4b5e5</version>\n</dependency>
\n\n

还需要一个用于GraphiQL工具(用于测试查询的Web界面)的库:

\n\n
<dependency>\n    <groupId>com.graphql-java</groupId>\n    <artifactId>graphiql-spring-boot-starter</artifactId>\n    <version>5.0.2</version>\n</dependency>
\n\n

添加依赖项后,更新项目并启动它。默认情况下,GraphiQL可通过地址http://localhost:8080/graphiql访问。

\n\n

2. 创建数据模型和GraphQL模式

\n\n

为了演示,我们创建一个简单的Book模型。定义一个包含id、title、author和pages字段的类。

\n\n
import lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\n\n@Data\n@NoArgsConstructor\n@AllArgsConstructor\npublic class Book {\n    private String id;\n    private String title;\n    private String author;\n    private int pages;\n}
\n\n

现在需要定义GraphQL模式。在src/main/resources文件夹中创建文件schema.graphqls:

\n\n
type Query {\n    allBooks: [Book]\n    bookById(id: String): Book\n}\n\ntype Book {\n    id: String\n    title: String\n    author: String\n    pages: Int\n}
\n\n

该模式描述了两种查询:获取所有书籍和根据ID获取书籍。Book类型包含四个字段。

\n\n

为了处理查询,我们创建一个服务,该服务将数据存储在内存中(为简单起见):

\n\n
import org.springframework.stereotype.Service;\nimport javax.annotation.PostConstruct;\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Optional;\n\n@Service\npublic class BookService {\n    private List<Book> books = new ArrayList<>();\n\n    @PostConstruct\n    public void init() {\n        books.add(new Book("1", "战争与和平", "列夫·托尔斯泰", 1225));\n        books.add(new Book("2", "罪与罚", "费奥多尔·陀思妥耶夫斯基", 671));\n        books.add(new Book("3", "大师与玛格丽特", "米哈伊尔·布尔加科夫", 480));\n    }\n\n    public List<Book> getAllBooks() {\n        return books;\n    }\n\n    public Book getBookById(String id) {\n        Optional<Boo                

博客

书籍推荐