GraphQL 是 API 的查询语言,也是对数据执行查询的运行时。它提供了一种比传统 REST API 更高效、更强大、更灵活的替代方案。在本教程中,我们将学习如何将 GraphQL 与 Spring Boot 集成并构建一个简单的应用程序。我们将使用 Java、Spring Boot 和 graphql-java 库来创建我们的应用程序。
在我们开始之前,请确保您的系统上安装了以下内容:
首先,我们将使用 Spring Initializr Web 服务创建一个新的 Spring Boot 项目。打开终端并运行以下命令:
curl https://start.spring.io/starter.zip -o my-graphql-app.zip
解压缩下载的文件并将项目导入到您的 IDE 中。现在,将以下依赖项添加到您的pom.xml
文件中:
<dependencies>
...
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java</artifactId>
<version>17.3</version>
</dependency>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-spring-boot-starter</artifactId>
<version>11.1.0</version>
</dependency>
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-java-tools</artifactId>
<version>11.0.1</version>
</dependency>
...
</dependencies>
创建一个新文件src/main/resources/graphql/schema.graphqls
并定义您的 GraphQL 架构:
type Query {
getAllBooks: [Book]
getBook(id: ID!): Book
}
type Mutation {
createBook(input: BookInput!): Book
}
type Book {
id: ID!
title: String!
author: Author!
}
input BookInput {
title: String!
authorId: ID!
}
type Author {
id: ID!
name: String!
books: [Book]
}
在这里,我们已经为我们的 API 定义了Query
和Mutation
类型。我们还为数据模型定义了Book
、Author
和类型。BookInput
Book
接下来,创建 Java 类Book和Author
:
public class Book {
private String id;
private String title;
private Author author;
// Constructors, getters, and setters
}
public class Author {
private String id;
private String name;
private List<Book> books;
// Constructors, getters, and setters
}
创建一个Query
类来实现查询解析器:
@Component
public class Mutation implements GraphQLMutationResolver {
private final BookService bookService;
public Mutation(BookService bookService) {
this.bookService = bookService;
}
public Book createBook(BookInput input) {
return bookService.createBook(input);
}
}
现在,创建BookService
类来处理业务逻辑
@Service
public class BookService {
private final Map<String, Book> books = new HashMap<>();
private final Map<String, Author> authors = new HashMap<>();
public List<Book> getAllBooks() {
return new ArrayList<>(books.values());
}
public Book getBook(String id) {
return books.get(id);
}
public Book createBook(BookInput input) {
String id = UUID.randomUUID().toString();
Author author = authors.get(input.getAuthorId());
if (author == null) {
throw new RuntimeException("Author not found");
}
Book book = new Book(id, input.getTitle(), author);
books.put(id, book);
author.getBooks().add(book);
return book;
}
}
默认情况下,graphql-spring-boot-starter
将自动为您配置 GraphQL 服务器。但是,您可以通过将以下属性添加到您的application.properties
文件来自定义服务器设置:
graphql.servlet.corsEnabled=true
graphql.servlet.mapping=/graphql
此配置启用 CORS 并将 GraphQL 端点设置为/graphql
.
要测试 GraphQL API,请运行 Spring Boot 应用程序:
./mvnw spring-boot:run
打开您的浏览器并导航到位于 的 GraphQL Playground http://localhost:8080/graphql
。您现在可以使用以下查询和变更来测试 API:
mutation createAuthor {
createAuthor(input: { name: "Jane Austen" }) {createAuthor(input: { name: "Jane Austen" }) {
id
name
}
}
mutation createBook {
createBook(input: { title: "Pride and Prejudice", authorId: "1" }) {
id
title
author {
name
}
}
}
query getAllBooks {
getAllBooks {
id
title
author {
name
}
}
}
query getBook {
getBook(id: "1") {
id
title
author {
name
}
}
}
在本教程中,我们学习了如何使用 Spring Boot 和 graphql-java 库构建一个简单的 GraphQL API。我们涵盖了 GraphQL 模式设计、数据建模以及实现查询和变更解析器的基础知识。此处演示的示例项目可以作为使用 Spring Boot 构建更复杂的 GraphQL 应用程序的起点。
请记住,可以实施许多附加功能和优化,例如添加错误处理、缓存和更高级的查询功能。继续探索 GraphQL 生态系统以发现增强应用程序的新方法。