Introducción a AWS
Crear una aplicación React de pila completa
Crear una aplicación web simple con AWS Amplify
agregar api y base de datos
Módulo 4: Agregar una GraphQL API y base de datos
En este módulo, usará las CLI y bibliotecas de Amplify para configurar y agregar un GraphQL API a su aplicación
Información general
Ahora que hemos creado y configurado la aplicación con autenticación, agreguemos una API.
En este módulo, agregará una API a su aplicación mediante la CLI y las bibliotecas de Amplify. La API que creará es una GraphQL API que aprovecha AWS AppSync (un servicio administrado de GraphQL) que está respaldado por Amazon DynamoDB (una base de datos de NoSQL). (Para obtener una introducción a GraphQL, consulta el sitio web de GraphQL.)
La aplicación que crearemos será una aplicación de Notas que permitirá que los usuarios creen, eliminen, y listen notas. Este ejemplo le dará una buena idea de cómo crear muchos tipos de CRUD+L populares (crear, leer, actualizar, eliminar y listar) aplicaciones.
Qué logrará
- Crear e implementar una GraphQL API
- Escribir un código front-end para interactuar con la API
Conceptos clave
API – Proporciona una interfaz de programación que permite la comunicación y las interacciones entre diversos intermediarios de software.
GraphQL – Una implementación de API del lado del servidor e idioma de consulta basada en una representación escrita a máquina de su aplicación. Se declara esta representación de API utilizando un esquema basado en el sistema de tipo GraphQL.
Tiempo de realización
15 minutos
Servicios utilizados
Implementación
-
Crear una API de GraphQL y base de datos
a. Agregar una GraphQL API a su aplicación ejecutando el siguiente comando desde la raíz del directorio de su aplicación:
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. Abra el esquema GraphQL en su editor de texto: /amplify/backend/api/<api_name>/schema.graphql.
Actualice el archivo con el siguiente esquema:
type Note @model @auth(rules: [ { allow: public } ] ){ id: ID! name: String! description: String }
c. Guarde el archivo.
-
Implementar la API
Ahora que se ha configurado la API a nivel local, es hora de implementarla. Para esto, ejecute el comando push de Amplify:
amplify push --y
Esto realizará tres cosas:
- Creará la AWS AppSync API
- Crear una tabla de DynamoDB
- Creará las operaciones GraphQL locales en una carpeta que se encuentra en src/graphql y que puede usar para consultar la API
Para ver la GraphQL API en su cuenta en cualquier momento, ejecute el siguiente comando y, luego, seleccione la GraphQL API en el panel de navegación izquierdo:
amplify console api > Choose GraphQL
Para ver la aplicación de Amplify en su cuenta en cualquier momento, ejecute el siguiente comando:
amplify console ? Which site do you want to open? AWS console
-
Escribir un código front-end para interactuar con la API
Ahora que se ha implementado el back-end, escribamos algo de código para permitir que los usuarios creen, enumeren, y eliminen notas.
Actualice src/App.js con el siguiente código:
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);
Nuestra aplicación tiene tres funciones principales:
- fetchNotes: Esta función utiliza el tipo de API para enviar una consulta a la GraphQL API y recuperar una lista de notas.
- createNote: Esta función también usa la clase API para enviar una mutación a la GraphQL API. La diferencia principal es que en esta función pasamos las variables necesarias para una mutación de GraphQL para poder crear una nueva nota con los datos del formulario.
- deleteNote: Al igual que createNote, esta función envía una mutación de GraphQL junto con algunas variables, pero en lugar de crear una nota, eliminamos una nota.
-
Ejecutar la aplicación
Para probar la aplicación, ejecute el comando de inicio:
npm start
Conclusión
Ha creado una aplicación de Notas. Mediante AWS Amplify, agregó una GraphQL API y configuró una funcionalidad para crear, leer, y eliminar en su aplicación. En el siguiente módulo, agregaremos un servicio de almacenamiento a su aplicación.