Всем привет ,
Сегодня мы рассмотрим обзор использования GraphQL с Java-приложением Spring Boot.
Итак, начнем:
Введение:
GraphQL — это язык запросов для вашего API, который позволяет клиентам запрашивать именно те данные, которые им нужны, и ничего более. Его можно использовать для поддержки современных приложений, в том числе созданных с использованием Java и Spring Boot. В этом посте мы рассмотрим шаги по настройке приложения Spring Boot для использования GraphQL.
Предпосылки
Прежде чем мы начнем, вам необходимо установить следующие инструменты:
- Ява 8 или выше
- Maven 3.5 или выше
- Текстовый редактор или IDE
Настройка проекта Spring Boot
Во-первых, давайте создадим новый проект Spring Boot, используя Spring Initializr. Мы выберем следующие зависимости:
- Интернет
- ГрафQL
После создания проекта откройте его в текстовом редакторе или IDE.
Добавление зависимостей GraphQL
Затем мы добавим реализацию GraphQL Java и стартер GraphQL Spring Boot в наш файл pom.xml
:
<dependency> <groupId>com.graphql-java</groupId> <artifactId>graphql-java</artifactId> <version>11.0</version> </dependency> <dependency> <groupId>com.graphql-java</groupId> <artifactId>graphql-java-tools</artifactId> <version>5.2.4</version> </dependency> <dependency> <groupId>com.graphql-java</groupId> <artifactId>graphql-spring-boot-starter</artifactId> <version>5.0.2</version> </dependency>
Создание схемы GraphQL
Далее мы создадим схему GraphQL для нашего API. Эта схема определяет типы, запросы и изменения, которые можно выполнять в API.
Создайте новый файл с именем schema.graphqls
в каталоге src/main/resources
и добавьте следующий код:
type Query { hello: String }
Это определяет один запрос с именем hello
, который возвращает строку.
Создание преобразователей GraphQL
Теперь, когда мы определили схему, нам нужно создать код, который фактически разрешает запросы. Мы сделаем это, создав класс с именем QueryResolver
, который реализует интерфейс GraphQLQueryResolver
:
@Component public class QueryResolver implements GraphQLQueryResolver { public String hello() { return "Hello, world!"; } }
Этот класс преобразователя содержит единственный метод, возвращающий строку «Hello, world!».
Настройка конечной точки GraphQL
Теперь, когда мы настроили нашу схему и распознаватели, нам нужно настроить конечную точку, которая будет принимать запросы GraphQL. Для этого мы создадим новый класс конфигурации, расширяющий AbstractGraphQLHttpServlet
:
@Configuration public class GraphQLConfiguration extends AbstractGraphQLHttpServlet { @Autowired GraphQL graphQL; @Override protected GraphQL getGraphQL() { return graphQL; } @Override protected ServletContext getServletContext() { return null; } }
Этот класс конфигурации указывает Spring Boot использовать bean-компонент GraphQL в качестве механизма GraphQL и не использовать контекст сервлета.
Создайте компонент GraphQL
Далее нам нужно создать bean-компонент GraphQL. Мы сделаем это, создав новый класс конфигурации, определяющий компонент:
@Configuration public class GraphQLBeanConfiguration { @Bean public GraphQL graphQL(GraphQLSchema schema, GraphQLContextBuilder contextBuilder) { return GraphQL.newGraphQL(schema) .queryExecutionStrategy(new AsyncExecutionStrategy()) .mutationExecutionStrategy(new AsyncSerialExecutionStrategy()) .contextBuilder(contextBuilder) .build(); } @Bean public GraphQLSchema schema(GraphQLObjectMapper objectMapper) throws IOException { URL url = Resources.getResource("schema.graphqls"); String sdl = Resources.toString(url, Charsets.UTF_8); GraphQLSchema schema = objectMapper.makeExecutableSchema(sdl, QueryResolver.class); return schema; } @Bean public GraphQLObjectMapper objectMapper() { return new GraphQLObjectMapper(); } @Bean public GraphQLContextBuilder contextBuilder() { return new GraphQLContextBuilder() { @Override public GraphQLContext build(HttpServletRequest request, HttpServletResponse response) { return new AuthContext(request.getHeader("Authorization")); } }; } }
Этот класс конфигурации создает следующие bean-компоненты:
GraphQL
: движок GraphQLGraphQLSchema
: схема GraphQL, сгенерированная из файлаschema.graphqls
.GraphQLObjectMapper
: вспомогательный класс для анализа схемы GraphQL.GraphQLContextBuilder
: фабрика для создания объекта контекста GraphQL, который можно использовать для хранения информации о текущем запросе
Тестирование конечной точки GraphQL
Теперь, когда наша конечная точка GraphQL настроена, давайте проверим ее. Запустите приложение Spring Boot и перейдите к https://localhost:8080/graphql
.
Вы должны увидеть GraphQL Playground, инструмент для тестирования запросов GraphQL. В левой панели введите следующий запрос:
{ hello }
Затем нажмите кнопку «Играть». Вы должны увидеть следующий ответ на правой панели:
{ "data": { "hello": "Hello, world!" } }
До сих пор мы прошли этапы настройки приложения Spring Boot для использования GraphQL. Мы создали схему GraphQL, определили распознаватели для обработки запросов и настроили конечную точку GraphQL, используя библиотеку GraphQL Java и стартер GraphQL Spring Boot. Затем мы протестировали конечную точку с помощью инструмента GraphQL Playground.
Вот несколько сценариев, в которых вы можете рассмотреть возможность использования GraphQL:
- Если вы хотите предоставить клиентам больший контроль над данными, которые они получают от вашего API. С GraphQL клиенты могут точно указать, какие поля они хотят получить, и могут запрашивать вложенные данные с помощью одного вызова API. Это может быть особенно полезно, если у вас есть сложный API со множеством различных ресурсов и взаимосвязей, или если вам необходимо поддерживать широкий спектр клиентских приложений с различными требованиями к данным.
- Если вы хотите избежать избыточной или недостаточной выборки данных, которые могут возникнуть при использовании традиционного REST API. С GraphQL клиенты могут запрашивать именно те данные, которые им нужны, и ничего больше. Это может помочь уменьшить объем данных, которые необходимо передавать по сети, и повысить производительность вашего API.
- Если вы хотите поддерживать обновления в реальном времени в своем приложении. С подписками GraphQL клиенты могут подписываться на обновления определенных событий или изменений данных, а сервер может отправлять обновления подписанным клиентам в режиме реального времени.
При этом существуют сценарии, в которых вы можете не захотеть использовать GraphQL:
- Если у вас есть только простой API с небольшим количеством ресурсов или если ваши клиентские приложения имеют относительно простые требования к данным, может быть достаточно традиционного API REST.
- Если вы работаете с серверной системой, которая не подходит для гибкого API на основе схемы, такого как GraphQL (например, устаревшая система с фиксированной, негибкой моделью данных), вы можете рассмотреть возможность использования другого подхода.
- Если вас беспокоят накладные расходы на внедрение и обслуживание GraphQL API, вы можете подумать, перевешивают ли преимущества GraphQL дополнительные усилия по разработке.
Есть несколько альтернатив GraphQL, которые вы можете рассмотреть:
- REST API. Передача репрезентативного состояния (REST) — это общий архитектурный стиль для создания API, который предоставляет набор ресурсов и операций с этими ресурсами. С помощью REST API клиенты могут получать доступ к ресурсам с помощью методов HTTP, таких как GET, POST, PUT и DELETE, и могут получать данные в таких форматах, как JSON или XML. API-интерфейсы REST хорошо зарекомендовали себя и могут быть просты в реализации, но они могут страдать от таких проблем, как избыточная выборка (извлечение большего количества данных, чем необходимо) или неполная выборка (недостаточное получение данных).
- Falcor: Falcor – это библиотека JavaScript, разработанная Netflix, которая позволяет клиентам получать доступ к данным с сервера с помощью графа JSON с одним маршрутом. Как и GraphQL, Falcor позволяет клиентам запрашивать определенные данные и избегать избыточной выборки, но использует другой подход, основанный на графе JSON, а не на схеме и языке запросов.
- gRPC: gRPC — это платформа удаленного вызова процедур (RPC), разработанная Google, которая использует HTTP/2 и буферы протоколов, чтобы клиенты могли вызывать методы на сервере в другом процессе. gRPC можно использовать для создания быстрых, эффективных и легко масштабируемых API, но он требует от клиентов и серверов использования определенного набора сгенерированного кода и может быть более сложным в настройке и обслуживании, чем другие подходы.
Каждый из этих вариантов имеет свои сильные и слабые стороны, и лучший выбор будет зависеть от конкретных требований вашего приложения.
Вот некоторые плюсы и минусы использования GraphQL:
Плюсы:
- Позволяет клиентам запрашивать именно те данные, которые им нужны, и ничего более. Это может уменьшить объем данных, передаваемых по сети, и повысить производительность вашего API.
- Гибкий и адаптируемый. GraphQL позволяет вам определить гибкую схему, которую можно изменять и расширять по мере изменения вашего приложения. Это упростит добавление или изменение функций и позволит вам быстро выполнять итерации в вашем API.
- Может использоваться с различными клиентскими и серверными технологиями. GraphQL имеет большое и активное сообщество, а также множество библиотек и фреймворков, доступных для различных языков и платформ.
Минусы:
- Требуется кривая обучения. В GraphQL используется другой подход к созданию API, чем в других технологиях, и разработчикам может потребоваться потратить время на изучение языка запросов GraphQL и языка определения схемы.
- Может быть более сложным в реализации и обслуживании, чем другие подходы. GraphQL требует, чтобы вы определили схему и написали функции-преобразователи для обработки запросов и мутаций, что может привести к дополнительным затратам на разработку.
- Может не подходить для всех приложений. GraphQL лучше всего подходит для API со сложными моделями данных или широким спектром клиентских требований и может быть не лучшим выбором для более простых API.
GraphQL был разработан Facebook с открытым исходным кодом в 2015 году. Он был создан как альтернатива REST API и другим подходам к созданию API с целью предоставления более гибкого и эффективного способа запроса и передачи данных по сети.
С момента своего выпуска GraphQL приобрел большое и активное сообщество пользователей и участников и был принят многими компаниями и организациями для создания API для широкого круга приложений.
GraphiQL — это встроенный в браузер инструмент для тестирования и изучения API-интерфейсов GraphQL. Он предоставляет графический пользовательский интерфейс, который позволяет создавать запросы и мутации GraphQL, а также просматривать результаты этих запросов и мутаций в режиме реального времени.
GraphiQL обычно используется для отладки и тестирования API-интерфейсов GraphQL во время разработки, а также может использоваться в качестве интерактивного инструмента документации для пользователей API. Он часто включается как встроенная функция в серверы и библиотеки GraphQL, а также доступен как отдельное приложение, которое можно использовать с любым API GraphQL.
Чтобы использовать GraphiQL, вы просто вводите запрос или мутацию GraphQL в левой части интерфейса и нажимаете кнопку «Воспроизвести», чтобы выполнить запрос или мутацию. Результаты отображаются в правой части интерфейса. GraphiQL также включает в себя такие функции, как подсветка синтаксиса, автозаполнение и встроенный проводник документации, упрощающие использование.
Вывод:
Интеграция GraphQL с Java-приложением Spring Boot может стать эффективным способом создания гибких, эффективных и простых в обслуживании API-интерфейсов. Используя библиотеку или инфраструктуру GraphQL, например GraphQL-Java или Apollo, вы можете легко добавить поддержку GraphQL в свое приложение и воспользоваться такими функциями, как создание схемы, безопасность типов и автоматическое выполнение запросов.
С Spring Boot вы можете использовать зависимость spring-boot-starter-graphql
, чтобы быстро приступить к работе, и вы можете использовать такие функции, как JPA и Spring Data, для интеграции API GraphQL с базой данных.
Следуя рекомендациям по проектированию и внедрению GraphQL API, вы сможете создать надежный и масштабируемый API, отвечающий потребностям ваших клиентов и пользователей.
Мы надеемся, что вам понравился этот пост «Обзор использования GraphQL с Java-приложением Spring Boot».
Счастливого обучения… Счастливого кодирования…..
Другие интересные статьи:
Эффективная Java-разработка с Lombok
AWS SOAR: Повышение безопасности с помощью автоматизации
Java: Понимание золотой пайки Phi
Обучение AWS: путь к безграничным возможностям в облаке.
Бесплатные способы изучения облака AWS во время праздников