Démarrer avec AWS

Créer une application React complète

Créer une application Web simple avec AWS Amplify

Module 4 : Ajouter une API GraphQL et une base de données

Dans ce module, vous allez utiliser la CLI Amplify et des bibliothèques pour configurer et ajouter une API GraphQL à votre application.

Présentation

Maintenant que nous avons créé et configuré l'application avec l'authentification, ajoutons une API.

Dans ce module, nous allons ajouter une API à votre application en utilisant la CLI Amplify et des bibliothèques. L'API que vous allez créer est une API GraphQL qui utilise AWS AppSync (un service GraphQL géré) qui est soutenu par Amazon DynamoDB (une base de données NoSQL). (Pour une introduction à GraphQL, consultez le site Web de GraphQL.)

L'application que nous allons créer sera une application Notes qui permet aux utilisateurs de créer, supprimer et répertorier des notes. Cet exemple démontre clairement comment créer de nombreux types populaires d'applications CRUD+L (créer, lire, mettre à jour, supprimer et répertorier).

Qu'allez-vous accomplir ?

Dans ce module, vous allez :
  • Créer et déployer une API GraphQL
  • Écrire du code frontend pour interagir avec l'API

Concepts clés

API : fournit une interface de programmation qui permet à plusieurs intermédiaires logiciels de communiquer et d'interagir.

GraphQL : une implémentation d'API côté serveur et de langage de requête basée sur une représentation typée de votre application. Cette représentation d'API est déclarée en utilisant un schéma basé sur le système de type GraphQL.

 Temps nécessaire

15 minutes

 Services utilisés

Mise en œuvre

  • a. Ajoutez une API GraphQL à votre application en exécutant la commande suivante depuis la racine du répertoire de votre application :

    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. Ouvrez le schéma GraphQL dans l'éditeur de texte : /amplify/backend/api/<api_name>/schema.graphql.

    Mettez le fichier à jour avec le schéma suivant :

    type Note @model @auth(rules: [ { allow: public } ] ){
      id: ID!
      name: String!
      description: String
    }

    c. Enregistrez le fichier.

  • À présent que l'API est configurée localement, il est nécessaire de la déployer. Pour ce faire, exécutez la commande push Amplify :

    amplify push --y

    Cela aura trois effets :

    1. Créer l'API AWS AppSync
    2. Créer une table DynamoDB
    3. Créer les opérations GraphQL locales dans un dossier situé sous src/graphql que vous pouvez utiliser pour interroger l'API

    Pour afficher l'API GraphQL dans votre compte à tout moment, exécutez la commande suivante, puis sélectionnez GraphQL API dans le volet de navigation de gauche :

    amplify console api
    
    > Choose GraphQL
    

    Pour afficher l'API Amplify dans votre compte à tout moment, exécutez la commande suivante :

    amplify console
    ? Which site do you want to open? AWS console
  • Maintenant que le backend est déployé, écrivons du code pour permettre aux utilisateurs de créer, répertorier et supprimer des notes.

    Mettez à jour src/App.js avec le code suivant :

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

    Notre application possède trois fonctions principales :

    1. fetchNotes : cette fonction utilise la classe d'API pour envoyer une requête à l'API GraphQL et récupérer une liste de notes.
    2. createNote : cette fonction utilise également la classe d'API pour envoyer une mutation à l'API GraphQL. La principale différence est que dans cette fonction, nous transmettons les variables nécessaires à une mutation GraphQL afin de créer une nouvelle note avec les données du formulaire.
    3. deleteNote : à l'instar de createNote, cette fonction envoie une mutation GraphQL ainsi que des variables, mais au lieu de créer une note, nous en supprimons une.
  • Pour tester l'application, exécutez la commande Start :

    npm start

Conclusion

Vous avez créé une application Notes. En utilisant AWS Amplify, vous avez ajouté une API GraphQL et configuré des fonctionnalités de création, de lecture et de suppression dans votre application. Dans le module suivant, nous allons ajouter un service de stockage à votre application.

Cette page vous a-t-elle été utile ?

Augmenter la capacité de stockage