
Введение:
GraphQL — это язык запросов для вашего API и среда выполнения для выполнения запросов к вашим данным. Он представляет собой более эффективную, мощную и гибкую альтернативу традиционному REST API. В этом руководстве мы узнаем, как интегрировать GraphQL с Spring Boot и создать простое приложение. Мы будем использовать Java, Spring Boot и библиотеку graphql-java для создания нашего приложения.
Предпосылки:
Прежде чем мы начнем, убедитесь, что в вашей системе установлено следующее:
- Комплект для разработки Java (JDK) 8 или выше
- Апач Мавен
- Ваша любимая интегрированная среда разработки или текстовый редактор (например, IntelliJ IDEA, Eclipse или Visual Studio Code)
Настройка проекта:
Для начала мы создадим новый проект Spring Boot с помощью веб-службы Spring Initializr. Откройте терминал и выполните следующую команду:
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>
Создание схемы GraphQL:
Создайте новый файл 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]
}
Здесь мы определили типы Query и Mutation для нашего API. Мы также определили типы Book, Author и BookInput для нашей модели данных.
Построение модели данных:
Затем создайте классы 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
}
Реализация резолверов GraphQL:
Создайте класс 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:
По умолчанию graphql-spring-boot-starter автоматически настроит для вас сервер GraphQL. Однако вы можете настроить параметры сервера, добавив следующие свойства в файл application.properties:
graphql.servlet.corsEnabled=true graphql.servlet.mapping=/graphql
Эта конфигурация включает CORS и устанавливает конечную точку GraphQL на /graphql.
Тестирование GraphQL API:
Чтобы протестировать GraphQL API, запустите приложение Spring Boot:
./mvnw spring-boot:run
Откройте браузер и перейдите на игровую площадку GraphQL по адресу http://localhost:8080/graphql. Теперь вы можете протестировать API, используя следующие запросы и мутации:
mutation createAuthor {
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
}
}
}
Заключение:
В этом руководстве мы узнали, как создать простой API GraphQL с использованием Spring Boot и библиотеки graphql-java. Мы рассмотрели основы проектирования схемы GraphQL, моделирования данных и реализации преобразователей для запросов и мутаций. Демонстрируемый здесь пример проекта может служить отправной точкой для создания более сложных приложений GraphQL с помощью Spring Boot.
Помните, что можно реализовать множество дополнительных функций и оптимизаций, таких как добавление обработки ошибок, кэширование и более продвинутые возможности запросов. Продолжайте изучать экосистему GraphQL, чтобы открывать новые способы улучшения ваших приложений.