AWS AppSync mit Spring Boot

1. Einleitung

In diesem Artikel werden wir AWS AppSync mit Spring Boot untersuchen. AWS AppSync ist ein vollständig verwalteter GraphQL-Dienst auf Unternehmensebene mit Echtzeit-Datensynchronisierung und Offline-Programmierfunktionen .

2. Richten Sie AWS AppSync ein

Zunächst benötigen wir ein aktives AWS-Konto. Sobald dies erledigt ist, können wir über die AWS-Konsole nach AppSync suchen. Dann klicken wir auf den Link Erste Schritte mit AppSync .

2.1. Erstellen Sie die AppSync-API

Nach den Anweisungen zum Schnellstart zum Erstellen unserer API verwenden wir das Beispielprojekt Event App . Klicken Sie dann auf Start , um die App zu benennen und zu erstellen:

Dadurch gelangen wir zu unserer AppSync-App-Konsole. Schauen wir uns nun unser GraphQL-Modell an.

2.2. GraphQL-Ereignismodell

GraphQL verwendet ein Schema, um zu definieren, welche Daten für Clients verfügbar sind und wie mit dem GraphQL-Server interagiert werden soll. Das Schema enthält Abfragen, Mutationen und eine Vielzahl deklarierter Typen.

Schauen wir uns der Einfachheit halber einen Teil des Standard-AWS AppSync GraphQL-Schemas an, unser Ereignismodell :

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 }

Ereignis ist ein erklärter Typ mit einigen String Feldern und einem CommentConnection Typ. Beachten Sie das Ausrufezeichen im ID- Feld. Dies bedeutet, dass es sich um ein erforderliches / nicht null-Feld handelt.

Dies sollte ausreichen, um die Grundlagen unseres Schemas zu verstehen. Weitere Informationen finden Sie auf der GraphQL-Site.

3. Spring Boot

Nachdem wir alles auf der AWS-Seite eingerichtet haben, schauen wir uns unsere Spring Boot-Clientanwendung an.

3.1. Maven-Abhängigkeiten

Für den Zugriff auf unsere API verwenden wir die Spring Boot Starter WebFlux-Bibliothek für den Zugriff auf WebClient, die neue Alternative von Spring zu RestTemplate :

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

Weitere Informationen finden Sie in unserem Artikel über WebClient .

3.2. GraphQL Client

Um eine Anfrage an unsere API zu machen, werden wir durch die Schaffung von unseren beginnen RequestBodySpec mit dem WebClient - Builder , die Bereitstellung der AWS AppSync API URL und API - Schlüssel:

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

Vergessen Sie nicht den API-Schlüsselheader x-api-key . Der API-Schlüssel authentifiziert sich bei unserer AppSync-App.

4. Arbeiten mit GraphQL-Typen

4.1. Abfragen

Zum Einrichten unserer Abfrage müssen Sie sie einem Abfrageelement im Nachrichtentext hinzufügen :

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

Mit unserem requestBody, lassen Sie uns invoke unsere WebClient den Antworttext abzurufen:

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

Schließlich können wir den Körper als String erhalten :

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

4.2. Mutationen

GraphQL ermöglicht das Aktualisieren und Löschen von Daten mithilfe von Mutationen. Mutationen ändern die serverseitigen Daten nach Bedarf und folgen einer ähnlichen Syntax wie Abfragen.

Fügen wir ein neues Ereignis mit einer Abfrage zum Hinzufügen von Mutationen hinzu:

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

Einer der größten Vorteile von AppSync und GraphQL im Allgemeinen besteht darin, dass eine Endpunkt-URL alle CRUD-Funktionen im gesamten Schema bereitstellt.

Wir können denselben WebClient wiederverwenden , um Daten hinzuzufügen, zu aktualisieren und zu löschen. Wir erhalten einfach eine neue Antwort basierend auf dem Rückruf in der Abfrage oder Mutation.

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

5. Schlussfolgerung

In diesem Artikel haben wir uns angesehen, wie schnell wir eine GraphQL-App mit AWS AppSync einrichten und mit einem Spring Boot-Client darauf zugreifen können.

AppSync bietet Entwicklern eine leistungsstarke GraphQL-API über einen einzigen Endpunkt. Weitere Informationen finden Sie in unserem Tutorial zum Erstellen eines GraphQL Spring Boot-Servers.

Und wie immer ist der Code auf GitHub verfügbar.