Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
AWS AppSync JavaScript referensi fungsi resolver untuk Lambda
Anda dapat menggunakan AWS AppSync fungsi dan resolver untuk memanggil fungsi Lambda yang terletak di akun Anda. Anda dapat membentuk payload permintaan Anda 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 contoh yang menggunakan invoke operasi dengan data payloadnya menjadi getPost bidang dari skema GraphQL bersama dengan argumennya dari konteks:
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 lapangan: Invoke danBatchInvoke. InvokeOperasi memungkinkan untuk AWS AppSync memanggil fungsi Lambda Anda untuk setiap resolver bidang GraphQL. BatchInvokemenginstruksikan permintaan batch AWS AppSync untuk bidang GraphQL saat ini. Bidang operation wajib diisi.
UntukInvoke, permintaan yang diselesaikan cocok dengan muatan input dari fungsi Lambda. Mari kita memodifikasi 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 penyelesai bidang dalam batch. Untuk keringkasan, menggabungkan AWS AppSync semua payload nilai permintaan ke dalam daftar di bawah satu objek yang cocok dengan objek permintaan. Contoh pengendali 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 ]
Payload
Bid payload ang adalah wadah yang digunakan untuk meneruskan data apa pun ke fungsi Lambda. Jika operation bidang disetel keBatchInvoke, AWS AppSync membungkus payload nilai yang ada ke dalam daftar. Bid payload ang ini opsional.
Jenis pemanggilan
Sumber data Lambda memungkinkan Anda untuk menentukan dua jenis pemanggilan: RequestResponse dan. Event Jenis pemanggilan identik dengan tipe pemanggilan yang didefinisikan dalam API Lambda. Jenis pem RequestResponse anggilan memungkinkan memang AWS AppSync gil fungsi Lambda Anda secara sinkron untuk menunggu respons. Pemang Event gilan memungkinkan Anda untuk memanggil fungsi Lambda Anda secara asinkron. Untuk informasi selengkapnya tentang cara Lambda menangani permintaan jenis pem Event anggilan, lihat Pemanggilan asinkron. Bid invocationType ang ini opsional. Jika bidang ini tidak disertakan dalam permintaan, AWS AppSync akan default ke jenis pem RequestResponse anggilan.
Untuk invocationType bidang apa pun, permintaan yang diselesaikan cocok dengan muatan input dari fungsi Lambda. Mari kita memodifikasi 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" } } }
Ketika BatchInvoke operasi digunakan bersama dengan bidang tipe pemang Event gilan, menggabungkan resolver bidang AWS AppSync dengan cara yang sama yang disebutkan di atas, dan permintaan diteruskan ke fungsi Lambda Anda sebagai peristiwa asinkron dengan menjadi daftar nilai. payload Respons dari permintaan tipe Event pemanggilan menghasilkan null nilai tanpa pengendali respons:
{ "data": { "field": null } }
Kami menyarankan Anda menonaktifkan caching resolver untuk resolver tipe Event pemanggilan karena ini tidak akan dikirim ke Lambda jika ada hit cache.
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 pengendali 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.
Fungsi lambda respons berkelompok
Jika operation bidang disetel 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 dalam ukuran dan urutan. Valid untuk memiliki null item dalam daftar respons; ctx.result disetel ke null yang sesuai.