View a markdown version of this page

Mengkonfigurasi dan menggunakan resolver pipeline di AWS AppSync (VTL) - AWS AppSync GraphQL

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengkonfigurasi dan menggunakan resolver pipeline di AWS AppSync (VTL)

catatan

Kami sekarang terutama mendukung runtime APPSYNC_JS dan dokumentasinya. Harap pertimbangkan untuk menggunakan runtime APPSYNC_JS dan panduannya di sini. https://docs.aws.amazon.com/appsync/latest/devguide/configuring-resolvers-js.html

AWS AppSync mengeksekusi resolver pada bidang GraphQL. Dalam beberapa kasus, aplikasi memerlukan eksekusi beberapa operasi untuk menyelesaikan satu bidang GraphQL. Dengan pipeline resolver, pengembang sekarang dapat menyusun operasi yang disebut Functions dan menjalankannya secara berurutan. Penyelesai pipa berguna untuk aplikasi yang, misalnya, memerlukan pemeriksaan otorisasi sebelum mengambil data untuk bidang.

Resolver pipeline terdiri dari template Be fore mapping, template A fter mapping, dan daftar Functions. Setiap Fungsi memiliki template pemetaan permintaan dan respons yang dieksekusi terhadap sumber data. Karena resolver pipeline mendelegasikan eksekusi ke daftar fungsi, oleh karena itu tidak ditautkan ke sumber data apa pun. Unit resolver dan fungsi adalah primitif yang menjalankan operasi terhadap sumber data. Lihat ikhtis ar templat pemetaan Resolver untuk informasi selengkapnya.

Langkah 1: Membuat resolver pipeline

Di AWS AppSync konsol, buka halaman S kema.

Simpan skema berikut:

schema { query: Query mutation: Mutation } type Mutation { signUp(input: Signup): User } type Query { getUser(id: ID!): User } input Signup { username: String! email: String! } type User { id: ID! username: String email: AWSEmail }

Kami akan menghubungkan resolver pipeline ke bidang Sign Up pada tipe Mutation. Pada tipe Mutasi di sisi kanan, pilih Lamp irkan di sebelah bidang signUp mutasi. Pada halaman buat resolver, klik Tindakan , lalu Per barui runtime. PilihPipeline Resolver, lalu pilihVTL, lalu pilih Per barui. Halaman sekarang harus menampilkan tiga bagian: area teks template Sebelum pemetaan, bagian Fungsi, dan area teks template setelah pemetaan.

Penyelesai pipeline kami mendaftarkan pengguna dengan terlebih dahulu memvalidasi input alamat email dan kemudian menyimpan pengguna di sistem. Kami akan merangkum validasi email di dalam fungsi validateEmail, dan penyimpanan pengguna di dalam fungsi saveUser. Fungsi validateEmail dijalankan terlebih dahulu, dan jika email valid, maka fungsi sav eUser dijalankan.

Alur eksekusi adalah sebagai berikut:

  1. Mutation.signUp templat pemetaan permintaan resolver

  2. Fungsi validateEmail

  3. Fungsi SaveUser

  4. Mutation.signUp templat pemetaan respons resolver

Karena kami mungkin akan menggunakan kembali fungsi validateEmail di resolver lain di API kami, kami ingin menghindari akses $ctx.args karena ini akan berubah dari satu bidang GraphQL ke bidang lainnya. Sebagai gantinya, kita dapat menggunakan $ctx.stash untuk menyimpan atribut email dari argum signUp(input: Signup) en bidang input.

TEMPLAT PEMETAAN SEBELUM:

## store email input field into a generic email key $util.qr($ctx.stash.put("email", $ctx.args.input.email)) {}

Konsol menyediakan template pemetaan PASSthrough default AFTER yang akan kita gunakan:

$util.toJson($ctx.result)

Pilih Buat atau Simpan untuk memperbarui resolver.

Langkah 2: Membuat fungsi

Dari halaman penyelesai pipa, di bagian Fungsi, klik Tam bah fungsi, lalu Buat fungsi baru. Dimungkinkan juga untuk membuat fungsi tanpa melalui halaman resolver; untuk melakukan ini, di AWS AppSync konsol, buka halaman Fungsi. Pilih tombol Buat fungsi. Mari kita buat fungsi yang memeriksa apakah email valid dan berasal dari domain tertentu. Jika email tidak valid, fungsi tersebut menimbulkan kesalahan. Jika tidak, ia meneruskan input apa pun yang diberikan.

Pada halaman fungsi baru, pilih Tind akan, lalu Per barui runtime. PilihVTL, lalu Per barui. Pastikan Anda telah membuat sumber data dari tipe NONE. Pilih sumber data ini dalam daftar nama sumber data. Untuk nama fungsi, masukkanvalidateEmail. Di area kode fungsi, ganti semuanya dengan cuplikan ini:

#set($valid = $util.matches("^[a-zA-Z0-9_.+-]+@(?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?(myvaliddomain)\.com", $ctx.stash.email)) #if (!$valid) $util.error("$ctx.stash.email is not a valid email.") #end { "payload": { "email": $util.toJson(${ctx.stash.email}) } }

Tempelkan ini ke template pemetaan respons:

$util.toJson($ctx.result)

Tinjau perubahan Anda, lalu pilih Buat. Kami baru saja membuat fungsi validateEmail kami. Ulangi langkah-langkah ini untuk membuat fungsi saveUser dengan template pemetaan permintaan dan respons berikut (Demi kesederhanaan, kami menggunakan sumber data NONE dan berpura-pura pengguna telah disimpan dalam sistem setelah fungsi dijalankan. ):

Meminta template pemetaan:

## $ctx.prev.result contains the signup input values. We could have also ## used $ctx.args.input. { "payload": $util.toJson($ctx.prev.result) }

Templat pemetaan respons:

## an id is required so let's add a unique random identifier to the output $util.qr($ctx.result.put("id", $util.autoId())) $util.toJson($ctx.result)

Kami baru saja membuat fungsi saveUser kami.

Langkah 3: Menambahkan fungsi ke resolver pipeline

Fungsi kami seharusnya ditambahkan secara otomatis ke resolver pipeline yang baru saja kami buat. Jika ini bukan masalahnya, atau Anda membuat fungsi melalui halaman Fungsi, Anda dapat mengklik Tam bah fungsi pada halaman resolver untuk melampirkannya. Tambahkan fungsi validateEmail dan saveUser ke resolver. Fungsi validateEmail harus ditempatkan sebelum fungsi sav eUser. Saat Anda menambahkan lebih banyak fungsi, Anda dapat menggunakan opsi pindah ke atas dan pindah ke bawah untuk mengatur ulang urutan eksekusi fungsi Anda. Tinjau perubahan Anda, lalu pilih S impan.

Langkah 4: Menjalankan kueri

Di AWS AppSync konsol, buka halaman Kueri. Di penjelajah, pastikan Anda menggunakan mutasi Anda. Jika tidak, pilih Mutation di daftar drop-down, lalu pilih+. Masukkan kueri berikut:

mutation { signUp(input: { email: "nadia@myvaliddomain.com" username: "nadia" }) { id email } }

Ini akan mengembalikan sesuatu seperti:

{ "data": { "signUp": { "id": "256b6cc2-4694-46f4-a55e-8cb14cc5d7fc", "email": "nadia@myvaliddomain.com" } } }

Kami telah berhasil mendaftarkan pengguna kami dan memvalidasi email input menggunakan penyelesai pipa. Untuk mengikuti tutorial yang lebih lengkap yang berfokus pada penyelesai pipa, Anda dapat pergi ke Tutorial: Penyelesai Pipeline