AWS AppSync con Spring Boot

1. Introduzione

In questo articolo esploreremo AWS AppSync con Spring Boot. AWS AppSync è un servizio GraphQL di livello aziendale completamente gestito con sincronizzazione dei dati in tempo reale e funzionalità di programmazione offline .

2. Configurazione di AWS AppSync

Innanzitutto, dobbiamo avere un account AWS attivo. Una volta risolto, possiamo cercare AppSync dalla console AWS. Quindi faremo clic sul collegamento Guida introduttiva ad AppSync .

2.1. Crea API AppSync

Seguendo le istruzioni di avvio rapido per creare la nostra API, utilizzeremo il progetto di esempio dell'app Event . Quindi fare clic su Avvia per denominare e creare l'app:

Questo ci porterà alla nostra console dell'app AppSync. Ora diamo un'occhiata al nostro modello GraphQL.

2.2. Modello di eventi GraphQL

GraphQL utilizza uno schema per definire quali dati sono disponibili per i client e come interagire con il server GraphQL. Lo schema contiene query, mutazioni e una varietà di tipi dichiarati.

Per semplicità, diamo un'occhiata a parte dello schema GraphQL di AWS AppSync predefinito, il nostro modello di eventi :

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 è un tipo dichiarato con alcuni campi String e un tipo CommentConnection . Notare il punto esclamativo nel campo ID . Ciò significa che è un campo obbligatorio / non nullo.

Questo dovrebbe essere sufficiente per comprendere le basi del nostro schema. Tuttavia, per ulteriori informazioni, vai al sito GraphQL.

3. Spring Boot

Ora che abbiamo impostato tutto sul lato AWS, diamo un'occhiata alla nostra applicazione client Spring Boot.

3.1. Dipendenze di Maven

Per accedere alla nostra API, utilizzeremo la libreria Spring Boot Starter WebFlux per l'accesso a WebClient, la nuova alternativa di Spring a RestTemplate :

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

Consulta il nostro articolo su WebClient per ulteriori informazioni.

3.2. Client GraphQL

Per effettuare una richiesta alla nostra API, inizieremo creando il nostro RequestBodySpec utilizzando il builder WebClient , fornendo l'URL dell'API AWS AppSync e la chiave API:

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

Non dimenticare l'intestazione della chiave API, x-api-key . La chiave API si autentica nella nostra app AppSync.

4. Lavorare con i tipi GraphQL

4.1. Interrogazioni

L'impostazione della nostra query implica l'aggiunta a un elemento della query nel corpo del messaggio:

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

Usando il nostro requestBody, invochiamo il nostro WebClient per recuperare il corpo della risposta:

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

Infine, possiamo ottenere il corpo come una stringa :

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

4.2. Mutazioni

GraphQL consente di aggiornare ed eliminare i dati tramite l'uso di mutazioni. Le mutazioni modificano i dati lato server secondo necessità e seguono una sintassi simile alle query.

Aggiungiamo un nuovo evento con una query di aggiunta di mutazione:

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

Uno dei maggiori vantaggi di AppSync e di GraphQL in generale è che un URL dell'endpoint fornisce tutte le funzionalità CRUD nell'intero schema.

Possiamo riutilizzare lo stesso WebClient per aggiungere, aggiornare ed eliminare i dati. Otterremo semplicemente una nuova risposta in base alla richiamata nella query o nella mutazione.

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

5. conclusione

In questo articolo, abbiamo esaminato la velocità con cui è possibile configurare un'app GraphQL con AWS AppSync e accedervi con un client Spring Boot.

AppSync fornisce agli sviluppatori una potente API GraphQL attraverso un singolo endpoint. Per ulteriori informazioni, dai un'occhiata al nostro tutorial sulla creazione di un server GraphQL Spring Boot.

E, come sempre, il codice è disponibile su GitHub.