Erste Schritte mit AWS

Erstellen einer Full-Stack-React-Anwendung

Erstellen Sie eine einfache Web-Anwendung mit AWS Amplify

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

In diesem Modul werden Sie Folgendes lernen:
  • 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

  • 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.

  • 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:

    1. Erstellung der AWS AppSync-API
    2. Erstellung einer DynamoDB-Tabelle
    3. 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
  • 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:

    1. fetchNotes – Diese Funktion verwendet die API-Klasse, um eine Anfrage an die GraphQL-API zu senden und eine Liste von Notizen abzurufen.
    2. 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.
    3. 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.
  • 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.

War diese Seite hilfreich?

Speicher hinzufügen