Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. React
Code

Bagaimana Cara Membangun Serverless GraphQL dan REST API menggunakan AWS Amplify

by
Difficulty:IntermediateLength:LongLanguages:

Indonesian (Bahasa Indonesia) translation by Imam Firmansyah (you can also view the original English article)

AWS Amplify memungkinkan pengembang untuk membuat dan terhubung dengan cepat ke layanan canggih di cloud. Dalam tutorial sebelumnya, anda belajar cara mengatur Amplify dalam proyek React dan bagaimana menggunakan otentikasi, penyimpanan S3, dan hosting. Jika anda membutuhkan pengantar untuk AWS Amplify, pastikan untuk memeriksa tulisan tersebut terlebih dahulu.

Dalam tulisan ini, kita akan melangkah lebih jauh dengan React dan AWS Amplify, mengeksplorasi fitur seperti mengelola data layer GraphQL dan fungsi lambda.

Menambahkan GraphQL API

Mari kita lihat cara menambahkan API GraphQL AWS AppSync ke dalam proyek dan mulai menggunakannya dari dalam proyek kami.

API yang akan kita buat akan menjadi restoran API bagi kita untuk mengikuti restoran yang kita suka atau ingin kunjungi.

Untuk menambahkan GraphQL API ke proyek, kami dapat menggunakan perintah berikut:

Anda akan diminta untuk menjawab beberapa pertanyaan konfigurasi. Pilih opsi berikut:

  • service type / jenis layanan: GraphQL
  • API name / nama API: TutsGraphQLAPI
  • authorization type / Jenis otorisasi: API key
  • annotated GraphQL schema / skema GraphQL beranotasi: N
  • guided schema creation / panduan pembuatan skema: Y
  • What best describes your project? / Apa yang paling menggambarkan proyek anda? Objek tunggal dengan bidang (misalkan. "Todo" dengan ID, nama, deskripsi)
  • Do you want to edit the schema now? / Apakah anda ingin mengedit schema sekarang? Y

Bila diminta, perbarui skema berikut, dan kemudian simpan berkas:

Ini hanya menciptakan satu tipe data — Restaurant — dengan kolom id dan nama yang diperlukan serta deskripsi yang opsional.

Selanjutnya, mari dorong pembaruan ke akun kami:

Sekarang, API telah dibuat!

Apa yang baru saja terjadi di sini? AWS Amplify menggunakan library GraphQL Transform bawaan untuk membuat API GraphQL secara lengkap, termasuk tambahan skema, resolver, dan data source.

Untuk melihat API AppSync AWS baru setiap saat setelah pembuatannya, anda dapat membuka dasborboard di https://console.aws.amazon.com/appsync dan klik pada API yang baru saja dibuat (pastikan bahwa wilayah (region) anda adalah diatur dengan benar). Dari dalam dasborard AWS AppSync, anda dapat melihat konfigurasi API dan melakukan query dan mutasi di API.

Menjalankan Mutasi GraphQL

Selanjutnya, mari kita berinteraksi dengan API dari Aplikasi React kami.

Hal pertama yang kami ingin lakukan adalah membuat mutasi. Dalam GraphQL, mutasi setara dengan operasi REST PUT, PUSH, dan DELETE. Karena kami belum memiliki data apa pun pada basis data, kami akan membuat mutasi untuk membuat item restoran baru.

Untuk melakukannya, kami akan mengimpor API dan graphqlOperation dari AWS Amplify, mendefinisikan mutasi, dan kemudian mengeksekusi mutasi.

Mari kita lihat contoh aplikasi yang mengimplementasikan suatu mutasi. Pada App.js, pertama-tama kita mengimpor React, CSS aplikasi kami, dan komponen AWS Amplify yang diperlukan.

Selanjutnya, kami mendefinisikan mutasi untuk membuat restoran. Kami menetapkan bahwa mutasi menerima nama dan deskripsi dan diberi nama createRestaurant. Mutasi ini didefinisikan secara otomatis ketika kami membuat skema Restaurant di atas. Perhatikan bahwa mutasi ditentukan dalam GraphQL — bahasa query khusus domain.

Sekarang, kami membuat komponen aplikasi kami.

Selanjutnya, masih dalam komponen App, kami mendefinisikan fungsi untuk melakukan mutasi. Ini mengeksekusi mutasi dengan memanggil API.graphql, meneruskan mutasi dan data.

