AWS AppSync med Spring Boot

1. Introduktion

I denne artikel udforsker vi AWS AppSync med Spring Boot. AWS AppSync er en fuldt administreret grafQL-tjeneste på virksomhedsniveau med datasynkronisering i realtid og offline programmeringsfunktioner.

2. Opsæt AWS AppSync

Først skal vi have en aktiv AWS-konto. Når det er taget hånd om, kan vi søge efter AppSync fra AWS-konsollen. Så klikker vi på Kom godt i gang med AppSync link.

2.1. Opret AppSync API

Efter lynstartinstruktionerne til oprettelse af vores API bruger vi Begivenhedsapp prøve projekt. Klik derefter på Start at navngive og oprette appen:

Dette bringer os til vores AppSync-appkonsol. Lad os nu se på vores GraphQL-model.

2.2. GraphQL begivenhedsmodel

GraphQL bruger et skema til at definere, hvilke data der er tilgængelige for klienter, og hvordan man interagerer med GraphQL-serveren. Skemaet indeholder forespørgsler, mutationer og en række erklærede typer.

For nemheds skyld skal vi se på en del af standard AWS AppSync GraphQL-skemaet, vores Begivenhed model:

skriv begivenhed {id: ID! navn: String hvor: String når: Stringbeskrivelse: String # Paginere gennem alle kommentarer, der tilhører et individuelt indlæg. kommentarer (limit: Int, nextToken: String): CommentConnection}

Begivenhed er en erklæret type med nogle Snor felter og en Kommentar Forbindelse type. Bemærk udråbstegn på ID Mark. Dette betyder, at det er et obligatorisk / ikke-nul felt.

Dette skal være nok til at forstå det grundlæggende i vores skema. Men for mere information, gå over til GraphQL-webstedet.

3. Spring Boot

Nu hvor vi har oprettet alt på AWS-siden, lad os se på vores Spring Boot-klientapplikation.

3.1. Maven afhængigheder

For at få adgang til vores API bruger vi Spring Boot Starter WebFlux-biblioteket til adgang til Webklient, Forårets nye alternativ til RestTemplate:

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

Tjek vores artikel om Webklient for mere information.

3.2. GraphQL klient

For at stille en anmodning til vores API starter vi med at oprette vores RequestBodySpec bruger Webklient Bygger, leverer AWS AppSync API URL og API-nøgle:

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

Glem ikke API-nøgleoverskriften, x-api-nøgle. API-nøglen godkendes til vores AppSync-app.

4. Arbejde med GraphQL-typer

4.1. Forespørgsler

Opsætning af vores forespørgsel indebærer at tilføje den til en forespørgsel element i meddelelsesteksten:

Map requestBody = ny HashMap (); requestBody.put ("query", "query ListEvents {" + "listEvents {" + "items {" + "id" + "name" + "hvor" + "når" + "beskrivelse" + "}" + "} "+"} ");

Brug af vores anmodningKrop, lad os påkalde vores Webklient for at hente responsorganet:

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

Endelig kan vi få kroppen som en Snor:

String bodyString = respons.bodyToMono (String.class) .block (); assertNotNull (bodyString); assertTrue (bodyString.contains ("Min første begivenhed"));

4.2. Mutationer

GraphQL giver mulighed for opdatering og sletning af data ved brug af mutationer. Mutationer ændrer dataene på serversiden efter behov og følger en lignende syntaks som forespørgsler.

Lad os tilføje en ny begivenhed med en tilføje mutationsforespørgsel:

String queryString = "mutation tilføj {" + "createEvent (" + "navn: \" Min tilføjede GraphQL begivenhed \ "" + "hvor: \" Dag 2 \ "" + "når: \" lørdag aften \ "" + " beskrivelse: \ "Studerer GraphQL \" "+") {"+" id "+" navn "+" beskrivelse "+"} "+"} "; requestBody.put ("forespørgsel", queryString);

En af de største fordele ved AppSync og GraphQL generelt er, at en slutpunkts-URL giver al CRUD-funktionalitet på tværs af hele skemaet.

Vi kan genbruge det samme Webklient for at tilføje, opdatere og slette data. Vi får simpelthen et nyt svar baseret på tilbagekald i forespørgslen eller mutationen.

assertNotNull (bodyString); assertTrue (bodyString.contains ("Min tilføjede GraphQL-begivenhed")); assertFalse (bodyString.contains ("hvor"));

5. Konklusion

I denne artikel så vi på, hvor hurtigt vi kan oprette en GraphQL-app med AWS AppSync og få adgang til den med en Spring Boot-klient.

AppSync giver udviklere en kraftfuld GraphQL API gennem et enkelt slutpunkt. For mere information, se vores tutorial om oprettelse af en GraphQL Spring Boot-server.

Og som altid er koden tilgængelig på GitHub.