Перейти к основному содержимому

AWS AppSync с Spring Boot

· 4 мин. чтения

Задача: Наибольшая подстрока без повторений

Для заданной строки s, найдите длину наибольшей подстроки без повторяющихся символов. Подстрока — это непрерывная непустая последовательность символов внутри строки...

ANDROMEDA 42

1. Введение

В этой статье мы рассмотрим AWS AppSync с Spring Boot. AWS AppSync — это полностью управляемый сервис GraphQL корпоративного уровня с синхронизацией данных в реальном времени и функциями автономного программирования .

2. Настройте AWS AppSync

Во-первых, нам нужно иметь активную учетную запись AWS . Как только об этом позаботятся, мы можем искать AppSync из консоли AWS. Затем мы нажмем ссылку « Начало работы с AppSync» .

2.1. Создать API AppSync

Следуя кратким инструкциям по созданию нашего API, мы будем использовать пример проекта Event App . Затем нажмите Start , чтобы назвать и создать приложение:

./56410bcbf68e1b07e98fc4b3a1dcb8b0.jpg

Это приведет нас к нашей консоли приложения AppSync. Теперь давайте посмотрим на нашу модель GraphQL.

2.2. Модель событий GraphQL

GraphQL использует схему для определения того, какие данные доступны клиентам и как взаимодействовать с сервером GraphQL. Схема содержит запросы, мутации и множество объявленных типов.

Для простоты давайте взглянем на часть стандартной схемы AWS AppSync GraphQL, нашу модель событий :

type Event {
id: ID!
name: String
where: String
when: String
description: String
# Paginate through all comments belonging to an individual post.
comments(limit: Int, nextToken: String): CommentConnection
}

Событие — это объявленный тип с некоторыми строковыми полями и типом CommentConnection . Обратите внимание на восклицательный знак в поле ID . Это означает, что это обязательное/непустое поле.

Этого должно быть достаточно, чтобы понять основы нашей схемы. Однако для получения дополнительной информации перейдите на сайт GraphQL .

3. Весенний ботинок

Теперь, когда мы настроили все на стороне AWS, давайте посмотрим на наше клиентское приложение Spring Boot.

3.1. Зависимости Maven

Чтобы получить доступ к нашему API, мы будем использовать библиотеку Spring Boot Starter WebFlux для доступа к WebClient, новой альтернативе Spring для RestTemplate :

<dependency> 
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

Ознакомьтесь с нашей статьей о WebClient для получения дополнительной информации.

3.2. GraphQL-клиент

Чтобы сделать запрос к нашему API, мы начнем с создания нашего RequestBodySpec с помощью построителя WebClient , указав URL-адрес API AWS AppSync и ключ API:

WebClient.RequestBodySpec requestBodySpec = WebClient
.builder()
.baseUrl(apiUrl)
.defaultHeader("x-api-key", apiKey)
.build()
.method(HttpMethod.POST)
.uri("/graphql");

Не забудьте заголовок ключа API, x-api-key . Ключ API выполняет аутентификацию в нашем приложении AppSync.

4. Работа с типами GraphQL

4.1. Запросы

Настройка нашего запроса включает его добавление в элемент запроса в теле сообщения:

Map<String, Object> requestBody = new HashMap<>();
requestBody.put("query", "query ListEvents {"
+ " listEvents {"
+ " items {"
+ " id"
+ " name"
+ " where"
+ " when"
+ " description"
+ " }"
+ " }"
+ "}");

Используя наш requestBody, давайте вызовем наш WebClient для получения тела ответа:

WebClient.ResponseSpec response = requestBodySpec
.body(BodyInserters.fromValue(requestBody))
.accept(MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML)
.acceptCharset(StandardCharsets.UTF_8)
.retrieve();

Наконец, мы можем получить тело в виде строки :

String bodyString = response.bodyToMono(String.class).block();
assertNotNull(bodyString);
assertTrue(bodyString.contains("My First Event"));

4.2. Мутации

GraphQL позволяет обновлять и удалять данные с помощью мутаций. Мутации изменяют данные на стороне сервера по мере необходимости и следуют синтаксису, аналогичному запросам.

Давайте добавим новое событие с запросом на добавление мутации:

String queryString = "mutation add {"
+ " createEvent("
+ " name:\"My added GraphQL event\""
+ " where:\"Day 2\""
+ " when:\"Saturday night\""
+ " description:\"Studying GraphQL\""
+ " ){"
+ " id"
+ " name"
+ " description"
+ " }"
+ "}";

requestBody.put("query", queryString);

Одним из самых больших преимуществ AppSync и GraphQL в целом является то, что один URL-адрес конечной точки обеспечивает все функции CRUD для всей схемы.

Мы можем повторно использовать один и тот же WebClient для добавления, обновления и удаления данных. Мы просто получим новый ответ на основе обратного вызова в запросе или мутации.

assertNotNull(bodyString);
assertTrue(bodyString.contains("My added GraphQL event"));
assertFalse(bodyString.contains("where"));

5. Вывод

В этой статье мы рассмотрели, как быстро мы можем настроить приложение GraphQL с помощью AWS AppSync и получить к нему доступ с помощью клиента Spring Boot.

AppSync предоставляет разработчикам мощный GraphQL API через единую конечную точку. Для получения дополнительной информации ознакомьтесь с нашим руководством по созданию сервера GraphQL Spring Boot .

И, как всегда, код доступен на GitHub .