Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
AWS AppSync JavaScript ikhtisar resolvers
AWS AppSync memungkinkan Anda menanggapi permintaan GraphQL dengan melakukan operasi pada sumber data Anda. Untuk setiap bidang GraphQL yang ingin Anda jalankan kueri, mutasi, atau langganan, resolver harus dilampirkan.
Resolver adalah konektor antara GraphQL dan sumber data. Mereka memberi tahu AWS AppSync cara menerjemahkan permintaan GraphQL yang masuk ke dalam instruksi untuk sumber data backend Anda dan cara menerjemahkan respons dari sumber data itu kembali ke respons GraphQL. Dengan AWS AppSync, Anda dapat menulis resolver Anda menggunakan JavaScript dan menjalankannya di lingkungan AWS AppSync (APPSYNC_JS).
AWS AppSync memungkinkan Anda untuk menulis resolver unit atau resolver pipeline yang terdiri dari beberapa AWS AppSync fungsi dalam pipa.
Fitur runtime yang didukung
AWS AppSync JavaScript Runtime menyediakan subset pustaka, utilitas, dan fitur. JavaScript Untuk daftar lengkap fitur dan fungsionalitas yang didukung oleh APPSYNC_JS runtime, lihat fitur JavaScript runtime untuk resolver dan fungsi.
Penyelesai unit
Unit resolver terdiri dari kode yang mendefinisikan sebuah request dan response handler yang dieksekusi terhadap sumber data. Penangan permintaan mengambil objek konteks sebagai argumen dan mengembalikan payload permintaan yang digunakan untuk memanggil sumber data Anda. Respon handler menerima payload kembali dari sumber data dengan hasil permintaan yang dieksekusi. Penangan respons mengubah payload menjadi respons GraphQL untuk menyelesaikan bidang GraphQL. Dalam contoh di bawah ini, resolver mengambil item dari sumber data DynamoDB:
import * as ddb from '@aws-appsync/utils/dynamodb' export function request(ctx) { return ddb.get({ key: { id: ctx.args.id } }); } export const response = (ctx) => ctx.result;
Anatomi resol JavaScript ver pipa
Sebuah pipeline resolver terdiri dari kode yang mendefinisikan sebuah request dan response handler dan daftar fungsi. Setiap fungsi memiliki pengen dali permintaan dan respons yang dieksekusi terhadap sumber data. Ketika delegasi penyelesai pipeline berjalan 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.
Penangan permintaan penyelesai pipa
Penangan permintaan resolver pipeline (langkah sebelumnya) memungkinkan Anda untuk melakukan beberapa logika persiapan sebelum menjalankan fungsi yang ditentukan.
Daftar fungsi
Daftar fungsi yang akan dijalankan resolver pipeline secara berurutan. Hasil evaluasi pengendali permintaan penyelesai pipa tersedia untuk fungsi pertama sebagaictx.prev.result. Setiap hasil evaluasi fungsi tersedia untuk fungsi berikutnya sebagaictx.prev.result.
Penangan respons penyelesai pipa
Penangan respons dari resolver pipeline memungkinkan Anda untuk melakukan beberapa logika akhir dari output fungsi terakhir ke jenis bidang GraphQL yang diharapkan. Output dari fungsi terakhir dalam daftar fungsi tersedia di handler respons resolver pipeline sebagai ctx.prev.result atauctx.result.
Aliran eksekusi
Mengingat resolver pipeline yang terdiri dari dua fungsi, daftar di bawah ini mewakili aliran eksekusi ketika resolver dipanggil:
-
Penangan permintaan penyelesai pipa
-
Fungsi 1: Penangan permintaan fungsi
-
Fungsi 1: Panggilan sumber data
-
Fungsi 1: Penangan respons fungsi
-
Fungsi 2: Penangan permintaan fungsi
-
Fungsi 2: Panggilan sumber data
-
Fungsi 2: Penangan respons fungsi
-
Penangan respons penyelesai pipa
Utilitas baw aan runtime APPSYNC_JS yang berguna
Utilitas berikut dapat membantu Anda saat Anda bekerja dengan penyelesai pipa.
ctx. Stash
Stash adalah objek yang tersedia di dalam setiap resolver dan fungsi request dan response handler. Instance stash yang sama hidup melalui proses resolver tunggal. Ini berarti bahwa Anda dapat menggunakan simpanan untuk meneruskan data arbitrer di seluruh penangan permintaan dan respons dan lintas fungsi dalam resolver pipeline. Anda dapat menguji simpanan seperti JavaScript objek biasa.
ctx.prev.result
Mer ctx.prev.result upakan hasil dari operasi sebelumnya yang dieksekusi dalam pipa. Jika operasi sebelumnya adalah pengendali permintaan resolver pipeline, maka ctx.prev.result tersedia untuk fungsi pertama dalam rantai. Jika operasi sebelumnya adalah fungsi pertama, maka ctx.prev.result mewakili output dari fungsi pertama dan tersedia untuk fungsi kedua dalam pipeline. Jika operasi sebelumnya adalah fungsi terakhir, maka ctx.prev.result mewakili output dari fungsi terakhir dan tersedia untuk handler respons resolver pipeline.
util.error
util.errorUtilitas ini berguna untuk melempar kesalahan bidang. Menggunakan util.error di dalam permintaan fungsi atau pengendali respons segera melontarkan kesalahan bidang, yang mencegah fungsi berikutnya dieksekusi. Untuk detail selengkapnya dan util.error tanda tangan lainnya, kunjungi fitur JavaScript runtime untuk resolver dan fungsi.
Util.appendError
util.appendErrormirip denganutil.error(), dengan perbedaan utama bahwa itu tidak mengganggu evaluasi handler. Sebaliknya, ini menandakan ada kesalahan dengan bidang, tetapi memungkinkan handler untuk dievaluasi dan akibatnya mengembalikan data. Menggunakan util.appendError di dalam fungsi tidak akan mengganggu aliran eksekusi pipa. Untuk detail selengkapnya dan util.error tanda tangan lainnya, kunjungi fitur JavaScript runtime untuk resolver dan fungsi.
Runtime.EarlyReturn
runtime.earlyReturnFungsi ini memungkinkan Anda untuk kembali sebelum waktunya dari fungsi permintaan apa pun. Menggunakan runtime.earlyReturn bagian dalam pengendali permintaan resolver akan kembali dari resolver. Memanggilnya dari pengendali permintaan AWS AppSync
fungsi akan kembali dari fungsi dan akan melanjutkan proses ke fungsi berikutnya dalam pipeline atau handler respons resolver.
Menulis penyelesai pipa
Resolver pipeline juga memiliki permintaan dan pengendali respons yang mengelilingi jalannya fungsi dalam pipeline: pengendali permintaannya dijalankan sebelum permintaan fungsi pertama, dan handler responsnya dijalankan setelah respons fungsi terakhir. Penangan permintaan resolver dapat mengatur data untuk digunakan oleh fungsi dalam pipeline. Penangan respons resolver bertanggung jawab untuk mengembalikan data yang dipetakan ke jenis output bidang GraphQL. Dalam contoh di bawah ini, pengendali permintaan resolver, mendefinisikanallowedGroups; data yang dikembalikan harus milik salah satu grup ini. Nilai ini dapat digunakan oleh fungsi resolver untuk meminta data. Penangan respons resolver melakukan pemeriksaan akhir dan memfilter hasilnya untuk memastikan bahwa hanya item yang termasuk dalam grup yang diizinkan dikembalikan.
import { util } from '@aws-appsync/utils'; /** * Called before the request function of the first AppSync function in the pipeline. * @param ctx the context object holds contextual information about the function invocation. */ export function request(ctx) { ctx.stash.allowedGroups = ['admin']; ctx.stash.startedAt = util.time.nowISO8601(); return {}; } /** * Called after the response function of the last AppSync function in the pipeline. * @param ctx the context object holds contextual information about the function invocation. */ export function response(ctx) { const result = []; for (const item of ctx.prev.result) { if (ctx.stash.allowedGroups.indexOf(item.group) > -1) result.push(item); } return result; }
Menulis AWS AppSync fungsi
AWS AppSync fungsi memungkinkan Anda untuk menulis logika umum yang dapat Anda gunakan kembali di beberapa resolver dalam skema Anda. Misalnya, Anda dapat memiliki satu AWS AppSync fungsi QUERY_ITEMS yang disebut yang bertanggung jawab untuk menanyakan item dari sumber data Amazon DynamoDB. Untuk resolver yang ingin Anda kueri item, cukup tambahkan fungsi ke pipeline resolver dan berikan indeks kueri untuk digunakan. Logikanya tidak perlu diimplementasikan kembali.
Topik tambahan
Topik