Kemudian kami membuat komponen, menghubungkan perubahan handler dan fungsi mutasi kami.

Terakhir, kami ekspor komponen App, dengan otentikasi.

Anda harus dapat menjalankan kode ini dan mulai membuat item restoran baru pada API.

Untuk melihat source data yang aktual untuk melihat apakah data berada di sana, buka AWS AppSync dasboard, pilih API anda, klik Data Source dimenu sebelah kiri, lalu klik Resource Name. Ini akan membuka tabel Amazon DynamoDB. Di tabel, anda dapat melihat data pada tab Items.

Menjalankan query GraphQL

Selanjutnya, mari kita lihat cara menanyakan data dari API. Kami akan menerapkan ini dalam tiga langkah:

  1. Menentukan query
  2. Menjalankan query ketika app dimuat
  3. Simpan hasil dari query pada state dan render di UI

Pertama, mari kita mendefinisikan query dalam komponen baru. Sekali lagi, kami menggunakan bahasa GraphQL untuk menentukan query. Kami menggunakan permintaan listRestaurants yang secara otomatis ditentukan ketika kami melakukan proses push skema Restaurants. Potongan kode di bawah ini menetapkan bahwa kami mengharapkan daftar item, masing-masing dengan id, nama, dan deskripsi.

Selanjutnya, kita perlu menambahkan beberapa state awal tambahan untuk menahan array dari restoran yang dikembalikan dari server.

Kita juga perlu menambahkan event lifecycle componentDidMount untuk melakukan query data dari server GraphQL. Metode async ini akan memperbarui status komponen ketika daftar restoran dikembalikan dari server.

Terakhir, kita akan membuat komponen yang memetakan array dari restaurants dari state komponen menjadi HTML.

Sekarang, ketika kita menjalankan aplikasi, kita akan melihat bahwa data dari API sedang ditampilkan dalam daftar di layar. Namun, aplikasi tidak akan menampilkan perubahan apa pun saat data diperbarui — misalnya, saat anda menambahkan restoran baru.

Jadi untuk permulaan, mari kita perbarui method createRestaurant untuk memberikan optimistic response terhadap UI. Saat ini, ketika kami membuat item baru, basis data akan diperbarui, tetapi UI belum tahu tentang item baru. Untuk memperbaikinya, kami akan memperbarui array dalam method createRestaurant dengan menambahkan item baru ke array:

Real-Time Data Subscription

Selanjutnya, kami ingin bekerja dengan data secara real-time. Di GraphQL, subscription memungkinkan anda untuk mendengarkan data secara real time. Ketika data baru tersedia, subscription dijalankan, dan data baru diwariskan melalui subscription. Terserah kepada kami di sisi klien untuk menangani data baru ini.

Di aplikasi, kami akan melakukan subscription ke array dari restoran, dan kami akan membuat subscription onCreateRestaurant yang akan diaktifkan setiap kali restoran baru dibuat. Selanjutnya, kami akan mengambil item baru dari subscription, memperbarui array yang ada, dan memanggil setState untuk merender kembali UI dengan data yang baru.

Sama seperti untuk mutasi dan pertanyaan, kita mulai dengan mendefinisikan subscription dalam bahasa khusus domain GraphQL.

Subscription akan dibuat dalam method lifecycle componentDidMount baik sebelum atau sesudah permintaan GraphQL yang sudah kami siapkan:

Sekarang, jika anda membuka dua jendela browser, anda harus dapat membuat mutasi dalam satu layar dan melihat pembaruan terjadi disemua layar lainnya.

Jika Anda melihat method .filter yang kami gunakan dalam membuat array restoran baru dalam subscription, anda dapat melihat kami memeriksa untuk melihat apakah ada duplikat yang berisi nama dan deskripsi yang sama. Mungkin cara yang lebih baik untuk melakukan ini dalam tahap production adalah dengan membuat ID klien unik yang juga disimpan dalam basis data dan filter berdasarkan identifier tersebut.

Menciptakan sebuah REST API dengan AWS Lambda

GraphQL adalah teknologi canggih yang luar biasa, tetapi terkadang proyek kami mengharuskan kami membuat API REST secara tradisional. Dengan AWS Lambda dan Amplify, juga dapat dengan mudah untuk membuat REST API tanpa server menggunakan CLI.

