Erste Schritte mit AWS
Erstellen einer Full-Stack-React-Anwendung
Erstellen Sie eine einfache Web-Anwendung mit AWS Amplify
API und Datenbank hinzufügen
Modul 4: Hinzufügen einer GraphQL-API und einer Datenbank
In diesem Modul verwenden Sie die Amplify-CLI und -Bibliotheken zur Konfiguration und zum Hinzufügen einer GraphQL-API zu Ihrer Anwendung
Übersicht
Nachdem wir nun die Anwendung mit Authentifizierung erstellt und konfiguriert haben, fügen wir eine API hinzu.
In diesem Modul fügen Sie Ihrer Amplify-Anwendung unter Verwendung der Amplify-CLI und -Bibliotheken eine API hinzu. Bei der API, die Sie erstellen werden, handelt es sich um eine GraphQL-API, die AWS AppSync (einen verwalteten GraphQL-Service) nutzt, der von Amazon DynamoDB (einer NoSQL-Datenbank) unterstützt wird. (Eine Einführung in GraphQL finden Sie auf der GraphQL-Website.)
Bei der Anwendung, die wir entwickeln werden, handelt es sich um eine Notizen-Anwendung, mit der Benutzer Notizen erstellen, löschen und auflisten können. Dieses Beispiel gibt Ihnen eine gute Idee, wie Sie viele gängige Arten von CRUD+L-Anwendungen (Erstellen, Lesen, Aktualisieren, Löschen und Auflisten) erstellen.
Was Sie erreichen werden
- Erstellen und Bereitstellen einer GraphQL-API
- Schreiben von Frontend-Code für die Interaktion mit der API
Wichtige Konzepte
API – Stellt eine Programmierschnittstelle zur Verfügung, die Kommunikation und Interaktionen zwischen mehreren Software-Vermittlern ermöglicht.
GraphQL – Eine Abfragesprache und serverseitige API-Implementierung auf Grundlage einer typisierten Darstellung Ihrer Anwendung. Diese API-Darstellung wird unter Verwendung eines Schemas deklariert, das auf dem GraphQL-Typsystem basiert.
Benötigte Zeit
15 Minuten
Verwendete Services
Implementierung
-
Erstellen einer GraphQL-API und -Datenbank
a. Fügen Sie Ihrer Anwendung eine GraphQL-API hinzu, indem Sie den folgenden Befehl im Root Ihres Anwendung-Verzeichnisses ausführen:
amplify add api ? Select from one of the below mentioned services: GraphQL ? Here is the GraphQL API that we will create. Select a setting to edit or continue: Continue ? Choose a schema template: Single object with fields (e.g., "Todo" with ID, name, description) ? Do you want to edit the schema now? (Y/n) yes
b. Öffnen Sie das GraphQL-Schema in Ihrem Texteditor: /amplify/backend/api/<api_name>/schema.graphql.
Aktualisieren Sie die Datei mit dem folgenden Schema:
type Note @model @auth(rules: [ { allow: public } ] ){ id: ID! name: String! description: String }
c. Speichern Sie die Datei.
-
Bereitstellen der API
Nachdem die API nun lokal konfiguriert wurde, ist es an der Zeit, sie bereitzustellen. Führen Sie dazu den Amplify-Befehl push aus:
amplify push --y
Dadurch werden drei Dinge erreicht:
- Erstellung der AWS AppSync-API
- Erstellung einer DynamoDB-Tabelle
- Erstellung der lokalen GraphQL-Vorgänge in einem Ordner unter src/graphql, die Sie zur Abfrage der API verwenden können
Um die GraphQL-API jederzeit in Ihrem Konto anzuzeigen, führen Sie den folgenden Befehl aus und wählen Sie dann GraphQL-API im linken Navigationsbereich aus:
amplify console api > Choose GraphQL
Um die Amplify-Anwendung jederzeit in Ihrem Konto anzuzeigen, führen Sie den folgenden Befehl aus:
amplify console ? Which site do you want to open? AWS console
-
Schreiben von Frontend-Code für die Interaktion mit der API
Nachdem das Backend nun bereitgestellt wurde, schreiben wir Code, damit Benutzer Notizen erstellen, auflisten und löschen können.
Aktualisieren Sie src/App.js mit dem folgenden Code:
import React, { useState, useEffect } from "react"; import "./App.css"; import "@aws-amplify/ui-react/styles.css"; import { API } from "aws-amplify"; import { Button, Flex, Heading, Text, TextField, View, withAuthenticator, } from "@aws-amplify/ui-react"; import { listNotes } from "./graphql/queries"; import { createNote as createNoteMutation, deleteNote as deleteNoteMutation, } from "./graphql/mutations"; const App = ({ signOut }) => { const [notes, setNotes] = useState([]); useEffect(() => { fetchNotes(); }, []); async function fetchNotes() { const apiData = await API.graphql({ query: listNotes }); const notesFromAPI = apiData.data.listNotes.items; setNotes(notesFromAPI); } async function createNote(event) { event.preventDefault(); const form = new FormData(event.target); const data = { name: form.get("name"), description: form.get("description"), }; await API.graphql({ query: createNoteMutation, variables: { input: data }, }); fetchNotes(); event.target.reset(); } async function deleteNote({ id }) { const newNotes = notes.filter((note) => note.id !== id); setNotes(newNotes); await API.graphql({ query: deleteNoteMutation, variables: { input: { id } }, }); } return ( <View className="App"> <Heading level={1}>My Notes App</Heading> <View as="form" margin="3rem 0" onSubmit={createNote}> <Flex direction="row" justifyContent="center"> <TextField name="name" placeholder="Note Name" label="Note Name" labelHidden variation="quiet" required /> <TextField name="description" placeholder="Note Description" label="Note Description" labelHidden variation="quiet" required /> <Button type="submit" variation="primary"> Create Note </Button> </Flex> </View> <Heading level={2}>Current Notes</Heading> <View margin="3rem 0"> {notes.map((note) => ( <Flex key={note.id || note.name} direction="row" justifyContent="center" alignItems="center" > <Text as="strong" fontWeight={700}> {note.name} </Text> <Text as="span">{note.description}</Text> <Button variation="link" onClick={() => deleteNote(note)}> Delete note </Button> </Flex> ))} </View> <Button onClick={signOut}>Sign Out</Button> </View> ); }; export default withAuthenticator(App);
Unsere Anwendung hat drei Hauptfunktionen:
- fetchNotes – Diese Funktion verwendet die API-Klasse, um eine Anfrage an die GraphQL-API zu senden und eine Liste von Notizen abzurufen.
- createNote – Diese Funktion verwendet auch die API-Klasse, um eine Mutation an die GraphQL-API zu senden. Der Hauptunterschied besteht darin, dass wir in dieser Funktion die für eine GraphQL-Mutation benötigten Variablen übergeben, damit wir mit den Formulardaten eine neue Notiz erstellen können.
- deleteNote – Ähnlich wie createNote sendet diese Funktion eine GraphQL-Mutation zusammen mit einigen Variablen, aber anstatt eine Notiz zu erstellen, löschen wir eine Notiz.
-
Anwendung ausführen
Um die Anwendung zu testen, führen Sie den Startbefehl aus:
npm start
Zusammenfassung
Sie haben jetzt eine Notiz-Anwendung erstellt. Mit AWS Amplify haben Sie eine GraphQL-API hinzugefügt und die Erstellungs-, Lese- und Löschfunktionen in Ihrer Anwendung konfiguriert. Im nächsten Modul fügen wir Ihrer Anwendung einen Speicher-Service hinzu.