AWS AppSync met Spring Boot

1. Inleiding

In dit artikel zullen we AWS AppSync met Spring Boot verkennen. AWS AppSync is een volledig beheerde GraphQL-service op bedrijfsniveau met realtime gegevenssynchronisatie en offline programmeerfuncties.

2. Stel AWS AppSync in

Ten eerste hebben we een actief AWS-account nodig. Zodra dat is geregeld, kunnen we zoeken naar AppSync vanuit de AWS-console. Dan klikken we op de Aan de slag met AppSync koppeling.

2.1. Maak AppSync API

Als we de snelstartinstructies volgen om onze API te maken, gebruiken we de Evenement-app voorbeeldproject. Dan klikken Begin om de app een naam te geven en te maken:

Dit brengt ons naar onze AppSync app-console. Laten we nu eens kijken naar ons GraphQL-model.

2.2. GraphQL-gebeurtenismodel

GraphQL gebruikt een schema om te bepalen welke gegevens beschikbaar zijn voor klanten en hoe ze moeten communiceren met de GraphQL-server. Het schema bevat query's, mutaties en een verscheidenheid aan gedeclareerde typen.

Laten we voor de eenvoud eens kijken naar een deel van het standaard AWS AppSync GraphQL-schema, ons Evenement model:

typ Evenement {id: ID! name: String waar: String when: String description: String # Pagineer door alle commentaren die bij een individueel bericht horen. comments (limit: Int, nextToken: String): CommentConnection}

Evenement is een gedeclareerd type bij sommigen Draad velden en een ReactieVerbinding type. Let op het uitroepteken op de ID kaart veld. Dit betekent dat het een verplicht / niet-nulveld is.

Dit zou voldoende moeten zijn om de basis van ons schema te begrijpen. Ga echter voor meer informatie naar de GraphQL-site.

3. Veerboot

Nu we alles aan de AWS-kant hebben ingesteld, gaan we eens kijken naar onze Spring Boot-clienttoepassing.

3.1. Afhankelijkheden van Maven

Om toegang te krijgen tot onze API, zullen we de Spring Boot Starter WebFlux-bibliotheek gebruiken voor toegang tot Web cliënt, Spring's nieuwe alternatief voor RestTemplate:

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

Bekijk ons ​​artikel over Web cliënt voor meer informatie.

3.2. GraphQL-client

Om een ​​verzoek in te dienen bij onze API, beginnen we met het maken van onze RequestBodySpec de ... gebruiken Web cliënt bouwer, het verstrekken van de AWS AppSync API-URL en API-sleutel:

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

Vergeet de API-key-header niet, x-api-key. De API-sleutel wordt geverifieerd bij onze AppSync-app.

4. Werken met GraphQL-typen

4.1. Vragen

Het instellen van onze query houdt in dat u deze toevoegt aan een vraag element in de berichttekst:

Map requestBody = nieuwe HashMap (); requestBody.put ("query", "query ListEvents {" + "listEvents {" + "items {" + "id" + "naam" + "waar" + "when" + "description" + "}" + "} "+"} ");

Met behulp van onze requestBody, laten we onze aanroepen Web cliënt om de antwoordtekst op te halen:

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

Eindelijk kunnen we het lichaam krijgen als een Draad:

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

4.2. Mutaties

GraphQL maakt het mogelijk om gegevens bij te werken en te verwijderen door het gebruik van mutaties. Mutaties wijzigen de server-side data indien nodig en volgen een gelijkaardige syntaxis voor queries.

Laten we een nieuw evenement toevoegen met een toevoegen mutatie vraag:

String queryString = "mutation add {" + "createEvent (" + "name: \" Mijn toegevoegde GraphQL-evenement \ "" + "waar: \" Dag 2 \ "" + "wanneer: \" Zaterdagavond \ "" + " description: \ "GraphQL studeren \" "+") {"+" id "+" name "+" description "+"} "+"} "; requestBody.put ("query", queryString);

Een van de grootste voordelen van AppSync, en van GraphQL in het algemeen, is dat één eindpunt-URL alle CRUD-functionaliteit biedt in het hele schema.

We kunnen hetzelfde hergebruiken Web cliënt om gegevens toe te voegen, bij te werken en te verwijderen. We krijgen gewoon een nieuw antwoord op basis van de callback in de query of mutatie.

assertNotNull (bodyString); assertTrue (bodyString.contains ("Mijn toegevoegde GraphQL-gebeurtenis")); assertFalse (bodyString.contains ("where"));

5. Conclusie

In dit artikel hebben we gekeken hoe snel we een GraphQL-app kunnen opzetten met AWS AppSync en deze kunnen openen met een Spring Boot-client.

AppSync biedt ontwikkelaars een krachtige GraphQL API via een enkel eindpunt. Bekijk voor meer informatie onze tutorial over het maken van een GraphQL Spring Boot-server.

En, zoals altijd, is de code beschikbaar op GitHub.