Ketika kita menciptakan GraphQL API, kami menggunakan perintah amplify create api. Perintah ini memberikan kita pilihan untuk membuat GraphQL API atau sebuah REST API. REST API dapat dikonfigurasi untuk menggunakan fungsi Express serverless secara mandiri atau fungsi JavaScript tanpa server yang sudah dikonfigurasi sebelumnya untuk bekerja dengan operasi CRUD Amazon DynamoDB.

Pilihan yang akan kita gunakan untuk API ini adalah fungsi Express tanpa server (serverless).

Mari lanjutkan dan tambahkan fitur baru:

Seperti biasa, ini akan meminta anda untuk mengisi beberapa rincian konfigurasi. Menyediakan pilihan berikut:

  • Tipe service: REST
  • Masukkan nama resource yang akan digunakan dalam proyek: misalnya. amplifyrestapi
  • masukkan path untuk REST endpoint: misalnya. /people
  • Lambda source: Create a new Lambda function
  • Nama fungsi AWS Lambda: amplifyrestapifunction
  • fungsi template: Serverless express function (Integration with Amazon API Gateway)
  • mengedit fungsi lokal lambda sekarang? Y

Sekarang, anda akan dapat mengedit fungsi lambda secara lokal. Dalam file, kami akan mengganti method app.get ('/ people') yang ada dengan method berikut:

Ini hanya mengembalikan daftar nama yang konstan untuk keperluan demo. Simpan file ini, dan lanjutkan dengan jawaban berikut:

  • batasi akses API? Yes
  • Siapa yang harus memiliki akses? Hanya pengguna yang dikonfirmasikan / Authenticated users only
  • Jenis akses apa yang anda inginkan untuk pengguna yang terotentikasi? read
  • menambahkan path lain? N

Ini telah membuat fungsi Lambda baru secara lokal yang akan dapat kami perbarui dan melakukan proses push ke akun kami sesuai kebutuhan. Kode untuk fungsi lambda ini terletak pada amplify/backend/function/amplifyrestapi/src.

Sekarang, mari lakukan push pembaruan ke akun kami:

Melakukan Query API REST dari Klien

Sekarang, fungsi Lambda kami sudah aktif dan berjalan, dan kami dapat mulai berinteraksi dengannya!

Pertama, mari lakukan quesy data dari API baru dan tunjukkan pada UI kami. Untuk melakukannya, kami akan menggunakan class API dari Amplify, memanggil API.get. Pada bagian sebelumnya, kami menggunakan API.graphql untuk membuat permintaan ke API GraphQL kami, tetapi ada banyak method yang tersedia di kelas API. Anda dapat mempelajari lebih lanjut tentang class API melalui dokumentasi resmi.

Sekarang, kita harus dapat menjalankan aplikasi, mengambil data people / orang dari API kami, dan merendernya ke layar.

Memperbarui Fungsi Lambda melalui CLI

Selain membuat fungsi Lambda baru, kami juga dapat memperbarui fungsi Lambda kami melalui CLI.

Mari kita ubah fungsi untuk pemanggil API dan mengambil data sebagai ganti konstanta hardcoding. Untuk melakukannya, kami akan menggunakan library axios untuk membuat permintaan HTTP, dan kami akan mengambil data dari Star Wars API.

Untuk menggunakan axios, kita perlu mengarahkan ke amplify/backend/function/amplifyrestapi/src dan menginstalnya di sana. Axios dipasang pada folder proyek fungsi Lambda, bukan folder aplikasi utama, karena akan berjalan di sisi server fungsi Lambda.

Setelah axios diinstal, kami akan memperbarui fungsi Lambda untuk mengambil data dari Star Wars API:

Sekarang, simpan file dan jalankan amplify push dari folder proyek utama untuk memperbarui fungsi Lambda anda di cloud:

Sekarang, API kami telah diperbarui dan siap digunakan!

Saat kami me-refresh aplikasi, sekarang kami harus melihat data yang dikembalikan dari Star Wars API.

Kesimpulan

Dalam seri ini, anda belajar bagaimana memulai dengan AWS Amplify dan menambahkannya ke proyek React anda, serta cara menambahkan otentikasi, penyimpanan, hosting, dan GraphQL atau REST API — semua tanpa harus melakukan kode secara manual atau menyediakan server. Itulah kekuatan yang besar untuk pengembang aplikasi!

Semoga postingan ini menginspirasi anda untuk membuat aplikasi web tanpa server sendiri menggunakan teknologi tanpa server dan AWS Amplify! Beri tahu kami pendapat anda pada komentar di bawah.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.