AWS AppSync avec Spring Boot

1. Introduction

Dans cet article, nous explorerons AWS AppSync avec Spring Boot. AWS AppSync est un service GraphQL de niveau entreprise entièrement géré avec une synchronisation des données en temps réel et des fonctionnalités de programmation hors ligne .

2. Configurez AWS AppSync

Tout d'abord, nous devons avoir un compte AWS actif. Une fois que cela est pris en charge, nous pouvons rechercher AppSync à partir de la console AWS. Ensuite, nous cliquons sur le lien Premiers pas avec AppSync .

2.1. Créer l'API AppSync

En suivant les instructions de démarrage rapide pour créer notre API, nous utiliserons l' exemple de projet d' application d'événement . Cliquez ensuite sur Démarrer pour nommer et créer l'application:

Cela nous amènera à notre console d'application AppSync. Jetons maintenant un coup d'œil à notre modèle GraphQL.

2.2. Modèle d'événement GraphQL

GraphQL utilise un schéma pour définir quelles données sont disponibles pour les clients et comment interagir avec le serveur GraphQL. Le schéma contient des requêtes, des mutations et une variété de types déclarés.

Pour plus de simplicité, examinons une partie du schéma AWS AppSync GraphQL par défaut, notre modèle d' événement :

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 }

Event est un type déclaré avec certains champs String et un type CommentConnection . Notez le point d'exclamation dans le champ ID . Cela signifie qu'il s'agit d'un champ obligatoire / non nul.

Cela devrait suffire à comprendre les bases de notre schéma. Cependant, pour plus d'informations, rendez-vous sur le site GraphQL.

3. Spring Boot

Maintenant que nous avons tout configuré du côté AWS, examinons notre application client Spring Boot.

3.1. Dépendances de Maven

Pour accéder à notre API, nous utiliserons la bibliothèque Spring Boot Starter WebFlux pour accéder à WebClient, la nouvelle alternative de Spring à RestTemplate :

  org.springframework.boot spring-boot-starter-webflux 

Consultez notre article sur WebClient pour plus d'informations.

3.2. Client GraphQL

Pour faire une demande à notre API, nous commencerons par créer notre RequestBodySpec à l'aide du générateur WebClient , en fournissant l'URL d'API AWS AppSync et la clé API:

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

N'oubliez pas l'en-tête de la clé API, x-api-key . La clé API s'authentifie auprès de notre application AppSync.

4. Travailler avec les types GraphQL

4.1. Requêtes

La configuration de notre requête implique de l'ajouter à un élément de requête dans le corps du message:

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

En utilisant notre requestBody, appelons notre WebClient pour récupérer le corps de la réponse:

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

Enfin, nous pouvons obtenir le corps sous forme de chaîne :

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

4.2. Les mutations

GraphQL permet de mettre à jour et de supprimer des données grâce à l'utilisation de mutations. Les mutations modifient les données côté serveur selon les besoins et suivent une syntaxe similaire pour les requêtes.

Ajoutons un nouvel événement avec une requête d' ajout de mutation:

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);

L'un des plus grands avantages d'AppSync, et de GraphQL en général, est qu'une seule URL de point de terminaison fournit toutes les fonctionnalités CRUD sur l'ensemble du schéma.

Nous pouvons réutiliser le même WebClient pour ajouter, mettre à jour et supprimer des données. Nous obtiendrons simplement une nouvelle réponse basée sur le rappel dans la requête ou la mutation.

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

5. Conclusion

Dans cet article, nous avons examiné la rapidité avec laquelle nous pouvons configurer une application GraphQL avec AWS AppSync et y accéder avec un client Spring Boot.

AppSync fournit aux développeurs une puissante API GraphQL via un seul point de terminaison. Pour plus d'informations, consultez notre tutoriel sur la création d'un serveur GraphQL Spring Boot.

Et, comme toujours, le code est disponible sur sur GitHub.