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
Invoke
Operasi ini memungkinkan AWS AppSync untuk memanggil fungsi Lambda Anda untuk setiap penyelesai bidang GraphQL. BatchInvoke
menginstruksikan 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
payload
Bidang 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. payload
Bidang 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. Event
Pemanggilan memungkinkan Anda untuk menjalankan fungsi Lambda Anda secara asinkron. Untuk informasi selengkapnya tentang cara Lambda menangani permintaan jenis Event
pemanggilan, lihat Pemanggilan asinkron. invocationType
Bidang 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.