Введение:
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, чтобы открывать новые способы улучшения ваших приложений.