View a markdown version of this page

Membuat kueri dasar (VTL) - AWS AppSync GraphQL

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

Membuat kueri dasar (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

Resolver GraphQL menghubungkan bidang dalam skema tipe ke sumber data. Resolver adalah mekanisme dimana permintaan dipenuhi. AWS AppSync dapat secara otomatis membuat dan menghubungkan resolver dari skema atau membuat skema dan menghubungkan resolver dari tabel yang ada tanpa Anda perlu menulis kode apa pun.

Resolver AWS AppSync digunakan JavaScript untuk mengonversi ekspresi GraphQL ke dalam format yang dapat digunakan sumber data. Atau, template pemetaan dapat ditulis dalam Apache Velocity Template Language (VTL) untuk mengubah ekspresi GraphQL menjadi format yang dapat digunakan sumber data.

Bagian ini akan menunjukkan cara mengkonfigurasi resolver menggunakan VTL. Panduan pemrograman gaya tutorial pengantar untuk menulis resolver dapat ditemukan di panduan pemrograman template pemetaan Resolver, dan utilitas pembantu yang tersedia untuk digunakan ketika pemrograman dapat ditemukan di referensi konteks template pemetaan Resolver. AWS AppSync juga memiliki aliran pengujian dan debug bawaan yang dapat Anda gunakan saat mengedit atau menulis dari awal. Untuk informasi selengkapnya, lihat Peng ujian dan debug resol ver.

Kami merekomendasikan mengikuti panduan ini sebelum mencoba menggunakan salah satu tutorial yang disebutkan di atas.

Pada bagian ini, kita akan membahas cara membuat resolver, menambahkan resolver untuk mutasi, dan menggunakan konfigurasi lanjutan.

Buat resolver pertama Anda

Mengikuti contoh dari bagian sebelumnya, langkah pertama adalah membuat resolver untuk Query tipe Anda.

Console
  1. Masuk ke Konsol Manajemen AWS dan buka AppSync konsol.

    1. Di dasbor API, pilih GraphQL API Anda.

    2. Di Sidebar, pilih Skema.

  2. Di sisi kanan halaman, ada jendela yang disebut Resol vers. Kotak ini berisi daftar jenis dan bidang seperti yang didefinisikan di jendela Skema Anda di sisi kiri halaman. Anda dapat melampirkan resolver ke bidang. Misalnya, di bawah jenis kueri, pilih Lampirkan di sebelah getTodos bidang.

  3. Pada halaman Buat Resolver, pilih sumber data yang Anda buat di panduan Mel ampirkan sumber data. Di jendela Konfigurasi templat pemetaan, Anda dapat memilih template pemetaan permintaan generik dan respons menggunakan daftar drop-down di sebelah kanan atau menulis sendiri.

    catatan

    Pasangan template pemetaan permintaan ke template pemetaan respons disebut resolver unit. Unit resolver biasanya dimaksudkan untuk melakukan operasi rote; kami sarankan menggunakannya hanya untuk operasi tunggal dengan sejumlah kecil sumber data. Untuk operasi yang lebih kompleks, sebaiknya gunakan resolver pipeline, yang dapat menjalankan beberapa operasi dengan beberapa sumber data secara berurutan.

    Untuk informasi selengkapnya tentang perbedaan antara template pemetaan permintaan dan respons, lihat Resol ver unit.

    Untuk informasi selengkapnya tentang menggunakan resolver pipeline, lihat Penyeles ai pipa.

  4. Untuk kasus penggunaan umum, AWS AppSync konsol memiliki templat bawaan yang dapat Anda gunakan untuk mendapatkan item dari sumber data (misalnya, semua kueri item, pencarian individual, dll.). Misalnya, pada versi sederhana skema dari Merancang skema Anda yang getTodos tidak memiliki pagination, template pemetaan permintaan untuk daftar item adalah sebagai berikut:

    { "version" : "2017-02-28", "operation" : "Scan" }
  5. Anda selalu membutuhkan template pemetaan respons untuk menyertakan permintaan. Konsol menyediakan default dengan nilai passthrough berikut untuk daftar:

    $util.toJson($ctx.result.items)

    Dalam contoh ini, context objek (alias sebagai$ctx) untuk daftar item memiliki bentuk$context.result.items. Jika operasi GraphQL Anda mengembalikan satu item, itu akan $context.result terjadi. AWS AppSync menyediakan fungsi pembantu untuk operasi umum, seperti $util.toJson fungsi yang tercantum sebelumnya, untuk memformat respons dengan benar. Untuk daftar lengkap fungsi, lihat referensi utilitas template pemetaan Resolver.

  6. Pilih S impan Resolver.

API
  1. Buat objek resolver dengan memanggil CreateResolver API.

  2. Anda dapat memodifikasi bidang resolver Anda dengan memanggil UpdateResolver API.

CLI
  1. Buat resolver dengan menjalankan create-resolver perintah.

    Anda harus mengetikkan 6 parameter untuk perintah khusus ini:

    1. api-iddari API Anda.

    2. type-nameJenis yang ingin Anda modifikasi dalam skema Anda. Dalam contoh konsol, ini adalahQuery.

    3. Bid field-name ang yang ingin Anda modifikasi dalam jenis Anda. Dalam contoh konsol, ini adalahgetTodos.

    4. Sumber data yang Anda buat di panduan Mel ampirkan sumber data. data-source-name

    5. Iturequest-mapping-template, yang merupakan badan permintaan. Dalam contoh konsol, ini adalah:

      { "version" : "2017-02-28", "operation" : "Scan" }
    6. Yangresponse-mapping-template, yang merupakan badan respons. Dalam contoh konsol, ini adalah:

      $util.toJson($ctx.result.items)

    Contoh perintah mungkin terlihat seperti ini:

    aws appsync create-resolver --api-id abcdefghijklmnopqrstuvwxyz --type-name Query --field-name getTodos --data-source-name TodoTable --request-mapping-template "{ "version" : "2017-02-28", "operation" : "Scan", }" --response-mapping-template ""$"util.toJson("$"ctx.result.items)"

    Output akan dikembalikan dalam CLI. Inilah contohnya:

    { "resolver": { "kind": "UNIT", "dataSourceName": "TodoTable", "requestMappingTemplate": "{ version : 2017-02-28, operation : Scan, }", "resolverArn": "arn:aws:appsync:us-west-2:107289374856:apis/abcdefghijklmnopqrstuvwxyz/types/Query/resolvers/getTodos", "typeName": "Query", "fieldName": "getTodos", "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }
  2. Untuk memodifikasi template and/or pemetaan bidang resolver, jalankan update-resolver perintah.

    Dengan pengecualian api-id parameter, parameter yang digunakan dalam create-resolver perintah akan diganti oleh nilai-nilai baru dari update-resolver perintah.

Menambahkan resolver untuk mutasi

Langkah selanjutnya adalah membuat resolver untuk Mutation tipe Anda.

Console
  1. Masuk ke Konsol Manajemen AWS dan buka AppSync konsol.

    1. Di dasbor API, pilih GraphQL API Anda.

    2. Di Sidebar, pilih Skema.

  2. Di bawah jenis Mutasi, pilih Lampirkan di sebelah addTodo bidang.

  3. Pada halaman Buat Resolver, pilih sumber data yang Anda buat di panduan Mel ampirkan sumber data.

  4. Di jendela Konfigurasi templat pemetaan, Anda harus memodifikasi template permintaan karena ini adalah mutasi di mana Anda menambahkan item baru ke DynamoDB. Gunakan template pemetaan permintaan berikut:

    { "version" : "2017-02-28", "operation" : "PutItem", "key" : { "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id) }, "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) }
  5. AWS AppSync secara otomatis mengonversi argumen yang ditentukan di addTodo bidang dari skema GraphQL Anda menjadi operasi DynamoDB. Contoh sebelumnya menyimpan catatan di DynamoDB menggunakan kunciid, yang dilewatkan dari argumen mutasi sebagai. $ctx.args.id Semua bidang lain yang Anda lewati secara otomatis dipetakan ke atribut DynamoDB dengan. $util.dynamodb.toMapValuesJson($ctx.args)

    Untuk resolver ini, gunakan template pemetaan respons berikut:

    $util.toJson($ctx.result)

    AWS AppSync juga mendukung alur kerja pengujian dan debug untuk mengedit resolver. Anda dapat menggunakan context objek tiruan untuk melihat nilai templat yang diubah sebelum memanggil. Secara opsional, Anda dapat melihat eksekusi permintaan penuh ke sumber data secara interaktif saat menjalankan kueri. Untuk informasi selengkapnya, lihat Peng ujian dan debug resolver serta Pem antauan dan pencatatan.

  6. Pilih S impan Resolver.

API

Anda juga dapat melakukan ini dengan API dengan menggunakan perintah di bagian Buat resolver pertama Anda dan detail parameter dari bagian ini.

CLI

Anda juga dapat melakukan ini di CLI dengan menggunakan perintah di bagian Buat resolver pertama Anda dan detail parameter dari bagian ini.

Pada titik ini, jika Anda tidak menggunakan resolver lanjutan, Anda dapat mulai menggunakan GraphQL API Anda seperti yang diuraikan dalam Menggunakan API Anda.

Resolver lanjutan

Jika Anda mengikuti bagian Lanjutan dan Anda sedang membangun skema sampel di Merancang skema Anda untuk melakukan pemindaian berpaginasi, gunakan templat permintaan berikut untuk getTodos bidang sebagai gantinya:

{ "version" : "2017-02-28", "operation" : "Scan", "limit": $util.defaultIfNull(${ctx.args.limit}, 20), "nextToken": $util.toJson($util.defaultIfNullOrBlank($ctx.args.nextToken, null)) }

Untuk kasus penggunaan pagination ini, pemetaan respons lebih dari sekadar passthrough karena harus berisi kursor (sehingga klien tahu halaman mana yang akan dimulai selanjutnya) dan kumpulan hasil. Template pemetaan adalah sebagai berikut:

{ "todos": $util.toJson($context.result.items), "nextToken": $util.toJson($context.result.nextToken) }

Bidang dalam template pemetaan respons sebelumnya harus cocok dengan bidang yang ditentukan dalam TodoConnection tipe Anda.

Untuk kasus relasi di mana Anda memiliki Comments tabel dan Anda menyelesaikan kolom komentar pada Todo tipe (yang mengembalikan jenis[Comment]), Anda dapat menggunakan template pemetaan yang menjalankan kueri terhadap tabel kedua. Untuk melakukan ini, Anda harus telah membuat sumber data untuk Comments tabel seperti yang diuraikan dalam Mel ampirkan sumber data.

catatan

Kami menggunakan operasi kueri terhadap tabel kedua untuk tujuan ilustrasi saja. Anda dapat menggunakan operasi lain terhadap DynamoDB sebagai gantinya. Selain itu, Anda dapat menarik data dari sumber data lain, seperti AWS Lambda atau Amazon OpenSearch Service, karena relasi dikendalikan oleh skema GraphQL Anda.

Console
  1. Masuk ke Konsol Manajemen AWS dan buka AppSync konsol.

    1. Di dasbor API, pilih GraphQL API Anda.

    2. Di Sidebar, pilih Skema.

  2. Di bawah jenis Todo, pilih Lamp irkan di sebelah comments bidang.

  3. Pada halaman Create Resolver, pilih sumber data tabel Komentar Anda. Nama default untuk tabel Komentar dari panduan memulai cepat adalahAppSyncCommentTable, tetapi mungkin bervariasi tergantung pada nama apa yang Anda berikan.

  4. Tambahkan cuplikan berikut ke template pemetaan permintaan Anda:

    { "version": "2017-02-28", "operation": "Query", "index": "todoid-index", "query": { "expression": "todoid = :todoid", "expressionValues": { ":todoid": { "S": $util.toJson($context.source.id) } } } }
  5. context.sourceReferensi objek induk dari bidang saat ini yang sedang diselesaikan. Dalam contoh ini, source.id mengacu pada Todo objek individu, yang kemudian digunakan untuk ekspresi query.

    Anda dapat menggunakan template pemetaan respons passthrough sebagai berikut:

    $util.toJson($ctx.result.items)
  6. Pilih S impan Resolver.

  7. Akhirnya, kembali pada halaman Skema di konsol, lampirkan resolver ke addComment bidang, dan tentukan sumber data untuk Comments tabel. Template pemetaan permintaan dalam hal ini sederhana PutItem dengan spesifik todoid yang dikomentari sebagai argumen, tetapi Anda menggunakan $utils.autoId() utilitas untuk membuat kunci pengurutan unik untuk komentar sebagai berikut:

    { "version": "2017-02-28", "operation": "PutItem", "key": { "todoid": { "S": $util.toJson($context.arguments.todoid) }, "commentid": { "S": "$util.autoId()" } }, "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) }

    Gunakan template respons passthrough sebagai berikut:

    $util.toJson($ctx.result)
API

Anda juga dapat melakukan ini dengan API dengan menggunakan perintah di bagian Buat resolver pertama Anda dan detail parameter dari bagian ini.

CLI

Anda juga dapat melakukan ini di CLI dengan menggunakan perintah di bagian Buat resolver pertama Anda dan detail parameter dari bagian ini.