JavaScript referensi fungsi resolver untuk Lambda - AWS AppSync

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

JavaScript referensi fungsi resolver untuk Lambda

Anda dapat menggunakan AWS AppSync fungsi dan resolver untuk menjalankan fungsi Lambda yang terletak di akun Anda. Anda dapat membentuk payload permintaan dan respons dari fungsi Lambda Anda sebelum mengembalikannya ke klien Anda. Anda juga dapat menentukan jenis operasi yang akan dilakukan di objek permintaan Anda. Bagian ini menjelaskan permintaan untuk operasi Lambda yang didukung.

Permintaan objek

Objek permintaan Lambda menangani bidang yang terkait dengan fungsi Lambda Anda:

export type LambdaRequest = { operation: 'Invoke' | 'BatchInvoke'; invocationType?: 'RequestResponse' | 'Event'; payload: unknown; };

Berikut adalah contoh yang menggunakan invoke operasi dengan data payloadnya menjadi getPost bidang dari skema GraphQL bersama dengan argumennya dari konteksnya:

export function request(ctx) { return { operation: 'Invoke', payload: { field: 'getPost', arguments: ctx.args }, }; }

Seluruh dokumen pemetaan diteruskan sebagai input ke fungsi Lambda Anda sehingga contoh sebelumnya sekarang terlihat seperti ini:

{ "operation": "Invoke", "payload": { "field": "getPost", "arguments": { "input": { "id": "postId1", } } } }

Operasi

Sumber data Lambda memungkinkan Anda menentukan dua operasi di operation bidang: Invoke dan. BatchInvoke InvokeOperasi ini memungkinkan AWS AppSync untuk memanggil fungsi Lambda Anda untuk setiap penyelesai bidang GraphQL. BatchInvokemenginstruksikan permintaan batch AWS AppSync untuk bidang GraphQL saat ini. Bidang operation wajib diisi.

UntukInvoke, permintaan yang diselesaikan cocok dengan muatan input fungsi Lambda. Mari kita ubah contoh di atas:

export function request(ctx) { return { operation: 'Invoke', payload: { field: 'getPost', arguments: ctx.args }, }; }

Ini diselesaikan dan diteruskan ke fungsi Lambda, yang bisa terlihat seperti ini:

{ "operation": "Invoke", "payload": { "arguments": { "id": "postId1" } } }

UntukBatchInvoke, permintaan diterapkan ke setiap resolver bidang dalam batch. Untuk keringkasan, AWS AppSync menggabungkan semua payload nilai permintaan ke dalam daftar di bawah satu objek yang cocok dengan objek permintaan. Contoh handler permintaan berikut menunjukkan penggabungan:

export function request(ctx) { return { operation: 'Invoke', payload: ctx, }; }

Permintaan ini dievaluasi dan diselesaikan ke dalam dokumen pemetaan berikut:

{ "operation": "BatchInvoke", "payload": [ {...}, // context for batch item 1 {...}, // context for batch item 2 {...} // context for batch item 3 ] }

Setiap elemen payload daftar sesuai dengan satu item batch. Fungsi Lambda juga diharapkan mengembalikan respons berbentuk daftar yang cocok dengan urutan item yang dikirim dalam permintaan:

[ { "data": {...}, "errorMessage": null, "errorType": null }, // result for batch item 1 { "data": {...}, "errorMessage": null, "errorType": null }, // result for batch item 2 { "data": {...}, "errorMessage": null, "errorType": null } // result for batch item 3 ]

Muatan

payloadBidang adalah wadah yang digunakan untuk meneruskan data apa pun ke fungsi Lambda. Jika operation bidang diatur keBatchInvoke, AWS AppSync membungkus payload nilai yang ada ke dalam daftar. payloadBidang ini opsional.

Jenis doa

Sumber data Lambda memungkinkan Anda menentukan dua jenis pemanggilan: dan. RequestResponse Event Jenis pemanggilan identik dengan tipe pemanggilan yang ditentukan dalam API Lambda. Jenis RequestResponse AWS AppSync pemanggilan memungkinkan memanggil fungsi Lambda Anda secara sinkron untuk menunggu respons. EventPemanggilan memungkinkan Anda untuk menjalankan fungsi Lambda Anda secara asinkron. Untuk informasi selengkapnya tentang cara Lambda menangani permintaan jenis Event pemanggilan, lihat Pemanggilan asinkron. invocationTypeBidang ini opsional. Jika bidang ini tidak termasuk dalam permintaan, AWS AppSync akan default ke jenis RequestResponse pemanggilan.

Untuk invocationType bidang apa pun, permintaan yang diselesaikan cocok dengan muatan input fungsi Lambda. Mari kita ubah contoh di atas:

export function request(ctx) { return { operation: 'Invoke', invocationType: 'Event', payload: { field: 'getPost', arguments: ctx.args }, }; }

Ini diselesaikan dan diteruskan ke fungsi Lambda, yang bisa terlihat seperti ini:

{ "operation": "Invoke", "invocationType": "Event", "payload": { "arguments": { "id": "postId1" } } }

Saat BatchInvoke operasi digunakan bersama dengan bidang jenis Event pemanggilan, AWS AppSync gabungkan penyelesai bidang dengan cara yang sama seperti yang disebutkan di atas, dan permintaan diteruskan ke fungsi Lambda Anda sebagai peristiwa asinkron dengan daftar nilai. payload Respons dari permintaan tipe Event pemanggilan menghasilkan null nilai tanpa penangan respons:

{ "data": { "field": null } }

Kami menyarankan Anda menonaktifkan caching resolver untuk resolver tipe Event pemanggilan karena ini tidak akan dikirim ke Lambda jika ada cache hit.

Objek respons

Seperti sumber data lainnya, fungsi Lambda Anda mengirimkan respons AWS AppSync yang harus dikonversi ke tipe GraphQL. Hasil dari fungsi Lambda terkandung dalam properti context hasil ()context.result.

Jika bentuk respons fungsi Lambda Anda cocok dengan bentuk tipe GraphQL, Anda dapat meneruskan respons menggunakan penangan respons fungsi berikut:

export function response(ctx) { return ctx.result }

Tidak ada bidang wajib atau batasan bentuk yang berlaku untuk objek respons. Namun, karena GraphQL diketik dengan kuat, respons yang diselesaikan harus sesuai dengan tipe GraphQL yang diharapkan.

Respons batch fungsi Lambda

Jika operation bidang diatur keBatchInvoke, AWS AppSync mengharapkan daftar item kembali dari fungsi Lambda. AWS AppSync Untuk memetakan setiap hasil kembali ke item permintaan asli, daftar respons harus sesuai dengan ukuran dan urutan. Ini valid untuk memiliki null item dalam daftar respons; ctx.result diatur ke null sesuai.