Memulai AWS
Membangun Aplikasi React Full-Stack
Membuat aplikasi web sederhana menggunakan AWS Amplify
menambahkan api dan basis data
Modul 4: Menambahkan API dan Basis Data GraphQL
Dalam modul ini, Anda akan menggunakan CLI dan pustaka Amplify untuk mengonfigurasi dan menambahkan API GraphQL ke aplikasi Anda
Gambaran Umum
Setelah kita membuat dan mengonfigurasi aplikasi dengan autentikasi, mari tambahkan API.
Dalam modul ini, Anda akan menambahkan API ke aplikasi Anda menggunakan CLI dan pustaka Amplify. API yang akan Anda buat adalah API GraphQL yang menggunakan AWS AppSync (layanan GraphQL terkelola), yang didukung oleh Amazon DynamoDB (basis data NoSQL). (Untuk pengantar GraphQL, lihat situs web GraphQL.)
Aplikasi yang kami bangun akan menjadi aplikasi Note yang akan memungkinkan pengguna untuk membuat, menghapus, dan membuat daftar catatan. Contoh ini akan memberi Anda ide bagus tentang cara membangun banyak jenis aplikasi CRUD+L (buat, baca, perbarui, hapus, dan daftar) yang populer.
Hal-hal yang akan Anda capai
- Membuat dan melakukan deployment API GraphQL
- Tulis kode frontend untuk berinteraksi dengan API
Konsep utama
API — Menyediakan antarmuka pemrograman yang memungkinkan komunikasi dan interaksi antara banyak perantara perangkat lunak.
GraphQL — Bahasa kueri dan implementasi API sisi server berdasarkan representasi tipe aplikasi Anda. Representasi API ini dideklarasikan menggunakan skema berdasarkan sistem tipe GraphQL.
Waktu penyelesaian
15 menit
Layanan yang digunakan
Implementasi
-
Buat API dan basis data GraphQL
a. Tambahkan API GraphQL ke aplikasi Anda dengan menjalankan perintah berikut dari root direktori aplikasi Anda:
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. Buka skema GraphQL di editor teks Anda: /amplify/backend/api/<api_name>/schema.graphql.
Perbarui file dengan skema berikut:
type Note @model @auth(rules: [ { allow: public } ] ){ id: ID! name: String! description: String }
c. Simpan file.
-
Deploy API
Setelah API dikonfigurasi secara lokal, kini saatnya untuk melakukan deployment API. Untuk melakukannya, jalankan perintah push Amplify:
amplify push --y
Perintah ini akan melakukan tiga hal:
- Membuat API AWS AppSync
- Membuat tabel DynamoDB
- Membuat operasi GraphQL lokal di folder yang terletak di src/graphql dan dapat Anda gunakan untuk mengueri API
Untuk melihat API GraphQL di akun Anda kapan saja, jalankan perintah berikut, lalu pilih API GraphQL di panel navigasi kiri:
amplify console api > Choose GraphQL
Untuk melihat aplikasi Amplify di akun Anda kapan saja, jalankan perintah berikut:
amplify console ? Which site do you want to open? AWS console
-
Tulis kode frontend untuk berinteraksi dengan API
Setelah backend di-deploy, mari kita menulis beberapa kode untuk memungkinkan pengguna membuat, daftar, dan menghapus catatan.
Perbarui src/App.js dengan kode berikut:
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);
Aplikasi kami memiliki tiga fungsi utama:
- fetchNotes - Fungsi ini menggunakan kelas API untuk mengirim kueri ke API GraphQL dan mengambil daftar catatan.
- createNote - Fungsi ini juga menggunakan kelas API untuk mengirim mutasi ke API GraphQL. Perbedaan utama adalah bahwa dalam fungsi ini kita meneruskan variabel yang diperlukan untuk mutasi GraphQL sehingga kita dapat membuat catatan baru dengan data formulir.
- deleteNote - Seperti createNote, fungsi ini mengirimkan mutasi GraphQL bersama dengan beberapa variabel. Namun, alih-alih membuat catatan, kami justru menghapusnya.
-
Jalankan aplikasi
Untuk menguji aplikasi, jalankan perintah start:
npm start
Kesimpulan
Setelah Anda telah membuat aplikasi Note. Dengan AWS Amplify, Anda dapat menambahkan API GraphQL dan mengonfigurasi fungsionalitas buat, baca, dan hapus di aplikasi Anda. Pada modul berikutnya, kami akan menambahkan layanan penyimpanan ke aplikasi Anda.