

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

# Membuat query dasar () JavaScript
<a name="configuring-resolvers-js"></a>

GraphQL resolver menghubungkan bidang dalam skema tipe ke sumber data. Resolver adalah mekanisme dimana permintaan dipenuhi.

Resolver AWS AppSync digunakan JavaScript untuk mengonversi ekspresi GraphQL menjadi format yang dapat digunakan sumber data. Atau, template pemetaan dapat ditulis dalam [Apache Velocity Template Language (VTL) untuk](https://velocity.apache.org/engine/2.0/vtl-reference.html) mengubah ekspresi GraphQL menjadi format yang dapat digunakan sumber data.

Bagian ini menjelaskan cara mengkonfigurasi resolver menggunakan. JavaScript Bagian tutorial [Resolver (JavaScript) menyediakan tutorial](https://docs.aws.amazon.com/appsync/latest/devguide/tutorials-js.html) mendalam tentang cara menerapkan resolver menggunakan. JavaScript Bagian [Referensi Resolver (JavaScript)](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html) memberikan penjelasan tentang operasi utilitas yang dapat digunakan dengan JavaScript resolver.

Sebaiknya ikuti panduan ini sebelum mencoba menggunakan salah satu tutorial yang disebutkan di atas.

Di bagian ini, kita akan membahas cara membuat dan mengkonfigurasi resolver untuk kueri dan mutasi.

**catatan**  
Panduan ini mengasumsikan Anda telah membuat skema Anda dan memiliki setidaknya satu kueri atau mutasi. Jika Anda mencari langganan (data waktu nyata), lihat panduan [ini](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-real-time-data.html).

Di bagian ini, kami akan memberikan beberapa langkah umum untuk mengonfigurasi resolver bersama dengan contoh yang menggunakan skema di bawah ini:

```
// schema.graphql file

input CreatePostInput {
  title: String
  date: AWSDateTime
}

type Post {
  id: ID!
  title: String
  date: AWSDateTime
}

type Mutation {
  createPost(input: CreatePostInput!): Post
}

type Query {
  getPost: [Post]
}
```

## Membuat resolver kueri dasar
<a name="create-basic-query-resolver-js"></a>

Bagian ini akan menunjukkan cara membuat resolver kueri dasar.

------
#### [ Console ]

1. Masuk ke Konsol Manajemen AWS dan buka [AppSynckonsol](https://console.aws.amazon.com/appsync/).

   1. Di **APIs dasbor**, pilih GraphQL API Anda.

   1. Di **Sidebar**, pilih **Skema**.

1. Masukkan detail skema dan sumber data Anda. Lihat bagian [Merancang skema Anda](https://docs.aws.amazon.com/appsync/latest/devguide/designing-your-schema.html) dan [Melampirkan sumber data](https://docs.aws.amazon.com/appsync/latest/devguide/attaching-a-data-source.html) untuk informasi selengkapnya.

1. Di sebelah editor **Skema**, Ada jendela bernama **Resolvers**. Kotak ini berisi daftar jenis dan bidang seperti yang didefinisikan di jendela **Skema** Anda. Anda dapat melampirkan resolver ke bidang. Anda kemungkinan besar akan melampirkan resolver ke operasi lapangan Anda. Pada bagian ini, kita akan melihat konfigurasi query sederhana. Di bawah Jenis **kueri**, pilih **Lampirkan** di sebelah bidang kueri Anda.

1. Pada halaman **Attach resolver**, di bawah **jenis Resolver, Anda dapat memilih antara pipeline atau resolver** unit. Untuk informasi selengkapnya tentang jenis ini, lihat [Resolver](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-components.html). Panduan ini akan memanfaatkan`pipeline resolvers`.
**Tip**  
Saat membuat resolver pipeline, sumber data Anda akan dilampirkan ke fungsi pipeline. Fungsi dibuat setelah Anda membuat resolver pipeline itu sendiri, itulah sebabnya tidak ada opsi untuk mengaturnya di halaman ini. Jika Anda menggunakan resolver unit, sumber data terikat langsung ke resolver, jadi Anda akan mengaturnya di halaman ini.

   Untuk **runtime Resolver, pilih `APPSYNC_JS` untuk mengaktifkan runtime**. JavaScript 

1. Anda dapat mengaktifkan [caching](https://docs.aws.amazon.com/appsync/latest/devguide/enabling-caching.html) untuk API ini. Sebaiknya matikan fitur ini untuk saat ini. Pilih **Buat**.

1. Pada halaman **Edit resolver**, ada editor kode bernama kode **Resolver** yang memungkinkan Anda mengimplementasikan logika untuk penangan dan respons resolver (sebelum dan sesudah langkah). Untuk informasi selengkapnya, lihat ikhtisar [JavaScriptresolver](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-overview-js.html). 
**catatan**  
Dalam contoh kita, kita hanya akan membiarkan permintaan kosong dan respons ditetapkan untuk mengembalikan hasil sumber data terakhir dari [konteks](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference-js.html):  

   ```
   import {util} from '@aws-appsync/utils';
   
   export function request(ctx) {
       return {};
   }
   
   export function response(ctx) {
       return ctx.prev.result;
   }
   ```

   Di bawah bagian ini, ada tabel yang disebut **Functions**. Fungsi memungkinkan Anda untuk menerapkan kode yang dapat digunakan kembali di beberapa resolver. Alih-alih terus-menerus menulis ulang atau menyalin kode, Anda dapat menyimpan kode sumber sebagai fungsi untuk ditambahkan ke resolver kapan pun Anda membutuhkannya. 

   Fungsi membentuk sebagian besar daftar operasi pipa. Saat menggunakan beberapa fungsi dalam resolver, Anda mengatur urutan fungsi, dan mereka akan dijalankan dalam urutan itu secara berurutan. Mereka dieksekusi setelah fungsi permintaan berjalan dan sebelum fungsi respon dimulai.

   Untuk menambahkan fungsi baru, di bawah **Fungsi**, pilih **Tambah fungsi**, lalu **Buat fungsi baru**. Atau, Anda mungkin melihat tombol **Create function** untuk memilih sebagai gantinya.

   1. Pilih sumber data. Ini akan menjadi sumber data tempat resolver bertindak.
**catatan**  
Dalam contoh kita, kita melampirkan resolver untuk`getPost`, yang mengambil objek oleh. `Post` `id` Mari kita asumsikan kita sudah menyiapkan tabel DynamoDB untuk skema ini. Kunci partisi diatur ke `id` dan kosong.

   1. Masukkan a`Function name`.

   1. Di bawah **kode Fungsi**, Anda harus mengimplementasikan perilaku fungsi. Ini mungkin membingungkan, tetapi setiap fungsi akan memiliki permintaan lokal dan penangan respons sendiri. Permintaan berjalan, kemudian pemanggilan sumber data dibuat untuk menangani permintaan, kemudian respons sumber data diproses oleh penangan respons. Hasilnya disimpan dalam objek [konteks](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference-js.html). Setelah itu, fungsi berikutnya dalam daftar akan berjalan atau akan diteruskan ke penangan respons langkah setelah jika itu yang terakhir. 
**catatan**  
Dalam contoh kita, kita melampirkan resolver ke`getPost`, yang mendapat daftar `Post` objek dari sumber data. Fungsi permintaan kami akan meminta data dari tabel kami, tabel akan meneruskan responsnya ke konteks (ctx), maka respons akan mengembalikan hasilnya dalam konteks. AWS AppSync Kekuatan terletak pada keterkaitannya dengan layanan lain. AWS Karena kami menggunakan DynamoDB, kami memiliki [serangkaian operasi untuk menyederhanakan hal-hal](https://docs.aws.amazon.com/appsync/latest/devguide/js-resolver-reference-dynamodb.html) seperti ini. Kami memiliki beberapa contoh boilerplate untuk tipe sumber data lainnya juga.  
Kode kita akan terlihat seperti ini:  

      ```
      import { util } from '@aws-appsync/utils';
      
      /**
       * Performs a scan on the dynamodb data source
       */
      export function request(ctx) {
        return { operation: 'Scan' };
      }
      
      /**
       * return a list of scanned post items
       */
      export function response(ctx) {
        return ctx.result.items;
      }
      ```
Pada langkah ini, kami menambahkan dua fungsi:  
`request`: Handler permintaan melakukan operasi pengambilan terhadap sumber data. Argumen berisi objek konteks (`ctx`), atau beberapa data yang tersedia untuk semua resolver melakukan operasi tertentu. Misalnya, mungkin berisi data otorisasi, nama bidang yang diselesaikan, dll. Pernyataan pengembalian melakukan [https://docs.aws.amazon.com//appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-scan](https://docs.aws.amazon.com//appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-scan)operasi (lihat [di sini](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html) untuk contoh). Karena kami bekerja dengan DynamoDB, kami diizinkan untuk menggunakan beberapa operasi dari layanan itu. Pemindaian melakukan pengambilan dasar semua item di tabel kami. Hasil operasi ini disimpan dalam objek konteks sebagai `result` wadah sebelum diteruskan ke handler respons. `request`Dijalankan sebelum respons dalam pipa.
`response`: Response handler yang mengembalikan output dari. `request` Argumennya adalah objek konteks yang diperbarui, dan pernyataan pengembaliannya adalah`ctx.prev.result`. Pada titik ini dalam panduan ini, Anda mungkin tidak terbiasa dengan nilai ini. `ctx`mengacu pada objek konteks. `prev`mengacu pada operasi sebelumnya dalam pipa, yang merupakan milik kami`request`. `result`Berisi hasil resolver saat bergerak melalui pipa. Jika Anda menempatkan semuanya bersama-sama, `ctx.prev.result` mengembalikan hasil dari operasi terakhir yang dilakukan, yang merupakan handler permintaan.

   1. Pilih **Buat** setelah selesai.

1. Kembali ke layar resolver, di bawah **Fungsi**, pilih drop-down **Tambah fungsi** dan tambahkan fungsi Anda ke daftar fungsi Anda.

1. Pilih **Simpan** untuk memperbarui resolver.

------
#### [ CLI ]

**Untuk menambahkan fungsi Anda**
+ Buat fungsi untuk resolver pipeline Anda menggunakan perintah. `[create-function](https://docs.aws.amazon.com/cli/latest/reference/appsync/create-function.html)`

  Anda harus memasukkan beberapa parameter untuk perintah khusus ini:

  1. API Anda. `api-id`

  1. `name`Fungsi di AWS AppSync konsol.

  1. Itu`data-source-name`, atau nama sumber data yang akan digunakan fungsi. Itu harus sudah dibuat dan ditautkan ke GraphQL API Anda di layanan. AWS AppSync 

  1. atau lingkungan dan bahasa dari fungsi tersebut. `runtime` Untuk JavaScript, nama harus`APPSYNC_JS`, dan runtime,`1.0.0`.

  1. Penangan`code`, atau permintaan dan respons fungsi Anda. Meskipun Anda dapat mengetiknya secara manual, jauh lebih mudah untuk menambahkannya ke file.txt (atau format serupa) dan kemudian meneruskannya sebagai argumen. 
**catatan**  
Kode kueri kami akan berada dalam file yang diteruskan sebagai argumen:  

     ```
     import { util } from '@aws-appsync/utils';
     
     /**
      * Performs a scan on the dynamodb data source
      */
     export function request(ctx) {
       return { operation: 'Scan' };
     }
     
     /**
      * return a list of scanned post items
      */
     export function response(ctx) {
       return ctx.result.items;
     }
     ```

  Contoh perintah mungkin terlihat seperti ini:

  ```
  aws appsync create-function \
  --api-id abcdefghijklmnopqrstuvwxyz \
  --name get_posts_func_1 \
  --data-source-name table-for-posts \
  --runtime name=APPSYNC_JS,runtimeVersion=1.0.0 \
  --code file://~/path/to/file/{filename}.{fileType}
  ```

  Output akan dikembalikan dalam CLI. Inilah contohnya:

  ```
  {
      "functionConfiguration": {
          "functionId": "ejglgvmcabdn7lx75ref4qeig4",
          "functionArn": "arn:aws:appsync:us-west-2:107289374856:apis/abcdefghijklmnopqrstuvwxyz/functions/ejglgvmcabdn7lx75ref4qeig4",
          "name": "get_posts_func_1",
          "dataSourceName": "table-for-posts",
          "maxBatchSize": 0,
          "runtime": {
              "name": "APPSYNC_JS",
              "runtimeVersion": "1.0.0"
          },
          "code": "{{Code output goes here}}"
      }
  }
  ```
**catatan**  
Pastikan Anda merekam `functionId` suatu tempat karena ini akan digunakan untuk melampirkan fungsi ke resolver.

**Untuk membuat resolver Anda**
+ Buat fungsi pipeline `Query` dengan menjalankan `[create-resolver](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/appsync/create-resolver.html)` perintah.

  Anda harus memasukkan beberapa parameter untuk perintah khusus ini:

  1. API Anda. `api-id`

  1. Jenis objek`type-name`, atau khusus dalam skema Anda (Query, Mutation, Subscription).

  1. Operasi`field-name`, atau bidang di dalam jenis objek khusus yang ingin Anda lampirkan resolver.

  1. The`kind`, yang menentukan unit atau resolver pipa. Setel ini `PIPELINE` untuk mengaktifkan fungsi pipeline.

  1. The`pipeline-config`, atau fungsi (s) untuk melampirkan ke resolver. Pastikan Anda mengetahui `functionId` nilai-nilai fungsi Anda. Urutan daftar penting.

  1. Yang`runtime`, yang `APPSYNC_JS` (JavaScript). `runtimeVersion`Saat ini adalah`1.0.0`.

  1. Itu`code`, yang berisi penangan langkah sebelum dan sesudah.
**catatan**  
Kode kueri kami akan berada dalam file yang diteruskan sebagai argumen:  

     ```
     import { util } from '@aws-appsync/utils';
     
     /**
      * Sends a request to `put` an item in the DynamoDB data source
      */
     export function request(ctx) {
       const { id, ...values } = ctx.args;
       return {
         operation: 'PutItem',
         key: util.dynamodb.toMapValues({ id }),
         attributeValues: util.dynamodb.toMapValues(values),
       };
     }
     
     /**
      * returns the result of the `put` operation
      */
     export function response(ctx) {
       return ctx.result;
     }
     ```

  Contoh perintah mungkin terlihat seperti ini:

  ```
  aws appsync create-resolver \
  --api-id abcdefghijklmnopqrstuvwxyz \
  --type-name Query \
  --field-name getPost \
  --kind PIPELINE \
  --pipeline-config functions=ejglgvmcabdn7lx75ref4qeig4 \
  --runtime name=APPSYNC_JS,runtimeVersion=1.0.0 \
  --code file:///path/to/file/{filename}.{fileType}
  ```

  Output akan dikembalikan dalam CLI. Inilah contohnya:

  ```
  {
      "resolver": {
          "typeName": "Mutation",
          "fieldName": "getPost",
          "resolverArn": "arn:aws:appsync:us-west-2:107289374856:apis/abcdefghijklmnopqrstuvwxyz/types/Mutation/resolvers/getPost",
          "kind": "PIPELINE",
          "pipelineConfig": {
              "functions": [
                  "ejglgvmcabdn7lx75ref4qeig4"
              ]
          },
          "maxBatchSize": 0,
          "runtime": {
              "name": "APPSYNC_JS",
              "runtimeVersion": "1.0.0"
          },
          "code": "{{Code output goes here}}"
      }
  }
  ```

------
#### [ CDK ]

**Tip**  
[Sebelum Anda menggunakan CDK, kami sarankan untuk meninjau [dokumentasi resmi](https://docs.aws.amazon.com/cdk/v2/guide/home.html) CDK bersama dengan referensi CDK AWS AppSync.](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_appsync-readme.html)  
Langkah-langkah yang tercantum di bawah ini hanya akan menampilkan contoh umum dari cuplikan yang digunakan untuk menambahkan sumber daya tertentu. Ini **tidak** dimaksudkan untuk menjadi solusi yang berfungsi dalam kode produksi Anda. Kami juga menganggap Anda sudah memiliki aplikasi yang berfungsi.

Aplikasi dasar akan membutuhkan hal-hal berikut:

1. Arahan impor layanan

1. Kode skema

1. Generator sumber data

1. Kode fungsi

1. Kode penyelesai

Dari bagian [Merancang skema Anda](https://docs.aws.amazon.com/appsync/latest/devguide/designing-your-schema.html) dan [Melampirkan sumber data](https://docs.aws.amazon.com/appsync/latest/devguide/attaching-a-data-source.html), kami tahu bahwa file tumpukan akan menyertakan arahan impor formulir:

```
import * as {{x}} from '{{x}}'; # import wildcard as the 'x' keyword from 'x-service'
import {{{a}}, {{b}}, ...} from '{{c}}'; # import {specific constructs} from 'c-service'
```

**catatan**  
Di bagian sebelumnya, kami hanya menyatakan cara AWS AppSync mengimpor konstruksi. Dalam kode nyata, Anda harus mengimpor lebih banyak layanan hanya untuk menjalankan aplikasi. Dalam contoh kami, jika kami membuat aplikasi CDK yang sangat sederhana, kami setidaknya akan mengimpor AWS AppSync layanan bersama dengan sumber data kami, yang merupakan tabel DynamoDB. Kami juga perlu mengimpor beberapa konstruksi tambahan untuk menerapkan aplikasi:  

```
import * as cdk from 'aws-cdk-lib';
import * as appsync from 'aws-cdk-lib/aws-appsync';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
import { Construct } from 'constructs';
```
Untuk meringkas masing-masing:  
`import * as cdk from 'aws-cdk-lib';`: Ini memungkinkan Anda untuk menentukan aplikasi CDK dan konstruksi seperti tumpukan. Ini juga berisi beberapa fungsi utilitas yang berguna untuk aplikasi kita seperti memanipulasi metadata. Jika Anda terbiasa dengan arahan impor ini, tetapi bertanya-tanya mengapa pustaka inti cdk tidak digunakan di sini, lihat halaman [Migrasi](https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html).
`import * as appsync from 'aws-cdk-lib/aws-appsync';`: Ini mengimpor [AWS AppSync layanan](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_appsync-readme.html).
`import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';`: Ini mengimpor layanan [DynamoDB](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_dynamodb-readme.html).
`import { Construct } from 'constructs';`: Kita membutuhkan ini untuk mendefinisikan [konstruksi](https://docs.aws.amazon.com/cdk/v2/guide/constructs.html) root.

Jenis impor tergantung pada layanan yang Anda panggil. Kami merekomendasikan untuk melihat dokumentasi CDK sebagai contoh. Skema di bagian atas halaman akan menjadi file terpisah di aplikasi CDK Anda sebagai `.graphql` file. Dalam file stack, kita dapat mengaitkannya dengan GraphQL baru menggunakan formulir:

```
const add_api = new appsync.GraphqlApi(this, 'graphQL-example', {
  name: 'my-first-api',
  schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'schema.graphql')),
});
```

**catatan**  
Dalam lingkup`add_api`, kami menambahkan API GraphQL baru menggunakan kata kunci yang diikuti `new` oleh. `appsync.GraphqlApi(scope: Construct, id: string , props: GraphqlApiProps)` Cakupan kami adalah`this`, id CFN adalah`graphQL-example`, dan alat peraga kami adalah `my-first-api` (nama API di konsol) dan `schema.graphql` (jalur absolut ke file skema).

Untuk menambahkan sumber data, pertama-tama Anda harus menambahkan sumber data ke tumpukan. Kemudian, Anda perlu mengaitkannya dengan GraphQL API menggunakan metode khusus sumber. Asosiasi akan terjadi ketika Anda membuat fungsi resolver Anda. Sementara itu, mari kita gunakan contoh dengan membuat tabel DynamoDB menggunakan: `dynamodb.Table`

```
const add_ddb_table = new dynamodb.Table(this, 'posts-table', {
  partitionKey: {
    name: 'id',
    type: dynamodb.AttributeType.STRING,
  },
});
```

**catatan**  
Jika kita menggunakan ini dalam contoh kita, kita akan menambahkan tabel DynamoDB baru dengan id CFN `posts-table` dari dan kunci partisi. `id (S)`

Selanjutnya, kita perlu mengimplementasikan resolver kita di file stack. Berikut adalah contoh kueri sederhana yang memindai semua item dalam tabel DynamoDB:

```
const add_func = new appsync.AppsyncFunction(this, 'func-get-posts', {
  name: 'get_posts_func_1',
  add_api,
  dataSource: add_api.addDynamoDbDataSource('table-for-posts', add_ddb_table),
  code: appsync.Code.fromInline(`
      export function request(ctx) {
        return { operation: 'Scan' };
      }

      export function response(ctx) {
        return ctx.result.items;
      }
  `),
  runtime: appsync.FunctionRuntime.JS_1_0_0,
});

new appsync.Resolver(this, 'pipeline-resolver-get-posts', {
  add_api,
  typeName: 'Query',
  fieldName: 'getPost',
  code: appsync.Code.fromInline(`
      export function request(ctx) {
        return {};
      }

      export function response(ctx) {
        return ctx.prev.result;
      }
 `),
  runtime: appsync.FunctionRuntime.JS_1_0_0,
  pipelineConfig: [add_func],
});
```

**catatan**  
Pertama, kami membuat fungsi yang disebut`add_func`. Urutan pembuatan ini mungkin tampak agak berlawanan dengan intuisi, tetapi Anda harus membuat fungsi di resolver pipeline Anda sebelum Anda membuat resolver itu sendiri. Sebuah fungsi mengikuti formulir:  

```
AppsyncFunction(scope: Construct, id: string, props: AppsyncFunctionProps)
```
Ruang lingkup kami adalah`this`, id CFN kami`func-get-posts`, dan alat peraga kami berisi detail fungsi yang sebenarnya. Di dalam alat peraga, kami menyertakan:  
Fungsi `name` yang akan hadir di AWS AppSync konsol (`get_posts_func_1`).
GraphQL API yang kita buat sebelumnya (). `add_api`
Sumber data; ini adalah titik di mana kita menghubungkan sumber data ke nilai GraphQL API, lalu melampirkannya ke fungsi. Kami mengambil tabel yang kami buat (`add_ddb_table`) dan melampirkannya ke GraphQL API `add_api` () menggunakan salah `GraphqlApi` satu metode (). [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_appsync.GraphqlApi.html#addwbrdynamowbrdbwbrdatawbrsourceid-table-options](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_appsync.GraphqlApi.html#addwbrdynamowbrdbwbrdatawbrsourceid-table-options) Nilai id (`table-for-posts`) adalah nama sumber data di AWS AppSync konsol. Untuk daftar metode khusus sumber, lihat halaman berikut:  
[ DynamoDbDataSource ](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_appsync.DynamoDbDataSource.html) 
 [ EventBridgeDataSource ](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_appsync.EventBridgeDataSource.html) 
 [ HttpDataSource ](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_appsync.HttpDataSource.html) 
 [ LambdaDataSource ](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_appsync.LambdaDataSource.html) 
 [ NoneDataSource ](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_appsync.NoneDataSource.html) 
 [ OpenSearchDataSource ](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_appsync.OpenSearchDataSource.html) 
 [ RdsDataSource ](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_appsync.RdsDataSource.html) 
Kode berisi permintaan fungsi dan penangan respons, yang merupakan pemindaian dan pengembalian sederhana.
Runtime menentukan bahwa kita ingin menggunakan APPSYNC\_JS runtime versi 1.0.0. Perhatikan bahwa saat ini satu-satunya versi yang tersedia untuk APPSYNC\_JS.
Selanjutnya, kita perlu melampirkan fungsi ke resolver pipa. Kami membuat resolver kami menggunakan formulir:  

```
Resolver(scope: Construct, id: string, props: ResolverProps)
```
Ruang lingkup kami adalah`this`, id CFN kami`pipeline-resolver-get-posts`, dan alat peraga kami berisi detail fungsi yang sebenarnya. Di dalam alat peraga, kami menyertakan:  
GraphQL API yang kita buat sebelumnya (). `add_api`
Nama tipe objek khusus; ini adalah operasi query, jadi kita hanya menambahkan nilai`Query`.
Nama bidang (`getPost`) adalah nama bidang dalam skema di bawah `Query` tipe.
Kode berisi penangan sebelum dan sesudah Anda. Contoh kami hanya mengembalikan hasil apa pun yang ada dalam konteks setelah fungsi melakukan operasinya.
Runtime menentukan bahwa kita ingin menggunakan APPSYNC\_JS runtime versi 1.0.0. Perhatikan bahwa saat ini satu-satunya versi yang tersedia untuk APPSYNC\_JS.
Konfigurasi pipeline berisi referensi ke fungsi yang kita buat (`add_func`).

------

Untuk meringkas apa yang terjadi dalam contoh ini, Anda melihat AWS AppSync fungsi yang menerapkan permintaan dan penangan respons. Fungsi ini bertanggung jawab untuk berinteraksi dengan sumber data Anda. Handler permintaan mengirim `Scan` operasi ke AWS AppSync, menginstruksikannya tentang operasi apa yang harus dilakukan terhadap sumber data DynamoDB Anda. Response handler mengembalikan daftar item (`ctx.result.items`). Daftar item kemudian dipetakan ke tipe `Post` GraphQL secara otomatis. 

## Membuat resolver mutasi dasar
<a name="creating-basic-mutation-resolvers-js"></a>

Bagian ini akan menunjukkan cara membuat resolver mutasi dasar.

------
#### [ Console ]

1. Masuk ke Konsol Manajemen AWS dan buka [AppSynckonsol](https://console.aws.amazon.com/appsync/).

   1. Di **APIs dasbor**, pilih GraphQL API Anda.

   1. Di **Sidebar**, pilih **Skema**.

1. Di bawah bagian **Resolvers** dan jenis **Mutasi**, pilih **Lampirkan di sebelah bidang** Anda.
**catatan**  
Dalam contoh kita, kita melampirkan resolver untuk`createPost`, yang menambahkan `Post` objek ke tabel kita. Mari kita asumsikan kita menggunakan tabel DynamoDB yang sama dari bagian terakhir. Kunci partisi diatur ke `id` dan kosong.

1. Pada halaman **Attach resolver**, di bawah jenis **Resolver**, pilih. `pipeline resolvers` [Sebagai pengingat, Anda dapat menemukan informasi lebih lanjut tentang resolver di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-components.html) Untuk **runtime Resolver, pilih `APPSYNC_JS` untuk mengaktifkan runtime**. JavaScript 

1. Anda dapat mengaktifkan [caching](https://docs.aws.amazon.com/appsync/latest/devguide/enabling-caching.html) untuk API ini. Sebaiknya matikan fitur ini untuk saat ini. Pilih **Buat**.

1. Pilih **Tambah fungsi**, lalu pilih **Buat fungsi baru**. Atau, Anda mungkin melihat tombol **Create function** untuk memilih sebagai gantinya.

   1. Pilih sumber data Anda. Ini harus menjadi sumber yang datanya akan Anda manipulasi dengan mutasi.

   1. Masukkan a`Function name`.

   1. Di bawah **kode Fungsi**, Anda harus mengimplementasikan perilaku fungsi. Ini adalah mutasi, jadi permintaan idealnya akan melakukan beberapa operasi perubahan status pada sumber data yang dipanggil. Hasilnya akan diproses oleh fungsi respons.
**catatan**  
`createPost`menambahkan, atau “menempatkan”, yang baru `Post` dalam tabel dengan parameter kami sebagai data. Kita bisa menambahkan sesuatu seperti ini:   

      ```
      import { util } from '@aws-appsync/utils';
      
      /**
       * Sends a request to `put` an item in the DynamoDB data source
       */
      export function request(ctx) {
        return {
          operation: 'PutItem',
          key: util.dynamodb.toMapValues({id: util.autoId()}),
          attributeValues: util.dynamodb.toMapValues(ctx.args.input),
        };
      }
      
      /**
       * returns the result of the `put` operation
       */
      export function response(ctx) {
        return ctx.result;
      }
      ```
Pada langkah ini, kami juga menambahkan `request` dan `response` berfungsi:  
`request`: Handler permintaan menerima konteks sebagai argumen. Pernyataan pengembalian request handler melakukan [https://docs.aws.amazon.com//appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-putitem](https://docs.aws.amazon.com//appsync/latest/devguide/js-resolver-reference-dynamodb.html#js-aws-appsync-resolver-reference-dynamodb-putitem)perintah, yang merupakan operasi DynamoDB bawaan ([lihat](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/getting-started-step-2.html) di sini [atau](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithItems.html#WorkingWithItems.WritingData) di sini untuk contoh). `PutItem`Perintah menambahkan `Post` objek ke tabel DynamoDB kami dengan mengambil nilai `key` partisi (dihasilkan secara otomatis `util.autoid()` oleh) `attributes` dan dari input argumen konteks (ini adalah nilai yang akan kami berikan dalam permintaan kami). `key`Itu adalah `id` dan `attributes` adalah argumen `title` lapangan `date` dan. Keduanya diformat sebelumnya melalui [https://docs.aws.amazon.com//appsync/latest/devguide/dynamodb-helpers-in-util-dynamodb-js.html#utility-helpers-in-toMap-js](https://docs.aws.amazon.com//appsync/latest/devguide/dynamodb-helpers-in-util-dynamodb-js.html#utility-helpers-in-toMap-js)helper untuk bekerja dengan tabel DynamoDB.
`response`: Respons menerima konteks yang diperbarui dan mengembalikan hasil penangan permintaan.

   1. Pilih **Buat** setelah selesai.

1. Kembali ke layar resolver, di bawah **Fungsi**, pilih drop-down **Tambah fungsi** dan tambahkan fungsi Anda ke daftar fungsi Anda.

1. Pilih **Simpan** untuk memperbarui resolver.

------
#### [ CLI ]

**Untuk menambahkan fungsi Anda**
+ Buat fungsi untuk resolver pipeline Anda menggunakan perintah. `[create-function](https://docs.aws.amazon.com/cli/latest/reference/appsync/create-function.html)`

  Anda harus memasukkan beberapa parameter untuk perintah khusus ini:

  1. API Anda. `api-id`

  1. `name`Fungsi di AWS AppSync konsol.

  1. Itu`data-source-name`, atau nama sumber data yang akan digunakan fungsi. Itu harus sudah dibuat dan ditautkan ke GraphQL API Anda di layanan. AWS AppSync 

  1. atau lingkungan dan bahasa dari fungsi tersebut. `runtime` Untuk JavaScript, nama harus`APPSYNC_JS`, dan runtime,`1.0.0`.

  1. Penangan`code`, atau permintaan dan respons fungsi Anda. Meskipun Anda dapat mengetiknya secara manual, jauh lebih mudah untuk menambahkannya ke file.txt (atau format serupa) kemudian meneruskannya sebagai argumen. 
**catatan**  
Kode kueri kami akan berada dalam file yang diteruskan sebagai argumen:  

     ```
     import { util } from '@aws-appsync/utils';
     
     /**
      * Sends a request to `put` an item in the DynamoDB data source
      */
     export function request(ctx) {
       return {
         operation: 'PutItem',
         key: util.dynamodb.toMapValues({id: util.autoId()}),
         attributeValues: util.dynamodb.toMapValues(ctx.args.input),
       };
     }
     
     /**
      * returns the result of the `put` operation
      */
     export function response(ctx) {
       return ctx.result;
     }
     ```

  Contoh perintah mungkin terlihat seperti ini:

  ```
  aws appsync create-function \
  --api-id abcdefghijklmnopqrstuvwxyz \
  --name add_posts_func_1 \
  --data-source-name table-for-posts \
  --runtime name=APPSYNC_JS,runtimeVersion=1.0.0 \
  --code file:///path/to/file/{filename}.{fileType}
  ```

  Output akan dikembalikan dalam CLI. Inilah contohnya:

  ```
  {
      "functionConfiguration": {
          "functionId": "vulcmbfcxffiram63psb4dduoa",
          "functionArn": "arn:aws:appsync:us-west-2:107289374856:apis/abcdefghijklmnopqrstuvwxyz/functions/vulcmbfcxffiram63psb4dduoa",
          "name": "add_posts_func_1",
          "dataSourceName": "table-for-posts",
          "maxBatchSize": 0,
          "runtime": {
              "name": "APPSYNC_JS",
              "runtimeVersion": "1.0.0"
          },
          "code": "{{Code output foes here}}"
      }
  }
  ```
**catatan**  
Pastikan Anda merekam `functionId` suatu tempat karena ini akan digunakan untuk melampirkan fungsi ke resolver.

**Untuk membuat resolver Anda**
+ Buat fungsi pipeline `Mutation` dengan menjalankan `[create-resolver](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/appsync/create-resolver.html)` perintah.

  Anda harus memasukkan beberapa parameter untuk perintah khusus ini:

  1. API Anda. `api-id`

  1. Jenis objek`type-name`, atau khusus dalam skema Anda (Query, Mutation, Subscription).

  1. Operasi`field-name`, atau bidang di dalam jenis objek khusus yang ingin Anda lampirkan resolver.

  1. The`kind`, yang menentukan unit atau resolver pipa. Setel ini `PIPELINE` untuk mengaktifkan fungsi pipeline.

  1. The`pipeline-config`, atau fungsi (s) untuk melampirkan ke resolver. Pastikan Anda mengetahui `functionId` nilai-nilai fungsi Anda. Urutan daftar penting.

  1. Yang`runtime`, yang `APPSYNC_JS` (JavaScript). `runtimeVersion`Saat ini adalah`1.0.0`.

  1. Itu`code`, yang berisi langkah sebelum dan sesudah.
**catatan**  
Kode kueri kami akan berada dalam file yang diteruskan sebagai argumen:  

     ```
     import { util } from '@aws-appsync/utils';
     
     /**
      * Sends a request to `put` an item in the DynamoDB data source
      */
     export function request(ctx) {
       const { id, ...values } = ctx.args;
       return {
         operation: 'PutItem',
         key: util.dynamodb.toMapValues({ id }),
         attributeValues: util.dynamodb.toMapValues(values),
       };
     }
     
     /**
      * returns the result of the `put` operation
      */
     export function response(ctx) {
       return ctx.result;
     }
     ```

  Contoh perintah mungkin terlihat seperti ini:

  ```
  aws appsync create-resolver \
  --api-id abcdefghijklmnopqrstuvwxyz \
  --type-name Mutation \
  --field-name createPost \
  --kind PIPELINE \
  --pipeline-config functions=vulcmbfcxffiram63psb4dduoa \
  --runtime name=APPSYNC_JS,runtimeVersion=1.0.0 \
  --code file:///path/to/file/{filename}.{fileType}
  ```

  Output akan dikembalikan dalam CLI. Inilah contohnya:

  ```
  {
      "resolver": {
          "typeName": "Mutation",
          "fieldName": "createPost",
          "resolverArn": "arn:aws:appsync:us-west-2:107289374856:apis/abcdefghijklmnopqrstuvwxyz/types/Mutation/resolvers/createPost",
          "kind": "PIPELINE",
          "pipelineConfig": {
              "functions": [
                  "vulcmbfcxffiram63psb4dduoa"
              ]
          },
          "maxBatchSize": 0,
          "runtime": {
              "name": "APPSYNC_JS",
              "runtimeVersion": "1.0.0"
          },
          "code": "{{Code output goes here}}"
      }
  }
  ```

------
#### [ CDK ]

**Tip**  
[Sebelum Anda menggunakan CDK, kami sarankan untuk meninjau [dokumentasi resmi](https://docs.aws.amazon.com/cdk/v2/guide/home.html) CDK bersama dengan referensi CDK AWS AppSync.](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_appsync-readme.html)  
Langkah-langkah yang tercantum di bawah ini hanya akan menampilkan contoh umum dari cuplikan yang digunakan untuk menambahkan sumber daya tertentu. Ini **tidak** dimaksudkan untuk menjadi solusi yang berfungsi dalam kode produksi Anda. Kami juga menganggap Anda sudah memiliki aplikasi yang berfungsi.
+ Untuk membuat mutasi, dengan asumsi Anda berada di proyek yang sama, Anda dapat menambahkannya ke file tumpukan seperti kueri. Berikut adalah fungsi dan resolver yang dimodifikasi untuk mutasi yang menambahkan yang baru `Post` ke tabel:

  ```
  const add_func_2 = new appsync.AppsyncFunction(this, 'func-add-post', {
    name: 'add_posts_func_1',
    add_api,
    dataSource: add_api.addDynamoDbDataSource('table-for-posts-2', add_ddb_table),
        code: appsync.Code.fromInline(`
            export function request(ctx) {
              return {
                operation: 'PutItem',
                key: util.dynamodb.toMapValues({id: util.autoId()}),
                attributeValues: util.dynamodb.toMapValues(ctx.args.input),
              };
            }
  
            export function response(ctx) {
              return ctx.result;
            }
        `), 
    runtime: appsync.FunctionRuntime.JS_1_0_0,
  });
  
  new appsync.Resolver(this, 'pipeline-resolver-create-posts', {
    add_api,
    typeName: 'Mutation',
    fieldName: 'createPost',
        code: appsync.Code.fromInline(`
            export function request(ctx) {
              return {};
            }
  
            export function response(ctx) {
              return ctx.prev.result;
            }
        `),
    runtime: appsync.FunctionRuntime.JS_1_0_0,
    pipelineConfig: [add_func_2],
  });
  ```
**catatan**  
Karena mutasi dan kueri ini terstruktur dengan cara yang sama, kami hanya akan menjelaskan perubahan yang kami buat untuk membuat mutasi.   
Dalam fungsinya, kami mengubah id CFN menjadi `func-add-post` dan nama `add_posts_func_1` untuk mencerminkan fakta bahwa kami menambahkan `Posts` ke tabel. Di sumber data, kami membuat asosiasi baru ke table (`add_ddb_table`) kami di AWS AppSync konsol `table-for-posts-2` karena `addDynamoDbDataSource` metode memerlukannya. Perlu diingat, asosiasi baru ini masih menggunakan tabel yang sama yang kita buat sebelumnya, tetapi kita sekarang memiliki dua koneksi ke sana di AWS AppSync konsol: satu untuk kueri sebagai `table-for-posts` dan satu untuk mutasi sebagai`table-for-posts-2`. Kode diubah untuk menambahkan a `Post` dengan menghasilkan `id` nilainya secara otomatis dan menerima masukan klien untuk bidang lainnya.  
Dalam resolver, kita mengubah nilai id `pipeline-resolver-create-posts` untuk mencerminkan fakta bahwa kita menambahkan `Posts` ke tabel. Untuk mencerminkan mutasi dalam skema, nama tipe diubah menjadi`Mutation`, dan nama,. `createPost` Konfigurasi pipeline disetel ke fungsi mutasi baru kami. `add_func_2`

------

Untuk meringkas apa yang terjadi dalam contoh ini, AWS AppSync secara otomatis mengonversi argumen yang ditentukan di `createPost` bidang dari skema GraphQL Anda menjadi operasi DynamoDB. Contoh menyimpan catatan di DynamoDB menggunakan kunci`id`, yang secara otomatis dibuat menggunakan helper kami. `util.autoId()` Semua bidang lain yang Anda berikan ke argumen konteks (`ctx.args.input`) dari permintaan yang dibuat di AWS AppSync konsol atau sebaliknya akan disimpan sebagai atribut tabel. Baik kunci dan atribut secara otomatis dipetakan ke format DynamoDB yang kompatibel menggunakan helper. `util.dynamodb.toMapValues(values)`

AWS AppSync juga mendukung alur kerja pengujian dan debug untuk mengedit resolver. Anda dapat menggunakan `context` objek tiruan untuk melihat nilai template yang diubah sebelum memanggilnya. Secara opsional, Anda dapat melihat permintaan lengkap ke sumber data secara interaktif saat menjalankan kueri. Untuk informasi selengkapnya, lihat [Menguji dan debug resolvers (JavaScript)](https://docs.aws.amazon.com/appsync/latest/devguide/test-debug-resolvers-js.html) serta [Monitoring](https://docs.aws.amazon.com/appsync/latest/devguide/monitoring.html#aws-appsync-monitoring) dan logging.

## Resolver tingkat lanjut
<a name="advanced-resolvers-js"></a>

Jika Anda mengikuti bagian pagination opsional dalam [Merancang skema Anda](designing-your-schema.md#aws-appsync-designing-your-schema), Anda masih perlu menambahkan resolver Anda ke permintaan Anda untuk menggunakan pagination. Contoh kami menggunakan pagination query yang dipanggil `getPosts` untuk mengembalikan hanya sebagian dari hal-hal yang diminta pada suatu waktu. Kode resolver kami di bidang itu mungkin terlihat seperti ini:

```
/**
 * Performs a scan on the dynamodb data source
 */
export function request(ctx) {
  const { limit = 20, nextToken } = ctx.args;
  return { operation: 'Scan', limit, nextToken };
}

/**
 * @returns the result of the `put` operation
 */
export function response(ctx) {
  const { items: posts = [], nextToken } = ctx.result;
  return { posts, nextToken };
}
```

Dalam permintaan, kami lulus dalam konteks permintaan. Kami `limit` adalah{{20}}, artinya kami mengembalikan hingga 20 `Posts` di kueri pertama. `nextToken`Kursor kami diperbaiki ke `Post` entri pertama di sumber data. Ini diteruskan ke argumen. Permintaan kemudian melakukan pemindaian dari yang pertama `Post` hingga nomor batas pemindaian. Sumber data menyimpan hasil dalam konteks, yang diteruskan ke respons. Respons mengembalikan `Posts` itu diambil, kemudian menetapkan `nextToken` diatur ke `Post` entri tepat setelah batas. Permintaan berikutnya dikirim untuk melakukan hal yang sama persis tetapi dimulai dari offset tepat setelah kueri pertama. Perlu diingat bahwa permintaan semacam ini dilakukan secara berurutan dan tidak secara paralel.