Всем привет ,

Сегодня мы рассмотрим обзор использования 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: движок GraphQL
  • GraphQLSchema: схема 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 во время праздников

Понимание 𝗻𝗴

Команды Linux для облачного обучения

Принципы программирования на Java: Закон Деметры