

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

# AWS AppSync referensi template pemetaan resolver (VTL)
<a name="resolver-mapping-template-reference"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

Bagian berikut akan menjelaskan bagaimana operasi utilitas dapat digunakan dalam template pemetaan:
+  [Ikhtisar template pemetaan resolver](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-overview.html) - Pelajari lebih lanjut tentang cara kerja resolver. AWS AppSync
+  [Panduan pemrograman template pemetaan Resolver](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-programming-guide.html) - Pelajari lebih lanjut tentang struktur data VTL dasar dan penanganan logika.
+  [Referensi konteks template pemetaan penyelesai - Pelajari lebih lanjut tentang peta konteks dan cara penggunaannya dalam resolver](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference.html).
+  [Referensi utilitas template pemetaan Resolver](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-util-reference.html) - Pelajari lebih lanjut tentang menggunakan utilitas untuk menyederhanakan kode.
+  Referensi [template pemetaan Resolver untuk DynamoDB - Pelajari selengkapnya tentang bagaimana resolver berinteraksi dengan DynamoDB](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html).
+  [Referensi template pemetaan resolver untuk RDS](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-rds.html) - Pelajari lebih lanjut tentang struktur resolver dan interaksi dengan RDS.
+  [Referensi templat pemetaan penyelesai untuk OpenSearch ](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-elasticsearch.html) - Pelajari lebih lanjut tentang permintaan resolver dan struktur respons serta interaksi dengan Layanan. OpenSearch 
+  Referensi [template pemetaan resolver untuk Lambda](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-lambda.html) - Pelajari lebih lanjut tentang permintaan resolver dan struktur respons serta interaksi dengan Lambda.
+  [Referensi templat pemetaan penyelesai untuk EventBridge ](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-eventbridge.html) - Pelajari lebih lanjut tentang permintaan resolver dan struktur respons serta interaksi dengannya. EventBridge
+  [Referensi templat pemetaan penyelesai untuk sumber data Tidak Ada](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-none.html) - Pelajari lebih lanjut tentang permintaan resolver dan struktur respons serta interaksi dengan sumber data NONE.
+  [Referensi template pemetaan resolver untuk HTTP](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-http.html) - Pelajari lebih lanjut tentang permintaan resolver dan struktur respons serta interaksi dengan titik akhir HTTP.

# AWS AppSync ikhtisar template pemetaan resolver
<a name="resolver-mapping-template-reference-overview"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

AWS AppSync memungkinkan Anda menanggapi permintaan GraphQL dengan melakukan operasi pada sumber daya Anda. Untuk setiap bidang GraphQL yang ingin Anda jalankan kueri atau mutasi, resolver harus dilampirkan untuk berkomunikasi dengan sumber data. Komunikasi biasanya melalui parameter atau operasi yang unik untuk sumber data.

Resolver adalah konektor antara GraphQL dan sumber data. Mereka memberi tahu AWS AppSync cara menerjemahkan permintaan GraphQL yang masuk ke dalam instruksi untuk sumber data backend Anda, dan bagaimana menerjemahkan respons dari sumber data itu kembali ke respons GraphQL. Mereka ditulis dalam [Apache Velocity Template Language (VTL)](https://velocity.apache.org/engine/1.7/user-guide.html), yang mengambil permintaan Anda sebagai input dan output dokumen JSON yang berisi instruksi untuk resolver. Anda dapat menggunakan template pemetaan untuk instruksi sederhana, seperti meneruskan argumen dari bidang GraphQL, atau untuk instruksi yang lebih kompleks, seperti perulangan argumen untuk membangun item sebelum memasukkan item ke DynamoDB. 

Ada dua jenis resolver yang memanfaatkan template pemetaan dengan cara AWS AppSync yang sedikit berbeda:
+ Penyelesai unit
+ Penyelesai pipa

## Penyelesai unit
<a name="unit-resolvers"></a>

Resolver unit adalah entitas mandiri yang hanya menyertakan template permintaan dan respons. Gunakan ini untuk operasi tunggal sederhana seperti mencantumkan item dari satu sumber data.
+ Templat permintaan: Ambil permintaan yang masuk setelah operasi GraphQL diuraikan dan ubah menjadi konfigurasi permintaan untuk operasi sumber data yang dipilih.
+ Template respons: Menafsirkan respons dari sumber data Anda dan memetakannya ke bentuk tipe keluaran bidang GraphQL.

## Penyelesai pipa
<a name="pipeline-resolvers"></a>

Pipeline resolver berisi satu atau lebih *fungsi* yang dilakukan secara berurutan. Setiap fungsi menyertakan template permintaan dan template respons. Pipeline resolver juga memiliki template *before* dan *after* template yang mengelilingi urutan fungsi yang berisi template. Template *after* memetakan ke tipe output bidang GraphQL. Pipeline resolver berbeda dari resolver unit dalam cara template respon memetakan output. Pipeline resolver dapat memetakan ke output apa pun yang Anda inginkan, termasuk input untuk fungsi lain atau template *setelah* resolver pipeline. 

 *Fungsi* Pipeline resolver memungkinkan Anda untuk menulis logika umum yang dapat Anda gunakan kembali di beberapa resolver dalam skema Anda. Fungsi dilampirkan langsung ke sumber data, dan seperti resolver unit, berisi format template pemetaan permintaan dan respons yang sama.

Diagram berikut menunjukkan aliran proses resolver unit di sebelah kiri dan resolver pipa di sebelah kanan.

![\[Diagram resolver unit yang berkomunikasi dengan sumber data tunggal dan diagram resolver pipa yang berkomunikasi dengan beberapa sumber data.\]](http://docs.aws.amazon.com/id_id/appsync/latest/devguide/images/unit-pipeline-resolver.png)


Pipeline resolver berisi superset fungsionalitas yang didukung oleh unit resolver, dan banyak lagi, dengan biaya yang sedikit lebih rumit.

### Anatomi penyelesai pipa
<a name="anatomy-of-a-pipeline-resolver"></a>

Pipeline resolver terdiri dari template **Sebelum** pemetaan, template **After** mapping, dan daftar fungsi. Setiap fungsi memiliki template pemetaan **permintaan** dan **respons** yang dijalankan terhadap sumber data. Karena penyelesai pipa mendelegasikan eksekusi ke daftar fungsi, oleh karena itu tidak ditautkan ke sumber data apa pun. Resolver dan fungsi unit adalah primitif yang menjalankan operasi terhadap sumber data. Lihat [ikhtisar template pemetaan Resolver](#aws-appsync-resolver-mapping-template-reference-overview) untuk informasi selengkapnya.

#### Sebelum memetakan template
<a name="before-mapping-template"></a>

Template pemetaan permintaan dari resolver pipeline, atau langkah **Sebelum**, memungkinkan Anda untuk melakukan beberapa logika persiapan sebelum menjalankan fungsi yang ditentukan.

#### Daftar fungsi
<a name="functions-list"></a>

Daftar fungsi resolver pipeline akan berjalan secara berurutan. Hasil evaluasi template pemetaan permintaan penyelesai pipa dibuat tersedia untuk fungsi pertama sebagai. `$ctx.prev.result` Setiap output fungsi tersedia untuk fungsi berikutnya sebagai`$ctx.prev.result`.

#### Setelah memetakan template
<a name="after-mapping-template"></a>

Template pemetaan respons dari resolver pipa, atau langkah **Setelah**, memungkinkan Anda untuk melakukan beberapa logika pemetaan akhir dari output fungsi terakhir ke jenis bidang GraphQL yang diharapkan. Output dari fungsi terakhir dalam daftar fungsi tersedia di template pemetaan pipeline resolver sebagai atau. `$ctx.prev.result` `$ctx.result`

#### Aliran eksekusi
<a name="execution-flow"></a>

Mengingat resolver pipeline yang terdiri dari dua fungsi, daftar di bawah ini mewakili alur eksekusi saat resolver dipanggil:

![\[GraphQL request flow diagram showing template processing and data source interactions.\]](http://docs.aws.amazon.com/id_id/appsync/latest/devguide/images/PipelineResolver.jpg)


1. Pipeline resolver **Sebelum** memetakan template

1. Fungsi 1: Templat pemetaan permintaan fungsi

1. Fungsi 1: Pemanggilan sumber data

1. Fungsi 1: Templat pemetaan respons fungsi

1. Fungsi 2: Templat pemetaan permintaan fungsi

1. Fungsi 2: Pemanggilan sumber data

1. Fungsi 2: Templat pemetaan respons fungsi

1. Pemecah pipa **Setelah** template pemetaan

**catatan**  
Aliran eksekusi resolver pipa searah dan didefinisikan secara statis pada resolver.

#### Utilitas Bahasa Template Kecepatan Apache (VTL) yang Berguna
<a name="useful-apache-velocity-template-language-vtl-utilities"></a>

Ketika kompleksitas aplikasi meningkat, utilitas dan arahan VTL ada di sini untuk memfasilitasi produktivitas pengembangan. Utilitas berikut dapat membantu Anda ketika Anda bekerja dengan resolver pipa.

##### \$1 ctx.simpanan
<a name="ctx-stash"></a>

Stash adalah `Map` yang tersedia di dalam setiap resolver dan template pemetaan fungsi. Instans simpanan yang sama hidup melalui eksekusi resolver tunggal. Artinya, Anda dapat menggunakan simpanan untuk meneruskan data arbitrer di seluruh templat pemetaan permintaan dan respons, dan di seluruh fungsi dalam penyelesai pipa. Stash mengekspos metode yang sama seperti struktur data [peta Java](https://docs.oracle.com/javase/8/docs/api/java/util/Map.html).

##### \$1ctx.prev.result
<a name="ctx-prev-result"></a>

`$ctx.prev.result`Ini merupakan hasil dari operasi sebelumnya yang dijalankan di resolver pipa.

Jika operasi sebelumnya adalah template Sebelum pemetaan pipeline resolver, maka `$ctx.prev.result` mewakili output dari evaluasi template dan tersedia untuk fungsi pertama dalam pipeline. Jika operasi sebelumnya adalah fungsi pertama, maka `$ctx.prev.result` mewakili output dari fungsi pertama dan tersedia untuk fungsi kedua dalam pipa. Jika operasi sebelumnya adalah fungsi terakhir, maka `$ctx.prev.result` mewakili output dari fungsi terakhir dan tersedia untuk template After mapping resolver pipeline.

##### \$1return (data: Objek)
<a name="return-data-object"></a>

`#return(data: Object)`Arahan ini berguna jika Anda perlu kembali sebelum waktunya dari template pemetaan apa pun. `#return(data: Object)`analog dengan kata kunci *return* dalam bahasa pemrograman karena kembali dari blok logika cakupan terdekat. Apa artinya ini adalah bahwa menggunakan `#return` di dalam template pemetaan resolver kembali dari resolver. Menggunakan `#return(data: Object)` dalam set template pemetaan resolver pada bidang `data` GraphQL. Selain itu, menggunakan `#return(data: Object)` dari template pemetaan fungsi kembali dari fungsi dan melanjutkan eksekusi ke fungsi berikutnya dalam pipeline atau template pemetaan respons resolver.

##### \$1return
<a name="return"></a>

Ini sama dengan`#return(data: Object)`, tetapi `null` akan dikembalikan sebagai gantinya.

##### \$1 util.error
<a name="util-error"></a>

`$util.error`Utilitas ini berguna untuk melempar kesalahan bidang. Menggunakan `$util.error` di dalam template pemetaan fungsi akan segera menimbulkan kesalahan bidang, yang mencegah fungsi selanjutnya dieksekusi. Untuk detail selengkapnya dan `$util.error` tanda tangan lainnya, kunjungi referensi utilitas template [pemetaan Resolver](resolver-util-reference.md#aws-appsync-resolver-mapping-template-util-reference).

##### \$1util.AppPenError
<a name="util-appenderror"></a>

`$util.appendError`Ini mirip dengan`$util.error()`, dengan perbedaan utama bahwa itu tidak mengganggu evaluasi template pemetaan. Sebaliknya, itu menandakan ada kesalahan dengan bidang, tetapi memungkinkan template untuk dievaluasi dan akibatnya mengembalikan data. Menggunakan fungsi `$util.appendError` di dalam tidak akan mengganggu aliran eksekusi pipa. Untuk detail selengkapnya dan `$util.error` tanda tangan lainnya, kunjungi referensi utilitas template [pemetaan Resolver](resolver-util-reference.md#aws-appsync-resolver-mapping-template-util-reference).

## Contoh Templat
<a name="example-template"></a>

**Misalkan Anda memiliki sumber data DynamoDB dan resolver Unit pada bidang `getPost(id:ID!)` bernama yang mengembalikan `Post` tipe dengan query GraphQL berikut:**

```
getPost(id:1){
    id
    title
    content
}
```

Template resolver Anda mungkin terlihat seperti berikut:

```
{
    "version" : "2018-05-29",
    "operation" : "GetItem",
    "key" : {
        "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id)
    }
}
```

Ini akan menggantikan nilai parameter `id` input `1` for `${ctx.args.id}` dan menghasilkan JSON berikut:

```
{
    "version" : "2018-05-29",
    "operation" : "GetItem",
    "key" : {
        "id" : { "S" : "1" }
    }
}
```

AWS AppSync menggunakan template ini untuk menghasilkan instruksi untuk berkomunikasi dengan DynamoDB dan mendapatkan data (atau melakukan operasi lain yang sesuai). Setelah data kembali, AWS AppSync jalankan melalui template pemetaan respons opsional, yang dapat Anda gunakan untuk melakukan pembentukan data atau logika. Misalnya, ketika kita mendapatkan hasil kembali dari DynamoDB, mereka mungkin terlihat seperti ini:

```
{
        "id" : 1,
        "theTitle" : "AWS AppSync works offline!",
        "theContent-part1" : "It also has realtime functionality",
        "theContent-part2" : "using GraphQL"
}
```

Anda dapat memilih untuk menggabungkan dua bidang ke dalam satu bidang dengan template pemetaan respons berikut:

```
{
        "id" : $util.toJson($context.data.id),
        "title" : $util.toJson($context.data.theTitle),
        "content" : $util.toJson("${context.data.theContent-part1} ${context.data.theContent-part2}")
}
```

Berikut adalah bagaimana data dibentuk setelah template diterapkan ke data:

```
{
        "id" : 1,
        "title" : "AWS AppSync works offline!",
        "content" : "It also has realtime functionality using GraphQL"
}
```

Data ini diberikan kembali sebagai respons terhadap klien sebagai berikut:

```
{
        "data": {
                "getPost":      {
                        "id" : 1,
                        "title" : "AWS AppSync works offline!",
                        "content" : "It also has realtime functionality using GraphQL"
                }
        }
}
```

Perhatikan bahwa dalam sebagian besar keadaan, template pemetaan respons adalah passthrough data yang sederhana, sebagian besar berbeda jika Anda mengembalikan item individual atau daftar item. Untuk item individual passthrough adalah:

```
$util.toJson($context.result)
```

Untuk daftar passthrough biasanya:

```
$util.toJson($context.result.items)
```

[Untuk melihat lebih banyak contoh resolver unit dan pipeline, lihat tutorial Resolver.](tutorials.md#aws-appsync-tutorials)

## Aturan deserialisasi template pemetaan yang dievaluasi
<a name="evaluated-mapping-template-deserialization-rules"></a>

Template pemetaan mengevaluasi ke string. Dalam AWS AppSync, string output harus mengikuti struktur JSON agar valid.

Selain itu, aturan deserialisasi berikut diberlakukan.

### Kunci duplikat tidak diperbolehkan dalam objek JSON
<a name="duplicate-keys-are-not-allowed-in-json-objects"></a>

Jika string template pemetaan yang dievaluasi mewakili objek JSON atau berisi objek yang memiliki kunci duplikat, template pemetaan mengembalikan pesan kesalahan berikut:

 `Duplicate field 'aField' detected on Object. Duplicate JSON keys are not allowed.` 

Contoh kunci duplikat dalam templat pemetaan permintaan yang dievaluasi:

```
{
    "version": "2018-05-29",
    "operation": "Invoke",
    "payload": {
        "field": "getPost",
        "postId": "1",
        "field": "getPost" ## key 'field' has been redefined
    }
}
```

Untuk memperbaiki kesalahan ini, jangan mendefinisikan ulang kunci di objek JSON.

### Karakter tertinggal tidak diizinkan di objek JSON
<a name="trailing-characters-are-not-allowed-in-json-objects"></a>

Jika string template pemetaan yang dievaluasi mewakili objek JSON dan berisi karakter asing yang mengikuti, template pemetaan mengembalikan pesan kesalahan berikut:

 `Trailing characters at the end of the JSON string are not allowed.` 

Contoh karakter tertinggal dalam templat pemetaan permintaan yang dievaluasi:

```
{
    "version": "2018-05-29",
    "operation": "Invoke",
    "payload": {
        "field": "getPost",
        "postId": "1",
    }
}extraneouschars
```

Untuk memperbaiki kesalahan ini, pastikan bahwa template yang dievaluasi secara ketat mengevaluasi ke JSON.

# AWS AppSync panduan pemrograman template pemetaan resolver
<a name="resolver-mapping-template-reference-programming-guide"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

Ini adalah tutorial pemrograman gaya buku masak dengan Apache Velocity Template Language (VTL) di. AWS AppSync Jika Anda terbiasa dengan bahasa pemrograman lain seperti JavaScript, C, atau Java, itu harus cukup mudah.

AWS AppSync menggunakan VTL untuk menerjemahkan permintaan GraphQL dari klien menjadi permintaan ke sumber data Anda. Kemudian membalikkan proses untuk menerjemahkan respons sumber data kembali ke respons GraphQL. VTL adalah bahasa template logis yang memberi Anda kekuatan untuk memanipulasi permintaan dan respons dalam request/response aliran standar aplikasi web, menggunakan teknik seperti:
+ Nilai default untuk item baru
+ Validasi masukan dan pemformatan
+ Mengubah dan membentuk data
+ Mengulangi daftar, peta, dan array untuk mencabut atau mengubah nilai
+ Filter/ubah tanggapan berdasarkan identitas pengguna
+ Pemeriksaan otorisasi yang kompleks

Misalnya, Anda mungkin ingin melakukan validasi nomor telepon dalam layanan pada argumen GraphQL, atau mengonversi parameter input ke huruf besar sebelum menyimpannya di DynamoDB. Atau mungkin Anda ingin sistem klien memberikan kode, sebagai bagian dari argumen GraphQL, klaim token JWT, atau header HTTP, dan hanya merespons dengan data jika kode tersebut cocok dengan string tertentu dalam daftar. Ini semua adalah pemeriksaan logis yang dapat Anda lakukan dengan VTL di. AWS AppSync

VTL memungkinkan Anda menerapkan logika menggunakan teknik pemrograman yang mungkin sudah tidak asing lagi. Namun, itu dibatasi untuk berjalan dalam request/response alur standar untuk memastikan bahwa GraphQL API Anda dapat diskalakan seiring dengan pertumbuhan basis pengguna Anda. Karena AWS AppSync juga mendukung AWS Lambda sebagai resolver, Anda dapat menulis fungsi Lambda dalam bahasa pemrograman pilihan Anda (Node.js, Python, Go, Java, dll.) Jika Anda membutuhkan lebih banyak fleksibilitas.

## Pengaturan
<a name="setup"></a>

Teknik umum ketika belajar bahasa adalah mencetak hasil (misalnya, `console.log(variable)` dalam JavaScript) untuk melihat apa yang terjadi. Dalam tutorial ini, kami mendemonstrasikan ini dengan membuat skema GraphQL sederhana dan meneruskan peta nilai ke fungsi Lambda. Fungsi Lambda mencetak nilai dan kemudian merespons dengan mereka. Ini akan memungkinkan Anda untuk memahami request/response aliran dan melihat teknik pemrograman yang berbeda.

Mulailah dengan membuat skema GraphQL berikut:

```
type Query {
    get(id: ID, meta: String): Thing
}

type Thing {
    id: ID!
    title: String!
    meta: String
}

schema {
    query: Query
}
```

Sekarang buat AWS Lambda fungsi berikut, menggunakan Node.js sebagai bahasa:

```
exports.handler = (event, context, callback) => {
    console.log('VTL details: ', event);
    callback(null, event);
};
```

Di panel **Sumber Data** AWS AppSync konsol, tambahkan fungsi Lambda ini sebagai sumber data baru. Arahkan kembali ke halaman **Skema** konsol dan klik tombol **ATTACH** di sebelah kanan, di sebelah `get(...):Thing` kueri. Untuk template permintaan, pilih template yang ada dari menu **Invoke dan teruskan argumen**. Untuk template respons, pilih **Kembalikan hasil Lambda**.

Buka CloudWatch Log Amazon untuk fungsi Lambda Anda di satu lokasi, dan dari tab **Kueri** AWS AppSync konsol, jalankan kueri GraphQL berikut:

```
query test {
  get(id:123 meta:"testing"){
    id
    meta
  }
}
```

Respons GraphQL harus `id:123` berisi `meta:testing` dan, karena fungsi Lambda menggemakannya kembali. Setelah beberapa detik, Anda akan melihat catatan di CloudWatch Log dengan detail ini juga.

## Variabel
<a name="variables"></a>

VTL menggunakan [referensi](https://velocity.apache.org/engine/1.7/user-guide.html#references), yang dapat Anda gunakan untuk menyimpan atau memanipulasi data. Ada tiga jenis referensi dalam VTL: variabel, properti, dan metode. Variabel memiliki `$` tanda di depannya dan dibuat dengan `#set` arahan:

```
#set($var = "a string")
```

Variabel menyimpan jenis serupa yang Anda kenal dari bahasa lain, seperti angka, string, array, daftar, dan peta. Anda mungkin telah memperhatikan payload JSON dikirim dalam template permintaan default untuk resolver Lambda:

```
"payload": $util.toJson($context.arguments)
```

Beberapa hal yang perlu diperhatikan di sini - pertama, AWS AppSync menyediakan beberapa fungsi kenyamanan untuk operasi umum. Dalam contoh ini, `$util.toJson` mengkonversi variabel ke JSON. Kedua, variabel secara otomatis `$context.arguments` diisi dari permintaan GraphQL sebagai objek peta. Anda dapat membuat peta baru sebagai berikut:

```
#set( $myMap = {
  "id": $context.arguments.id,
  "meta": "stuff",
  "upperMeta" : $context.arguments.meta.toUpperCase()
} )
```

Anda sekarang telah membuat variabel bernama`$myMap`, yang memiliki kunci`id`,`meta`, dan`upperMeta`. Ini juga menunjukkan beberapa hal:
+  `id`diisi dengan kunci dari argumen GraphQL. Ini umum di VTL untuk mengambil argumen dari klien.
+  `meta`di-hardcode dengan nilai, menampilkan nilai default.
+  `upperMeta`mengubah `meta` argumen menggunakan metode`.toUpperCase()`.

Letakkan kode sebelumnya di bagian atas template permintaan Anda dan ubah `payload` untuk menggunakan `$myMap` variabel baru:

```
"payload": $util.toJson($myMap)
```

Jalankan fungsi Lambda Anda, dan Anda dapat melihat perubahan respons serta data ini di CloudWatch log. Saat Anda berjalan melalui sisa tutorial ini, kami akan terus mengisi `$myMap` sehingga Anda dapat menjalankan tes serupa.

Anda juga dapat mengatur *properties\$1 pada variabel* Anda. Ini bisa berupa string sederhana, array, atau JSON:

```
#set($myMap.myProperty = "ABC")
#set($myMap.arrProperty = ["Write", "Some", "GraphQL"])
#set($myMap.jsonProperty = {
    "AppSync" : "Offline and Realtime",
    "Cognito" : "AuthN and AuthZ"
})
```

### Referensi yang tenang
<a name="quiet-references"></a>

Karena VTL adalah bahasa templating, secara default, setiap referensi yang Anda berikan akan melakukan. `.toString()` Jika referensi tidak terdefinisi, ia mencetak representasi referensi yang sebenarnya, sebagai string. Contoh:

```
#set($myValue = 5)
##Prints '5'
$myValue

##Prints '$somethingelse'
$somethingelse
```

Untuk mengatasi hal ini, VTL memiliki *referensi senyap* *atau sintaks referensi diam*, yang memberi tahu mesin template untuk menekan perilaku ini. Sintaks untuk ini adalah`$!{}`. Misalnya, jika kita mengubah kode sebelumnya sedikit untuk digunakan`$!{somethingelse}`, pencetakan ditekan:

```
#set($myValue = 5)
##Prints '5'
$myValue

##Nothing prints out
$!{somethingelse}
```

## Metode panggilan
<a name="calling-methods"></a>

Dalam contoh sebelumnya, kami menunjukkan kepada Anda cara membuat variabel dan secara bersamaan menetapkan nilai. Anda juga dapat melakukan ini dalam dua langkah dengan menambahkan data ke peta Anda seperti yang ditunjukkan berikut:

```
#set ($myMap = {})
#set ($myList = [])

##Nothing prints out
$!{myMap.put("id", "first value")}
##Prints "first value"
$!{myMap.put("id", "another value")}
##Prints true
$!{myList.add("something")}
```

 **Namun** ada sesuatu yang perlu diketahui tentang perilaku ini. Meskipun notasi referensi senyap `$!{}` memungkinkan Anda untuk memanggil metode, seperti di atas, itu tidak akan menekan nilai yang dikembalikan dari metode yang dieksekusi. Inilah sebabnya kami mencatat `##Prints "first value"` dan `##Prints true` di atas. Hal ini dapat menyebabkan kesalahan saat Anda mengulangi peta atau daftar, seperti memasukkan nilai di mana kunci sudah ada, karena output menambahkan string tak terduga ke template setelah evaluasi.

Solusi untuk ini terkadang memanggil metode menggunakan `#set` arahan dan mengabaikan variabel. Contoh:

```
#set ($myMap = {})
#set($discard = $myMap.put("id", "first value"))
```

Anda dapat menggunakan teknik ini dalam template Anda, karena mencegah string yang tidak terduga dicetak dalam template. AWS AppSync menyediakan fungsi kenyamanan alternatif yang menawarkan perilaku yang sama dalam notasi yang lebih ringkas. Ini memungkinkan Anda untuk tidak perlu memikirkan spesifik implementasi ini. Anda dapat mengakses fungsi ini di bawah `$util.quiet()` atau `$util.qr()` aliasnya. Contoh:

```
#set ($myMap = {})
#set ($myList = [])

##Nothing prints out
$util.quiet($myMap.put("id", "first value"))
##Nothing prints out
$util.qr($myList.add("something"))
```

## String
<a name="strings"></a>

Seperti banyak bahasa pemrograman, string bisa sulit untuk ditangani, terutama ketika Anda ingin membangunnya dari variabel. Ada beberapa hal umum yang muncul dengan VTL.

Misalkan Anda memasukkan data sebagai string ke sumber data seperti DynamoDB, tetapi diisi dari variabel, seperti argumen GraphQL. Sebuah string akan memiliki tanda kutip ganda, dan untuk mereferensikan variabel dalam string Anda hanya perlu `"${}"` (jadi tidak `!` seperti dalam [notasi referensi yang tenang](https://velocity.apache.org/engine/1.7/user-guide.html#quiet-reference-notation)). Ini mirip dengan template literal di JavaScript: [https://developer.mozilla. org/en-US/docs/Web/JavaScript/Reference/Template\$1literal](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals) 

```
#set($firstname = "Jeff")
$!{myMap.put("Firstname", "${firstname}")}
```

Anda dapat melihat ini di template permintaan DynamoDB, `"author": { "S" : "${context.arguments.author}"}` seperti saat menggunakan argumen dari klien GraphQL, atau untuk pembuatan ID otomatis seperti. `"id" : { "S" : "$util.autoId()"}` Ini berarti Anda dapat mereferensikan variabel atau hasil dari metode di dalam string untuk mengisi data.

Anda juga dapat menggunakan metode publik dari [kelas Java String](https://docs.oracle.com/javase/6/docs/api/java/lang/String.html), seperti menarik substring:

```
#set($bigstring = "This is a long string, I want to pull out everything after the comma")
#set ($comma = $bigstring.indexOf(','))
#set ($comma = $comma +2)
#set ($substring = $bigstring.substring($comma))

$util.qr($myMap.put("substring", "${substring}"))
```

Penggabungan string juga merupakan tugas yang sangat umum. Anda dapat melakukan ini dengan referensi variabel sendiri atau dengan nilai statis:

```
#set($s1 = "Hello")
#set($s2 = " World")

$util.qr($myMap.put("concat","$s1$s2"))
$util.qr($myMap.put("concat2","Second $s1 World"))
```

## Loop
<a name="loops"></a>

Sekarang Anda telah membuat variabel dan disebut metode, Anda dapat menambahkan beberapa logika ke kode Anda. Tidak seperti bahasa lain, VTL hanya mengizinkan loop, di mana jumlah iterasi telah ditentukan sebelumnya. Tidak ada `do..while` dalam Velocity. Desain ini memastikan bahwa proses evaluasi selalu berakhir, dan memberikan batas untuk skalabilitas saat operasi GraphQL Anda dijalankan.

Loop dibuat dengan `#foreach` dan mengharuskan Anda untuk menyediakan **variabel loop** dan **objek iterable** seperti array, daftar, peta, atau koleksi. Contoh pemrograman klasik dengan `#foreach` loop adalah mengulang item dalam koleksi dan mencetaknya, jadi dalam kasus kami, kami mencabutnya dan menambahkannya ke peta:

```
#set($start = 0)
#set($end = 5)
#set($range = [$start..$end])

#foreach($i in $range)
   ##$util.qr($myMap.put($i, "abc"))
   ##$util.qr($myMap.put($i, $i.toString()+"foo")) ##Concat variable with string
   $util.qr($myMap.put($i, "${i}foo"))     ##Reference a variable in a string with "${varname}"
#end
```

Contoh ini menunjukkan beberapa hal. Yang pertama adalah menggunakan variabel dengan `[..]` operator rentang untuk membuat objek iterable. Kemudian setiap item direferensikan oleh variabel `$i` yang dapat Anda operasikan. Pada contoh sebelumnya, Anda juga melihat **Komentar** yang dilambangkan dengan pound ganda. `##` Ini juga menampilkan menggunakan variabel loop di kedua kunci atau nilai, serta metode penggabungan yang berbeda menggunakan string.

Perhatikan bahwa `$i` adalah integer, sehingga Anda dapat memanggil `.toString()` metode. Untuk tipe GraphQL INT, ini bisa berguna.

Anda juga dapat menggunakan operator jangkauan secara langsung, misalnya:

```
#foreach($item in [1..5])
    ...
#end
```

## Array
<a name="arrays"></a>

Anda telah memanipulasi peta hingga saat ini, tetapi array juga umum di VTL. Dengan array Anda juga memiliki akses ke beberapa metode dasar seperti`.isEmpty()`,,,, dan `.size()` `.set()` `.get()``.add()`, seperti yang ditunjukkan di bawah ini:

```
#set($array = [])
#set($idx = 0)

##adding elements
$util.qr($array.add("element in array"))
$util.qr($myMap.put("array", $array[$idx]))

##initialize array vals on create
#set($arr2 = [42, "a string", 21, "test"])

$util.qr($myMap.put("arr2", $arr2[$idx]))
$util.qr($myMap.put("isEmpty", $array.isEmpty()))  ##isEmpty == false
$util.qr($myMap.put("size", $array.size()))

##Get and set items in an array
$util.qr($myMap.put("set", $array.set(0, 'changing array value')))
$util.qr($myMap.put("get", $array.get(0)))
```

Contoh sebelumnya menggunakan notasi indeks array untuk mengambil elemen dengan. `arr2[$idx]` Anda dapat mencari dengan nama dari dengan Map/dictionary cara yang sama:

```
#set($result = {
    "Author" : "Nadia",
    "Topic" : "GraphQL"
})

$util.qr($myMap.put("Author", $result["Author"]))
```

Ini sangat umum ketika memfilter hasil yang kembali dari sumber data di Response Template saat menggunakan kondisional.

## Pemeriksaan bersyarat
<a name="conditional-checks"></a>

Bagian sebelumnya dengan `#foreach` menampilkan beberapa contoh penggunaan logika untuk mengubah data dengan VTL. Anda juga dapat menerapkan pemeriksaan bersyarat untuk mengevaluasi data saat runtime:

```
#if(!$array.isEmpty())
    $util.qr($myMap.put("ifCheck", "Array not empty"))
#else
    $util.qr($myMap.put("ifCheck", "Your array is empty"))
#end
```

`#if()`Pemeriksaan ekspresi Boolean di atas bagus, tetapi Anda juga dapat menggunakan operator dan `#elseif()` untuk percabangan:

```
#if ($arr2.size() == 0)
    $util.qr($myMap.put("elseIfCheck", "You forgot to put anything into this array!"))
#elseif ($arr2.size() == 1)
    $util.qr($myMap.put("elseIfCheck", "Good start but please add more stuff"))
#else
    $util.qr($myMap.put("elseIfCheck", "Good job!"))
#end
```

Kedua contoh ini menunjukkan negasi (\$1) dan kesetaraan (==). Kita juga dapat menggunakan \$1\$1, &&, >, <, >=, <=, dan\$1 =.

```
#set($T = true)
#set($F = false)

#if ($T || $F)
  $util.qr($myMap.put("OR", "TRUE"))
#end

#if ($T && $F)
  $util.qr($myMap.put("AND", "TRUE"))
#end
```

 **Catatan:** Hanya `Boolean.FALSE` dan `null` dianggap salah dalam kondisional. Nol (0) dan string kosong (“”) tidak setara dengan false.

## Operator
<a name="operators"></a>

Tidak ada bahasa pemrograman yang lengkap tanpa beberapa operator untuk melakukan beberapa tindakan matematika. Berikut adalah beberapa contoh untuk Anda mulai:

```
#set($x = 5)
#set($y = 7)
#set($z = $x + $y)
#set($x-y = $x - $y)
#set($xy = $x * $y)
#set($xDIVy = $x / $y)
#set($xMODy = $x % $y)

$util.qr($myMap.put("z", $z))
$util.qr($myMap.put("x-y", $x-y))
$util.qr($myMap.put("x*y", $xy))
$util.qr($myMap.put("x/y", $xDIVy))
$util.qr($myMap.put("x|y", $xMODy))
```

### Menggunakan loop dan kondisional bersama-sama
<a name="loops-and-conditionals-together"></a>

Hal ini sangat umum ketika mengubah data dalam VTL, seperti sebelum menulis atau membaca dari sumber data, untuk mengulang objek dan kemudian melakukan pemeriksaan sebelum melakukan tindakan. Menggabungkan beberapa alat dari bagian sebelumnya memberi Anda banyak fungsionalitas. Salah satu alat praktis adalah mengetahui bahwa `#foreach` secara otomatis memberi Anda a `.count` pada setiap item:

```
#foreach ($item in $arr2)
  #set($idx = "item" + $foreach.count)
  $util.qr($myMap.put($idx, $item))
#end
```

Misalnya, mungkin Anda hanya ingin mencabut nilai dari peta jika berada di bawah ukuran tertentu. Menggunakan hitungan bersama dengan kondisional dan `#break` pernyataan memungkinkan Anda untuk melakukan ini:

```
#set($hashmap = {
  "DynamoDB" : "https://aws.amazon.com/dynamodb/",
  "Amplify" : "https://github.com/aws/aws-amplify",
  "DynamoDB2" : "https://aws.amazon.com/dynamodb/",
  "Amplify2" : "https://github.com/aws/aws-amplify"
})

#foreach ($key in $hashmap.keySet())
    #if($foreach.count > 2)
    #break
  #end
    $util.qr($myMap.put($key, $hashmap.get($key)))
#end
```

Yang sebelumnya `#foreach` diulang dengan`.keySet()`, yang dapat Anda gunakan di peta. Ini memberi Anda akses untuk mendapatkan `$key` dan mereferensikan nilai dengan a`.get($key)`. Argumen GraphQL dari klien AWS AppSync disimpan sebagai peta. Mereka juga dapat diulang dengan`.entrySet()`, yang kemudian Anda dapat mengakses kunci dan nilai sebagai Set, dan mengisi variabel lain atau melakukan pemeriksaan kondisional yang kompleks, seperti validasi atau transformasi input:

```
#foreach( $entry in $context.arguments.entrySet() )
#if ($entry.key == "XYZ" && $entry.value == "BAD")
    #set($myvar = "...")
  #else
    #break
  #end
#end
```

Contoh umum lainnya secara otomatis mengisi informasi default, seperti versi objek awal saat menyinkronkan data (sangat penting dalam resolusi konflik) atau pemilik default objek untuk pemeriksaan otorisasi - Mary membuat posting blog ini, jadi:

```
#set($myMap.owner ="Mary")
#set($myMap.defaultOwners = ["Admins", "Editors"])
```

## Konteks
<a name="context"></a>

Sekarang setelah Anda lebih terbiasa melakukan pemeriksaan logis di AWS AppSync resolver dengan VTL, lihat objek konteksnya:

```
$util.qr($myMap.put("context", $context))
```

Ini berisi semua informasi yang dapat Anda akses dalam permintaan GraphQL Anda. Untuk penjelasan rinci, lihat [referensi konteks](resolver-context-reference.md#aws-appsync-resolver-mapping-template-context-reference).

## Pemfilteran
<a name="filtering"></a>

Sejauh ini dalam tutorial ini semua informasi dari fungsi Lambda Anda telah dikembalikan ke kueri GraphQL dengan transformasi JSON yang sangat sederhana:

```
$util.toJson($context.result)
```

Logika VTL sama kuatnya ketika Anda mendapatkan tanggapan dari sumber data, terutama saat melakukan pemeriksaan otorisasi pada sumber daya. Mari kita telusuri beberapa contoh. Pertama coba ubah template respons Anda seperti ini:

```
#set($data = {
    "id" : "456",
    "meta" : "Valid Response"
})

$util.toJson($data)
```

Apa pun yang terjadi dengan operasi GraphQL Anda, nilai hardcode dikembalikan kembali ke klien. Ubah ini sedikit sehingga `meta` bidang diisi dari respons Lambda, atur sebelumnya dalam tutorial dalam nilai saat mempelajari tentang `elseIfCheck` kondisional:

```
#set($data = {
    "id" : "456"
})

#foreach($item in $context.result.entrySet())
    #if($item.key == "elseIfCheck")
        $util.qr($data.put("meta", $item.value))
    #end
#end

$util.toJson($data)
```

 `$context.result`adalah peta, sehingga Anda dapat menggunakan `entrySet()` untuk melakukan logika pada kunci atau nilai yang dikembalikan. Karena `$context.identity` berisi informasi tentang pengguna yang melakukan operasi GraphQL, jika Anda mengembalikan informasi otorisasi dari sumber data, maka Anda dapat memutuskan untuk mengembalikan semua, sebagian, atau tidak ada data ke pengguna berdasarkan logika Anda. Ubah template respons Anda agar terlihat seperti berikut:

```
#if($context.result["id"] == 123)
    $util.toJson($context.result)
  #else
    $util.unauthorized()
#end
```

Jika Anda menjalankan kueri GraphQL Anda, data akan dikembalikan seperti biasa. Namun, jika Anda mengubah argumen id menjadi sesuatu selain 123 (`query test { get(id:456 meta:"badrequest"){} }`), Anda akan mendapatkan pesan kegagalan otorisasi.

Anda dapat menemukan lebih banyak contoh skenario otorisasi di bagian [kasus penggunaan otorisasi](security-authorization-use-cases.md#aws-appsync-security-authorization-use-cases).

### Sampel template
<a name="appendix-template-sample"></a>

Jika Anda mengikuti tutorial, Anda mungkin telah membangun template ini langkah demi langkah. Jika Anda belum melakukannya, kami menyertakannya di bawah ini untuk disalin untuk pengujian.

 **Templat Permintaan** 

```
#set( $myMap = {
  "id": $context.arguments.id,
  "meta": "stuff",
  "upperMeta" : "$context.arguments.meta.toUpperCase()"
} )

##This is how you would do it in two steps with a "quiet reference" and you can use it for invoking methods, such as .put() to add items to a Map
#set ($myMap2 = {})
$util.qr($myMap2.put("id", "first value"))

## Properties are created with a dot notation
#set($myMap.myProperty = "ABC")
#set($myMap.arrProperty = ["Write", "Some", "GraphQL"])
#set($myMap.jsonProperty = {
    "AppSync" : "Offline and Realtime",
    "Cognito" : "AuthN and AuthZ"
})

##When you are inside a string and just have ${} without ! it means stuff inside curly braces are a reference
#set($firstname = "Jeff")
$util.qr($myMap.put("Firstname", "${firstname}"))

#set($bigstring = "This is a long string, I want to pull out everything after the comma")
#set ($comma = $bigstring.indexOf(','))
#set ($comma = $comma +2)
#set ($substring = $bigstring.substring($comma))
$util.qr($myMap.put("substring", "${substring}"))

##Classic for-each loop over N items:
#set($start = 0)
#set($end = 5)
#set($range = [$start..$end])
#foreach($i in $range)          ##Can also use range operator directly like #foreach($item in [1...5])
   ##$util.qr($myMap.put($i, "abc"))
   ##$util.qr($myMap.put($i, $i.toString()+"foo")) ##Concat variable with string
   $util.qr($myMap.put($i, "${i}foo"))     ##Reference a variable in a string with "${varname)"
#end

##Operators don't work
#set($x = 5)
#set($y = 7)
#set($z = $x + $y)
#set($x-y = $x - $y)
#set($xy = $x * $y)
#set($xDIVy = $x / $y)
#set($xMODy = $x % $y)
$util.qr($myMap.put("z", $z))
$util.qr($myMap.put("x-y", $x-y))
$util.qr($myMap.put("x*y", $xy))
$util.qr($myMap.put("x/y", $xDIVy))
$util.qr($myMap.put("x|y", $xMODy))

##arrays
#set($array = ["first"])
#set($idx = 0)
$util.qr($myMap.put("array", $array[$idx]))
##initialize array vals on create
#set($arr2 = [42, "a string", 21, "test"])
$util.qr($myMap.put("arr2", $arr2[$idx]))
$util.qr($myMap.put("isEmpty", $array.isEmpty()))  ##Returns false
$util.qr($myMap.put("size", $array.size()))
##Get and set items in an array
$util.qr($myMap.put("set", $array.set(0, 'changing array value')))
$util.qr($myMap.put("get", $array.get(0)))

##Lookup by name from a Map/dictionary in a similar way:
#set($result = {
    "Author" : "Nadia",
    "Topic" : "GraphQL"
})
$util.qr($myMap.put("Author", $result["Author"]))


##Conditional examples
#if(!$array.isEmpty())
$util.qr($myMap.put("ifCheck", "Array not empty"))
#else
$util.qr($myMap.put("ifCheck", "Your array is empty"))
#end

#if ($arr2.size() == 0)
$util.qr($myMap.put("elseIfCheck", "You forgot to put anything into this array!"))
#elseif ($arr2.size() == 1)
$util.qr($myMap.put("elseIfCheck", "Good start but please add more stuff"))
#else
$util.qr($myMap.put("elseIfCheck", "Good job!"))
#end

##Above showed negation(!) and equality (==), we can also use OR, AND, >, <, >=, <=, and !=
#set($T = true)
#set($F = false)
#if ($T || $F)
  $util.qr($myMap.put("OR", "TRUE"))
#end

#if ($T && $F)
  $util.qr($myMap.put("AND", "TRUE"))
#end

##Using the foreach loop counter - $foreach.count
#foreach ($item in $arr2)
  #set($idx = "item" + $foreach.count)
  $util.qr($myMap.put($idx, $item))
#end

##Using a Map and plucking out keys/vals
#set($hashmap = {
    "DynamoDB" : "https://aws.amazon.com/dynamodb/",
    "Amplify" : "https://github.com/aws/aws-amplify",
    "DynamoDB2" : "https://aws.amazon.com/dynamodb/",
    "Amplify2" : "https://github.com/aws/aws-amplify"
})

#foreach ($key in $hashmap.keySet())
    #if($foreach.count > 2)
        #break
    #end
    $util.qr($myMap.put($key, $hashmap.get($key)))
#end

##concatenate strings
#set($s1 = "Hello")
#set($s2 = " World")
$util.qr($myMap.put("concat","$s1$s2"))
$util.qr($myMap.put("concat2","Second $s1 World"))

$util.qr($myMap.put("context", $context))

{
    "version" : "2017-02-28",
    "operation": "Invoke",
    "payload": $util.toJson($myMap)
}
```

 **Template Respon** 

```
#set($data = {
"id" : "456"
})
#foreach($item in $context.result.entrySet())   ##$context.result is a MAP so we use entrySet()
    #if($item.key == "ifCheck")
        $util.qr($data.put("meta", "$item.value"))
    #end
#end

##Uncomment this out if you want to test and remove the below #if check
##$util.toJson($data)

#if($context.result["id"] == 123)
    $util.toJson($context.result)
  #else
    $util.unauthorized()
#end
```

# AWS AppSync referensi konteks template pemetaan resolver
<a name="resolver-context-reference"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

AWS AppSync mendefinisikan satu set variabel dan fungsi untuk bekerja dengan template pemetaan resolver. Ini membuat operasi logis pada data lebih mudah dengan GraphQL. Dokumen ini menjelaskan fungsi-fungsi tersebut dan memberikan contoh untuk bekerja dengan template.

## Mengakses `$context`
<a name="accessing-the-context"></a>

`$context`Variabel adalah peta yang menyimpan semua informasi kontekstual untuk pemanggilan resolver Anda. Ini memiliki struktur sebagai berikut:

```
{
   "arguments" : { ... },
   "source" : { ... },
   "result" : { ... },
   "identity" : { ... },
   "request" : { ... },
   "info": { ... }
}
```

**catatan**  
Jika Anda mencoba mengakses dictionary/map entri (seperti entri di`context`) dengan kuncinya untuk mengambil nilai, Velocity Template Language (VTL) memungkinkan Anda langsung menggunakan notasi. `<dictionary-element>.<key-name>` Namun, ini mungkin tidak berfungsi untuk semua kasus, seperti ketika nama kunci memiliki karakter khusus (misalnya, garis bawah “\$1”). Kami menyarankan Anda selalu menggunakan `<dictionary-element>.get("<key-name>")` notasi.

Setiap bidang dalam `$context` peta didefinisikan sebagai berikut:

### `$context`bidang
<a name="accessing-the-context-list"></a>

** `arguments` **  
Peta yang berisi semua argumen GraphQL untuk bidang ini.

** `identity` **  
Objek yang berisi informasi tentang penelepon. Untuk informasi selengkapnya tentang struktur bidang ini, lihat [Identitas](#aws-appsync-resolver-context-reference-identity).

** `source` **  
Peta yang berisi resolusi bidang induk.

** `stash` **  
Stash adalah peta yang tersedia di dalam setiap resolver dan template pemetaan fungsi. Instans simpanan yang sama hidup melalui eksekusi resolver tunggal. Ini berarti Anda dapat menggunakan stash untuk meneruskan data arbitrer di seluruh template pemetaan permintaan dan respons, dan di seluruh fungsi dalam penyelesai pipeline. Stash mengekspos metode yang sama dengan struktur data [Peta Java](https://docs.oracle.com/javase/8/docs/api/java/util/Map.html).

** `result` **  
Wadah untuk hasil resolver ini. Bidang ini hanya tersedia untuk template pemetaan respons.  
Misalnya, jika Anda menyelesaikan `author` bidang kueri berikut:  

```
query {
    getPost(id: 1234) {
        postId
        title
        content
        author {
            id
            name
        }
    }
}
```
Kemudian `$context` variabel lengkap yang tersedia saat memproses template pemetaan respons mungkin:  

```
{
  "arguments" : {
    id: "1234"
  },
  "source": {},
  "result" : {
      "postId": "1234",
      "title": "Some title",
      "content": "Some content",
      "author": {
        "id": "5678",
        "name": "Author Name"
      }
  },
  "identity" : {
      "sourceIp" : ["x.x.x.x"],
      "userArn" : "arn:aws:iam::123456789012:user/appsync",
      "accountId" : "666666666666",
      "user" : "AIDAAAAAAAAAAAAAAAAAA"
  }
}
```

** `prev.result` **  
Hasil dari operasi apa pun sebelumnya dijalankan dalam resolver pipa.  
Jika operasi sebelumnya adalah template Sebelum pemetaan pipeline resolver, maka `$ctx.prev.result` mewakili output dari evaluasi template dan tersedia untuk fungsi pertama dalam pipeline.  
Jika operasi sebelumnya adalah fungsi pertama, maka `$ctx.prev.result` mewakili output dari fungsi pertama dan tersedia untuk fungsi kedua dalam pipa.  
Jika operasi sebelumnya adalah fungsi terakhir, maka `$ctx.prev.result` mewakili output dari fungsi terakhir dan tersedia untuk template After mapping resolver pipeline.

** `info` **  
Objek yang berisi informasi tentang permintaan GraphQL. Untuk struktur bidang ini, lihat [Info](#aws-appsync-resolver-context-reference-info).

### Identitas
<a name="aws-appsync-resolver-context-reference-identity"></a>

`identity`Bagian ini berisi informasi tentang penelepon. Bentuk bagian ini tergantung pada jenis otorisasi AWS AppSync API Anda.

Untuk informasi selengkapnya tentang opsi AWS AppSync keamanan, lihat [Otorisasi dan otentikasi](security-authz.md#aws-appsync-security).

** `API_KEY`otorisasi**  
`identity`Bidang tidak dihuni.

**`AWS_LAMBDA`otorisasi**  
Berisi `resolverContext` kunci, `identity` berisi `resolverContext` konten yang sama yang dikembalikan oleh fungsi Lambda yang mengotorisasi permintaan.

** `AWS_IAM`otorisasi**  
Ini `identity` memiliki bentuk sebagai berikut:  

```
{
    "accountId" : "string",
    "cognitoIdentityPoolId" : "string",
    "cognitoIdentityId" : "string",
    "sourceIp" : ["string"],
    "username" : "string", // IAM user principal
    "userArn" : "string",
    "cognitoIdentityAuthType" : "string", // authenticated/unauthenticated based on the identity type
    "cognitoIdentityAuthProvider" : "string" // the auth provider that was used to obtain the credentials
}
```

** `AMAZON_COGNITO_USER_POOLS`otorisasi**  
Ini `identity` memiliki bentuk sebagai berikut:  

```
{
    "sub" : "uuid",
    "issuer" : "string",
    "username" : "string"
    "claims" : { ... },
    "sourceIp" : ["x.x.x.x"],
    "defaultAuthStrategy" : "string"
}
```

Setiap bidang didefinisikan sebagai berikut:

** `accountId` **  
ID AWS akun penelepon.

** `claims` **  
Klaim yang dimiliki pengguna.

** `cognitoIdentityAuthType` **  
Entah diautentikasi atau tidak diautentikasi berdasarkan tipe identitas.

** `cognitoIdentityAuthProvider` **  
Daftar informasi penyedia identitas eksternal yang dipisahkan koma yang digunakan dalam memperoleh kredensil yang digunakan untuk menandatangani permintaan.

** `cognitoIdentityId` **  
ID identitas Amazon Cognito dari penelepon.

** `cognitoIdentityPoolId` **  
ID kumpulan identitas Amazon Cognito yang terkait dengan pemanggil.

** `defaultAuthStrategy` **  
Strategi otorisasi default untuk penelepon ini (`ALLOW`atau`DENY`).

** `issuer` **  
Penerbit token.

** `sourceIp` **  
Alamat IP sumber penelepon yang AWS AppSync menerima. Jika permintaan tidak menyertakan `x-forwarded-for` header, nilai IP sumber hanya berisi satu alamat IP dari koneksi TCP. Jika permintaan menyertakan `x-forwarded-for` header, IP sumber adalah daftar alamat IP dari `x-forwarded-for` header, selain alamat IP dari koneksi TCP.

** `sub` **  
UUID dari pengguna yang diautentikasi.

** `user` **  
Pengguna IAM.

** `userArn` **  
Nama Sumber Daya Amazon (ARN) dari pengguna IAM.

** `username` **  
Nama pengguna pengguna yang diautentikasi. Dalam hal `AMAZON_COGNITO_USER_POOLS` otorisasi, nilai *nama pengguna adalah nilai atribut *cognito:username**. Dalam hal `AWS_IAM` otorisasi, nilai nama *pengguna* adalah nilai prinsipal AWS pengguna. Jika Anda menggunakan otorisasi IAM dengan kredensil yang dijual dari kumpulan identitas Amazon Cognito, kami sarankan Anda menggunakannya. `cognitoIdentityId`

### Akses header permintaan
<a name="aws-appsync-resolver-context-reference-util"></a>

AWS AppSync mendukung meneruskan header khusus dari klien dan mengaksesnya di resolver GraphQL Anda dengan menggunakan. `$context.request.headers` Anda kemudian dapat menggunakan nilai header untuk tindakan seperti memasukkan data ke sumber data atau pemeriksaan otorisasi. Anda dapat menggunakan header permintaan tunggal atau beberapa menggunakan `$curl` kunci API dari baris perintah, seperti yang ditunjukkan pada contoh berikut:

**Contoh header tunggal** 

Misalkan Anda menetapkan header `custom` dengan nilai `nadia` seperti berikut:

```
curl -XPOST -H "Content-Type:application/graphql" -H "custom:nadia" -H "x-api-key:<API-KEY-VALUE>" -d '{"query":"mutation { createEvent(name: \"demo\", when: \"Next Friday!\", where: \"Here!\") {id name when where description}}"}' https://<ENDPOINT>/graphql
```

Ini kemudian dapat diakses dengan`$context.request.headers.custom`. Misalnya, mungkin dalam VTL berikut untuk DynamoDB:

```
"custom": $util.dynamodb.toDynamoDBJson($context.request.headers.custom)
```

**Beberapa contoh header** 

Anda juga dapat meneruskan beberapa header dalam satu permintaan dan mengaksesnya di template pemetaan resolver. Misalnya, jika `custom` header diatur dengan dua nilai:

```
curl -XPOST -H "Content-Type:application/graphql" -H "custom:bailey" -H "custom:nadia" -H "x-api-key:<API-KEY-VALUE>" -d '{"query":"mutation { createEvent(name: \"demo\", when: \"Next Friday!\", where: \"Here!\") {id name when where description}}"}' https://<ENDPOINT>/graphql
```

Anda kemudian dapat mengakses ini sebagai array, seperti`$context.request.headers.custom[1]`.

**catatan**  
AWS AppSync tidak mengekspos header cookie di`$context.request.headers`.

### Akses permintaan nama domain kustom
<a name="aws-access-requested-custom-domain-names"></a>

AWS AppSync mendukung konfigurasi domain kustom yang dapat Anda gunakan untuk mengakses GraphQL Anda dan titik akhir real-time untuk Anda. APIs Saat membuat permintaan dengan nama domain khusus, Anda bisa mendapatkan nama domain menggunakan`$context.request.domainName`.

Saat menggunakan nama domain titik akhir GraphQL default, nilainya adalah. `null`

### Info
<a name="aws-appsync-resolver-context-reference-info"></a>

`info`Bagian ini berisi informasi tentang permintaan GraphQL. Bagian ini memiliki bentuk sebagai berikut:

```
{
    "fieldName": "string",
    "parentTypeName": "string",
    "variables": { ... },
    "selectionSetList": ["string"],
    "selectionSetGraphQL": "string"
}
```

Setiap bidang didefinisikan sebagai berikut:

** `fieldName` **  
Nama bidang yang saat ini sedang diselesaikan.

** `parentTypeName` **  
Nama tipe induk untuk bidang yang saat ini sedang diselesaikan.

** `variables` **  
Peta yang menampung semua variabel yang diteruskan ke permintaan GraphQL.

** `selectionSetList` **  
Sebuah daftar representasi bidang dalam set pilihan GraphQL. Bidang yang dialias hanya direferensikan dengan nama alias, bukan nama bidang. Contoh berikut menunjukkan ini secara rinci.

** `selectionSetGraphQL` **  
Sebuah representasi string dari set seleksi, diformat sebagai GraphQL skema definisi bahasa (SDL). Meskipun fragmen tidak digabungkan ke dalam kumpulan seleksi, fragmen sebaris dipertahankan, seperti yang ditunjukkan pada contoh berikut.

**catatan**  
Saat menggunakan `$utils.toJson()` on`context.info`, nilai yang `selectionSetGraphQL` dan `selectionSetList` kembali tidak diserialisasikan secara default.

Misalnya, jika Anda menyelesaikan `getPost` bidang kueri berikut:

```
query {
  getPost(id: $postId) {
    postId
    title
    secondTitle: title
    content
    author(id: $authorId) {
      authorId
      name
    }
    secondAuthor(id: "789") {
      authorId
    }
    ... on Post {
      inlineFrag: comments: {
        id
      }
    }
    ... postFrag
  }
}

fragment postFrag on Post {
  postFrag: comments: {
    id
  }
}
```

Kemudian `$context.info` variabel lengkap yang tersedia saat memproses template pemetaan mungkin:

```
{
  "fieldName": "getPost",
  "parentTypeName": "Query",
  "variables": {
    "postId": "123",
    "authorId": "456"
  },
  "selectionSetList": [
    "postId",
    "title",
    "secondTitle"
    "content",
    "author",
    "author/authorId",
    "author/name",
    "secondAuthor",
    "secondAuthor/authorId",
    "inlineFragComments",
    "inlineFragComments/id",
    "postFragComments",
    "postFragComments/id"
  ],
  "selectionSetGraphQL": "{\n  getPost(id: $postId) {\n    postId\n    title\n    secondTitle: title\n    content\n    author(id: $authorId) {\n      authorId\n      name\n    }\n    secondAuthor(id: \"789\") {\n      authorId\n    }\n    ... on Post {\n      inlineFrag: comments {\n        id\n      }\n    }\n    ... postFrag\n  }\n}"
}
```

`selectionSetList`mengekspos hanya bidang yang termasuk tipe saat ini. Jika tipe saat ini adalah antarmuka atau gabungan, hanya bidang yang dipilih milik antarmuka yang diekspos. Misalnya, diberikan skema berikut:

```
type Query {
    node(id: ID!): Node
}

interface Node {
    id: ID
}

type Post implements Node {
    id: ID
    title: String
    author: String
}

type Blog implements Node {
    id: ID
    title: String
    category: String
}
```

Dan query berikut:

```
query {
    node(id: "post1") {
        id
        ... on Post {
            title
        }

        ... on Blog {
            title
        }
    }
}
```

Saat memanggil `$ctx.info.selectionSetList` pada resolusi `Query.node` bidang, hanya yang `id` diekspos:

```
"selectionSetList": [
    "id"
]
```

## Masukan sanitasi
<a name="sanitizing-inputs"></a>

Aplikasi harus membersihkan input yang tidak tepercaya untuk mencegah pihak eksternal menggunakan aplikasi di luar penggunaan yang dimaksudkan. Karena `$context` berisi input pengguna di properti seperti`$context.arguments`,,,,`$context.identity`, dan `$context.result` `$context.info.variables``$context.request.headers`, kehati-hatian harus dilakukan untuk membersihkan nilainya dalam templat pemetaan.

Karena template pemetaan mewakili JSON, sanitasi input mengambil bentuk melarikan diri dari karakter yang dicadangkan JSON dari string yang mewakili input pengguna. Praktik terbaik adalah menggunakan `$util.toJson()` utilitas untuk melarikan diri dari karakter yang dicadangkan JSON dari nilai string sensitif saat menempatkannya ke dalam templat pemetaan.

Misalnya, dalam template pemetaan permintaan Lambda berikut, karena kami mengakses string input pelanggan yang tidak aman (`$context.arguments.id`), kami membungkusnya dengan `$util.toJson()` untuk mencegah karakter JSON yang tidak lolos dari melanggar template JSON.

```
{
    "version": "2017-02-28",
    "operation": "Invoke",
    "payload": {
        "field": "getPost",
        "postId": $util.toJson($context.arguments.id)
    }
}
```

Berbeda dengan template pemetaan di bawah ini, di mana kita langsung menyisipkan `$context.arguments.id` tanpa sanitasi. Ini tidak berfungsi untuk string yang berisi tanda kutip yang tidak di-escaped atau karakter cadangan JSON lainnya, dan dapat membiarkan template Anda terbuka untuk kegagalan.

```
## DO NOT DO THIS
{
    "version": "2017-02-28",
    "operation": "Invoke",
    "payload": {
        "field": "getPost",
        "postId": "$context.arguments.id" ## Unsafe! Do not insert $context string values without escaping JSON characters.
    }
}
```

# AWS AppSync referensi utilitas template pemetaan resolver
<a name="resolver-util-reference"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

AWS AppSync mendefinisikan satu set utilitas yang dapat Anda gunakan dalam resolver GraphQL untuk menyederhanakan interaksi dengan sumber data. Beberapa utilitas ini untuk penggunaan umum dengan sumber data apa pun, seperti menghasilkan IDs atau stempel waktu. Lainnya khusus untuk jenis sumber data. Utilitas berikut tersedia:
+  [Pembantu utilitas di \$1util](https://docs.aws.amazon.com/appsync/latest/devguide/utility-helpers-in-util.html) - Variabel \$1util berisi metode utilitas umum untuk membantu Anda bekerja dengan data. Kecuali ditentukan lain, semua utilitas menggunakan set karakter UTF-8.
+ [ AppSync arahan](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-directives.html) - AppSync memaparkan arahan untuk memfasilitasi produktivitas pengembang saat menulis di VTL.
+  [Pembantu waktu di \$1util.time - Variabel \$1util.time](https://docs.aws.amazon.com/appsync/latest/devguide/time-helpers-in-util-time.html) berisi metode datetime untuk membantu menghasilkan stempel waktu, mengonversi antara format datetime, dan mengurai string datetime. Sintaks untuk format datetime didasarkan pada [DateTimeFormatter](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html), yang dapat Anda referensi untuk dokumentasi lebih lanjut.
+ [List helpers di \$1util.list](https://docs.aws.amazon.com/appsync/latest/devguide/list-helpers-in-util-list.html) - \$1util.list berisi metode untuk membantu operasi Daftar umum seperti menghapus atau mempertahankan item dari daftar untuk memfilter kasus penggunaan.
+  [Pembantu peta di \$1util.map](https://docs.aws.amazon.com/appsync/latest/devguide/utility-helpers-in-map.html) - \$1util.map berisi metode untuk membantu operasi Peta umum seperti menghapus atau mempertahankan item dari Peta untuk memfilter kasus penggunaan.
+  [DynamoDB helpers di \$1util.dynamodb](https://docs.aws.amazon.com/appsync/latest/devguide/dynamodb-helpers-in-util-dynamodb.html) - \$1util.dynamodb berisi metode pembantu yang membuatnya lebih mudah untuk menulis dan membaca data ke Amazon DynamoDB, seperti pemetaan tipe otomatis dan pemformatan. 
+  [Pembantu Amazon RDS di \$1util.rds - \$1util.rds](https://docs.aws.amazon.com/appsync/latest/devguide/rds-helpers-in-util-rds.html) berisi metode pembantu yang memformat operasi RDS dengan menyingkirkan data asing dalam output hasil.
+  [Pembantu HTTP di \$1util.http](https://docs.aws.amazon.com/appsync/latest/devguide/http-helpers-in-utils-http.html) - Utilitas \$1util.http menyediakan metode pembantu yang dapat Anda gunakan untuk mengelola parameter permintaan HTTP dan untuk menambahkan header respons.
+  [Pembantu XMLdi \$1util.xml-\$1util.xml.](https://docs.aws.amazon.com/appsync/latest/devguide/xml-helpers-in-utils-xml.html) berisi metode pembantu yang dapat membuatnya lebih mudah untuk menerjemahkan tanggapan XHTML ke JSON atau Kamus.
+  [Pembantu transformasi di \$1util.transform](https://docs.aws.amazon.com/appsync/latest/devguide/transformation-helpers-in-utils-transform.html) - \$1util.transform berisi metode pembantu yang memudahkan untuk melakukan operasi kompleks terhadap sumber data, seperti operasi filter DynamoDB.
+  [Pembantu matematika di \$1util.math - \$1util.math](https://docs.aws.amazon.com/appsync/latest/devguide/math-helpers-in-util-math.html) berisi metode untuk membantu operasi Matematika umum.
+  [Pembantu string di \$1util.str - \$1util.str](https://docs.aws.amazon.com/appsync/latest/devguide/str-helpers-in-util-str.html) berisi metode untuk membantu operasi String umum.
+  [Ekstensi](https://docs.aws.amazon.com/appsync/latest/devguide/extensions.html) - \$1extensions berisi serangkaian metode untuk membuat tindakan tambahan dalam resolver Anda.

# Pembantu utilitas di \$1 util
<a name="utility-helpers-in-util"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

`$util`Variabel berisi metode utilitas umum untuk membantu Anda bekerja dengan data. Kecuali ditentukan lain, semua utilitas menggunakan set karakter UTF-8.

## utilitas penguraian JSON
<a name="utility-helpers-in-json-parsing"></a>

### JSON menguraikan daftar utilitas
<a name="utility-helpers-in-json-parsing-list"></a>

** **`$util.parseJson(String) : Object`** **  
Mengambil “stringified” JSON dan mengembalikan representasi objek dari hasilnya.

** **`$util.toJson(Object) : String`** **  
Mengambil objek dan mengembalikan representasi JSON “stringified” dari objek itu.

## Pengkodean utilitas
<a name="utility-helpers-in-encoding"></a>

### Pengkodean daftar utilitas
<a name="utility-helpers-in-encoding-list"></a>

** **`$util.urlEncode(String) : String`** **  
Mengembalikan string masukan sebagai string `application/x-www-form-urlencoded` dikodekan.

** **`$util.urlDecode(String) : String`** **  
Mendekode string yang `application/x-www-form-urlencoded` dikodekan kembali ke bentuk yang tidak dikodekan.

** **`$util.base64Encode( byte[] ) : String`** **  
Mengkodekan input ke dalam string yang dikodekan base64.

** **`$util.base64Decode(String) : byte[]`** **  
Mendekode data dari string yang dikodekan base64.

## Utilitas pembuatan ID
<a name="utility-helpers-in-id-gen"></a>

### Daftar utilitas pembuatan ID
<a name="utility-helpers-in-id-gen-list"></a>

** **`$util.autoId() : String`** **  
Mengembalikan UUID 128-bit yang dihasilkan secara acak.

****`$util.autoUlid() : String`****  
Mengembalikan ULID 128-bit yang dihasilkan secara acak (Universalally Unique Lexicographically Sortable Identifier).

****`$util.autoKsuid() : String`****  
Mengembalikan 128-bit yang dihasilkan secara acak KSUID (K-Sortable Unique Identifier) base62 dikodekan sebagai String dengan panjang 27.

## Kesalahan utils
<a name="utility-helpers-in-error"></a>

### Daftar utilitas kesalahan
<a name="utility-helpers-in-error-list"></a>

** `$util.error(String)` **  
Melempar kesalahan khusus. Gunakan ini dalam template pemetaan permintaan atau respons untuk mendeteksi kesalahan dengan permintaan atau dengan hasil pemanggilan.

** `$util.error(String, String)` **  
Melempar kesalahan khusus. Gunakan ini dalam template pemetaan permintaan atau respons untuk mendeteksi kesalahan dengan permintaan atau dengan hasil pemanggilan. Anda juga dapat menentukan file`errorType`.

** `$util.error(String, String, Object)` **  
Melempar kesalahan khusus. Gunakan ini dalam template pemetaan permintaan atau respons untuk mendeteksi kesalahan dengan permintaan atau dengan hasil pemanggilan. Anda juga dapat menentukan `errorType` dan `data` bidang. `data`Nilai akan ditambahkan ke `error` blok yang sesuai di `errors` dalam respons GraphQL.  
`data`akan disaring berdasarkan set pemilihan kueri.

** `$util.error(String, String, Object, Object)` **  
Melempar kesalahan khusus. Ini dapat digunakan dalam template pemetaan permintaan atau respons jika template mendeteksi kesalahan dengan permintaan atau dengan hasil pemanggilan. Selain itu, `errorType` bidang, `data` bidang, dan `errorInfo` bidang dapat ditentukan. `data`Nilai akan ditambahkan ke `error` blok yang sesuai di `errors` dalam respons GraphQL.   
`data`akan disaring berdasarkan set pemilihan kueri. `errorInfo`Nilai akan ditambahkan ke `error` blok yang sesuai di `errors` dalam respons GraphQL.  
`errorInfo`**TIDAK** akan disaring berdasarkan set pemilihan kueri.

** `$util.appendError(String)` **  
Menambahkan kesalahan kustom. Ini dapat digunakan dalam template pemetaan permintaan atau respons jika template mendeteksi kesalahan dengan permintaan atau dengan hasil pemanggilan. Tidak seperti`$util.error(String)`, evaluasi template tidak akan terganggu, sehingga data dapat dikembalikan ke penelepon.

** `$util.appendError(String, String)` **  
Menambahkan kesalahan kustom. Ini dapat digunakan dalam template pemetaan permintaan atau respons jika template mendeteksi kesalahan dengan permintaan atau dengan hasil pemanggilan. Selain itu, `errorType` dapat ditentukan. Tidak seperti`$util.error(String, String)`, evaluasi template tidak akan terganggu, sehingga data dapat dikembalikan ke penelepon.

** `$util.appendError(String, String, Object)` **  
Menambahkan kesalahan kustom. Ini dapat digunakan dalam template pemetaan permintaan atau respons jika template mendeteksi kesalahan dengan permintaan atau dengan hasil pemanggilan. Selain itu, bidang `errorType` dan `data` bidang dapat ditentukan. Tidak seperti`$util.error(String, String, Object)`, evaluasi template tidak akan terganggu, sehingga data dapat dikembalikan ke penelepon. `data`Nilai akan ditambahkan ke `error` blok yang sesuai di `errors` dalam respons GraphQL.   
`data`akan disaring berdasarkan set pemilihan kueri.

** `$util.appendError(String, String, Object, Object)` **  
Menambahkan kesalahan kustom. Ini dapat digunakan dalam template pemetaan permintaan atau respons jika template mendeteksi kesalahan dengan permintaan atau dengan hasil pemanggilan. Selain itu, `errorType` bidang, `data` bidang, dan `errorInfo` bidang dapat ditentukan. Tidak seperti`$util.error(String, String, Object, Object)`, evaluasi template tidak akan terganggu, sehingga data dapat dikembalikan ke penelepon. `data`Nilai akan ditambahkan ke `error` blok yang sesuai di `errors` dalam respons GraphQL.  
`data`akan disaring berdasarkan set pemilihan kueri. `errorInfo`Nilai akan ditambahkan ke `error` blok yang sesuai di `errors` dalam respons GraphQL.  
`errorInfo`**TIDAK** akan disaring berdasarkan set pemilihan kueri.

## Utils validasi kondisi
<a name="utility-helpers-in-condition"></a>

### Daftar utilitas validasi kondisi
<a name="utility-helpers-in-condition-list"></a>

** `$util.validate(Boolean, String) : void` **  
Jika kondisinya salah, lempar a CustomTemplateException dengan pesan yang ditentukan.

** `$util.validate(Boolean, String, String) : void` **  
Jika kondisinya salah, lempar a CustomTemplateException dengan pesan dan jenis kesalahan yang ditentukan.

** `$util.validate(Boolean, String, String, Object) : void` **  
Jika kondisinya salah, lempar a CustomTemplateException dengan pesan dan jenis kesalahan yang ditentukan, serta data untuk kembali dalam respons.

## Utils perilaku nol
<a name="utility-helpers-in-null-behavior"></a>

### Daftar utilitas perilaku nol
<a name="utility-helpers-in-null-behavior-list"></a>

** `$util.isNull(Object) : Boolean` **  
Mengembalikan nilai true jika objek yang disediakan adalah null.

** `$util.isNullOrEmpty(String) : Boolean` **  
Mengembalikan nilai true jika data yang disediakan adalah null atau string kosong. Jika tidak, mengembalikan false.

** `$util.isNullOrBlank(String) : Boolean` **  
Mengembalikan nilai true jika data yang disediakan adalah null atau string kosong. Jika tidak, mengembalikan false.

** `$util.defaultIfNull(Object, Object) : Object` **  
Mengembalikan Object pertama jika tidak null. Jika tidak, mengembalikan objek kedua sebagai “Objek default”.

** `$util.defaultIfNullOrEmpty(String, String) : String` **  
Mengembalikan String pertama jika tidak null atau kosong. Jika tidak, mengembalikan String kedua sebagai “String default”.

** `$util.defaultIfNullOrBlank(String, String) : String` **  
Mengembalikan String pertama jika tidak null atau kosong. Jika tidak, mengembalikan String kedua sebagai “String default”.

## Utils pencocokan pola
<a name="utility-helpers-in-pattern-matching"></a>

### Jenis dan pola pencocokan daftar utilitas
<a name="utility-helpers-in-type-pattern-matching-list"></a>

** `$util.typeOf(Object) : String` **  
Mengembalikan String menggambarkan jenis Object. Identifikasi tipe yang didukung adalah: “Null”, “Number”, “String”, “Map”, “List”, “Boolean”. Jika suatu tipe tidak dapat diidentifikasi, tipe yang dikembalikan adalah “Objek”.

** `$util.matches(String, String) : Boolean` **  
Mengembalikan nilai true jika pola yang ditentukan dalam argumen pertama cocok dengan data yang disediakan dalam argumen kedua. Pola harus berupa ekspresi reguler seperti`$util.matches("a*b", "aaaaab")`. Fungsionalitas ini didasarkan pada [Pola](https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html), yang dapat Anda referensikan untuk dokumentasi lebih lanjut.

** `$util.authType() : String` **  
Mengembalikan String yang menjelaskan jenis multi-auth yang digunakan oleh permintaan, mengembalikan “IAM Authorization”, “User Pool Authorization”, “Open ID Connect Authorization”, atau “API Key Authorization”.

## Utils validasi objek
<a name="utility-helpers-in-object-validation"></a>

### Daftar utilitas validasi objek
<a name="utility-helpers-in-object-validation-list"></a>

** `$util.isString(Object) : Boolean` **  
Mengembalikan nilai true jika Object adalah String.

** `$util.isNumber(Object) : Boolean` **  
Mengembalikan nilai true jika Object adalah Number.

** `$util.isBoolean(Object) : Boolean` **  
Mengembalikan nilai true jika Object adalah Boolean.

** `$util.isList(Object) : Boolean` **  
Mengembalikan nilai true jika Object adalah List.

** `$util.isMap(Object) : Boolean` **  
Mengembalikan nilai true jika Object adalah Peta.

## CloudWatch utilitas logging
<a name="utility-helpers-in-logging"></a>

### CloudWatch daftar utilitas log
<a name="utility-helpers-in-cloudwatch-logs"></a>

**`$util.log.info(Object) : Void`**  
Mencatat representasi String dari Objek yang disediakan ke aliran log yang diminta saat pencatatan tingkat permintaan dan tingkat bidang diaktifkan dengan level CloudWatch log`ALL`,, `INFO` atau pada API. `DEBUG`

**`$util.log.info(String, Object...) : Void`**  
Mencatat representasi String dari Objek yang disediakan ke aliran log yang diminta saat pencatatan tingkat permintaan dan tingkat bidang diaktifkan dengan tingkat CloudWatch log pada API. `ALL` Utilitas ini akan menggantikan semua variabel yang ditunjukkan oleh “\$1\$1” dalam format input pertama String dengan representasi String dari Objek yang disediakan secara berurutan.

**`$util.log.debug(Object) : Void`**  
Mencatat representasi String dari Objek yang disediakan ke aliran log yang diminta saat pencatatan tingkat permintaan dan tingkat bidang diaktifkan dengan tingkat CloudWatch log atau pada API. `ALL` `DEBUG`

**`$util.log.debug(String, Object...) : Void`**  
Mencatat representasi String dari Objek yang disediakan ke aliran log yang diminta saat CloudWatch logging tingkat bidang diaktifkan dengan level log `DEBUG` atau level log `ALL` pada API. Utilitas ini akan menggantikan semua variabel yang ditunjukkan oleh “\$1\$1” dalam format input pertama String dengan representasi String dari Objek yang disediakan secara berurutan.

**`$util.log.error(Object) : Void`**  
Mencatat representasi String dari Objek yang disediakan ke aliran log yang diminta saat CloudWatch logging tingkat bidang diaktifkan dengan tingkat log **apa pun** (`ALL`,,, `INFO``DEBUG`, dll.) pada API.

**`$util.log.error(String, Object...) : Void`**  
Mencatat representasi String dari Objek yang disediakan ke aliran log yang diminta saat CloudWatch logging tingkat bidang diaktifkan dengan level log `ERROR` atau level log `ALL` pada API. Utilitas ini akan menggantikan semua variabel yang ditunjukkan oleh “\$1\$1” dalam format input pertama String dengan representasi String dari Objek yang disediakan secara berurutan.

## Kembalikan utilitas perilaku nilai
<a name="utility-helpers-in-return-behavior"></a>

### Kembalikan daftar utilitas perilaku nilai
<a name="utility-helpers-in-behavior-list"></a>

****`$util.qr()`** dan `$util.quiet()` **  
Menjalankan pernyataan VTL sambil menekan nilai yang dikembalikan. Ini berguna untuk menjalankan metode tanpa menggunakan placeholder sementara, seperti menambahkan item ke peta. Contoh:  

```
#set ($myMap = {})
#set($discard = $myMap.put("id", "first value"))
```
Menjadi:  

```
#set ($myMap = {})
$util.qr($myMap.put("id", "first value"))
```  
** `$util.escapeJavaScript(String) : String` **  
Mengembalikan string masukan sebagai string JavaScript lolos.  
** `$util.urlEncode(String) : String` **  
Mengembalikan string masukan sebagai string `application/x-www-form-urlencoded` dikodekan.  
** `$util.urlDecode(String) : String` **  
Mendekode string yang `application/x-www-form-urlencoded` dikodekan kembali ke bentuk yang tidak dikodekan.  
** `$util.base64Encode( byte[] ) : String` **  
Mengkodekan input ke dalam string yang dikodekan base64.  
** `$util.base64Decode(String) : byte[]` **  
Mendekode data dari string yang dikodekan base64.  
** `$util.parseJson(String) : Object` **  
Mengambil “stringified” JSON dan mengembalikan representasi objek dari hasilnya.  
** `$util.toJson(Object) : String` **  
Mengambil objek dan mengembalikan representasi JSON “stringified” dari objek itu.  
** `$util.autoId() : String` **  
Mengembalikan UUID 128-bit yang dihasilkan secara acak.  
****`$util.autoUlid() : String`****  
Mengembalikan ULID 128-bit yang dihasilkan secara acak (Universalally Unique Lexicographically Sortable Identifier).  
****`$util.autoKsuid() : String`****  
Mengembalikan 128-bit yang dihasilkan secara acak KSUID (K-Sortable Unique Identifier) base62 dikodekan sebagai String dengan panjang 27.  
** `$util.unauthorized()` **  
Melempar `Unauthorized` untuk bidang yang sedang diselesaikan. Gunakan ini dalam templat pemetaan permintaan atau respons untuk menentukan apakah akan mengizinkan pemanggil menyelesaikan bidang.  
** `$util.error(String)` **  
Melempar kesalahan khusus. Gunakan ini dalam template pemetaan permintaan atau respons untuk mendeteksi kesalahan dengan permintaan atau dengan hasil pemanggilan.  
** `$util.error(String, String)` **  
Melempar kesalahan khusus. Gunakan ini dalam template pemetaan permintaan atau respons untuk mendeteksi kesalahan dengan permintaan atau dengan hasil pemanggilan. Anda juga dapat menentukan file`errorType`.  
** `$util.error(String, String, Object)` **  
Melempar kesalahan khusus. Gunakan ini dalam template pemetaan permintaan atau respons untuk mendeteksi kesalahan dengan permintaan atau dengan hasil pemanggilan. Anda juga dapat menentukan `errorType` dan `data` bidang. `data`Nilai akan ditambahkan ke `error` blok yang sesuai di `errors` dalam respons GraphQL. **Catatan**: `data` akan difilter berdasarkan set pemilihan kueri.  
** `$util.error(String, String, Object, Object)` **  
Melempar kesalahan khusus. Ini dapat digunakan dalam template pemetaan permintaan atau respons jika template mendeteksi kesalahan dengan permintaan atau dengan hasil pemanggilan. Selain itu, `errorType` bidang, `data` bidang, dan `errorInfo` bidang dapat ditentukan. `data`Nilai akan ditambahkan ke `error` blok yang sesuai di `errors` dalam respons GraphQL. **Catatan**: `data` akan difilter berdasarkan set pemilihan kueri. `errorInfo`Nilai akan ditambahkan ke `error` blok yang sesuai di `errors` dalam respons GraphQL. **Catatan**: **TIDAK `errorInfo`** akan difilter berdasarkan set pemilihan kueri.  
** `$util.appendError(String)` **  
Menambahkan kesalahan kustom. Ini dapat digunakan dalam template pemetaan permintaan atau respons jika template mendeteksi kesalahan dengan permintaan atau dengan hasil pemanggilan. Tidak seperti`$util.error(String)`, evaluasi template tidak akan terganggu, sehingga data dapat dikembalikan ke penelepon.  
** `$util.appendError(String, String)` **  
Menambahkan kesalahan kustom. Ini dapat digunakan dalam template pemetaan permintaan atau respons jika template mendeteksi kesalahan dengan permintaan atau dengan hasil pemanggilan. Selain itu, `errorType` dapat ditentukan. Tidak seperti`$util.error(String, String)`, evaluasi template tidak akan terganggu, sehingga data dapat dikembalikan ke penelepon.  
** `$util.appendError(String, String, Object)` **  
Menambahkan kesalahan kustom. Ini dapat digunakan dalam template pemetaan permintaan atau respons jika template mendeteksi kesalahan dengan permintaan atau dengan hasil pemanggilan. Selain itu, bidang `errorType` dan `data` bidang dapat ditentukan. Tidak seperti`$util.error(String, String, Object)`, evaluasi template tidak akan terganggu, sehingga data dapat dikembalikan ke penelepon. `data`Nilai akan ditambahkan ke `error` blok yang sesuai di `errors` dalam respons GraphQL. **Catatan**: `data` akan difilter berdasarkan set pemilihan kueri.  
** `$util.appendError(String, String, Object, Object)` **  
Menambahkan kesalahan kustom. Ini dapat digunakan dalam template pemetaan permintaan atau respons jika template mendeteksi kesalahan dengan permintaan atau dengan hasil pemanggilan. Selain itu, `errorType` bidang, `data` bidang, dan `errorInfo` bidang dapat ditentukan. Tidak seperti`$util.error(String, String, Object, Object)`, evaluasi template tidak akan terganggu, sehingga data dapat dikembalikan ke penelepon. `data`Nilai akan ditambahkan ke `error` blok yang sesuai di `errors` dalam respons GraphQL. **Catatan**: `data` akan difilter berdasarkan set pemilihan kueri. `errorInfo`Nilai akan ditambahkan ke `error` blok yang sesuai di `errors` dalam respons GraphQL. **Catatan**: **TIDAK `errorInfo`** akan difilter berdasarkan set pemilihan kueri.  
** `$util.validate(Boolean, String) : void` **  
Jika kondisinya salah, lempar a CustomTemplateException dengan pesan yang ditentukan.  
** `$util.validate(Boolean, String, String) : void` **  
Jika kondisinya salah, lempar a CustomTemplateException dengan pesan dan jenis kesalahan yang ditentukan.  
** `$util.validate(Boolean, String, String, Object) : void` **  
Jika kondisinya salah, lempar a CustomTemplateException dengan pesan dan jenis kesalahan yang ditentukan, serta data untuk kembali dalam respons.  
** `$util.isNull(Object) : Boolean` **  
Mengembalikan nilai true jika objek yang disediakan adalah null.  
** `$util.isNullOrEmpty(String) : Boolean` **  
Mengembalikan nilai true jika data yang disediakan adalah null atau string kosong. Jika tidak, mengembalikan false.  
** `$util.isNullOrBlank(String) : Boolean` **  
Mengembalikan nilai true jika data yang disediakan adalah null atau string kosong. Jika tidak, mengembalikan false.  
** `$util.defaultIfNull(Object, Object) : Object` **  
Mengembalikan Object pertama jika tidak null. Jika tidak, mengembalikan objek kedua sebagai “Objek default”.  
** `$util.defaultIfNullOrEmpty(String, String) : String` **  
Mengembalikan String pertama jika tidak null atau kosong. Jika tidak, mengembalikan String kedua sebagai “String default”.  
** `$util.defaultIfNullOrBlank(String, String) : String` **  
Mengembalikan String pertama jika tidak null atau kosong. Jika tidak, mengembalikan String kedua sebagai “String default”.  
** `$util.isString(Object) : Boolean` **  
Mengembalikan nilai true jika Object adalah String.  
** `$util.isNumber(Object) : Boolean` **  
Mengembalikan nilai true jika Object adalah Number.  
** `$util.isBoolean(Object) : Boolean` **  
Mengembalikan nilai true jika Object adalah Boolean.  
** `$util.isList(Object) : Boolean` **  
Mengembalikan nilai true jika Object adalah Daftar.  
** `$util.isMap(Object) : Boolean` **  
Mengembalikan nilai true jika Object adalah Peta.  
** `$util.typeOf(Object) : String` **  
Mengembalikan String menggambarkan jenis Object. Identifikasi tipe yang didukung adalah: “Null”, “Number”, “String”, “Map”, “List”, “Boolean”. Jika suatu tipe tidak dapat diidentifikasi, tipe yang dikembalikan adalah “Objek”.  
** `$util.matches(String, String) : Boolean` **  
Mengembalikan nilai true jika pola yang ditentukan dalam argumen pertama cocok dengan data yang disediakan dalam argumen kedua. Pola harus berupa ekspresi reguler seperti`$util.matches("a*b", "aaaaab")`. Fungsionalitas ini didasarkan pada [Pola](https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html), yang dapat Anda referensikan untuk dokumentasi lebih lanjut.  
** `$util.authType() : String` **  
Mengembalikan String yang menjelaskan jenis multi-auth yang digunakan oleh permintaan, mengembalikan “IAM Authorization”, “User Pool Authorization”, “Open ID Connect Authorization”, atau “API Key Authorization”.  
****`$util.log.info(Object) : Void`****  
Mencatat representasi String dari Objek yang disediakan ke aliran log yang diminta saat pencatatan tingkat permintaan dan tingkat bidang diaktifkan dengan tingkat CloudWatch log pada API. `ALL`  
****`$util.log.info(String, Object...) : Void`****  
Mencatat representasi String dari Objek yang disediakan ke aliran log yang diminta saat pencatatan tingkat permintaan dan tingkat bidang diaktifkan dengan tingkat CloudWatch log pada API. `ALL` Utilitas ini akan menggantikan semua variabel yang ditunjukkan oleh “\$1\$1” dalam format input pertama String dengan representasi String dari Objek yang disediakan secara berurutan.  
****`$util.log.error(Object) : Void`****  
Mencatat representasi String dari Objek yang disediakan ke aliran log yang diminta saat CloudWatch logging tingkat bidang diaktifkan dengan level log `ERROR` atau level log `ALL` pada API.  
****`$util.log.error(String, Object...) : Void`****  
Mencatat representasi String dari Objek yang disediakan ke aliran log yang diminta saat CloudWatch logging tingkat bidang diaktifkan dengan level log `ERROR` atau level log `ALL` pada API. Utilitas ini akan menggantikan semua variabel yang ditunjukkan oleh “\$1\$1” dalam format input pertama String dengan representasi String dari Objek yang disediakan secara berurutan.

** `$util.escapeJavaScript(String) : String` **  
Mengembalikan string masukan sebagai string JavaScript lolos.

## Otorisasi penyelesai
<a name="utility-helpers-in-resolver-auth"></a>

### Daftar otorisasi penyelesai
<a name="utility-helpers-in-resolver-auth-list"></a>

** `$util.unauthorized()` **  
Melempar `Unauthorized` untuk bidang yang sedang diselesaikan. Gunakan ini dalam templat pemetaan permintaan atau respons untuk menentukan apakah akan mengizinkan pemanggil menyelesaikan bidang.

# AWS AppSync arahan
<a name="aws-appsync-directives"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

AWS AppSync mengekspos arahan untuk memfasilitasi produktivitas pengembang saat menulis di VTL.

## Directive utils
<a name="utility-helpers-in-directives"></a>

****`#return(Object)`****  
`#return(Object)`Ini memungkinkan Anda untuk kembali sebelum waktunya dari template pemetaan apa pun. `#return(Object)`analog dengan kata kunci *return* dalam bahasa pemrograman, karena akan kembali dari blok logika cakupan terdekat. Menggunakan `#return(Object)` bagian dalam template pemetaan resolver akan kembali dari resolver. Selain itu, menggunakan `#return(Object)` dari template pemetaan fungsi akan kembali dari fungsi dan akan melanjutkan proses ke fungsi berikutnya di pipeline atau template pemetaan respons resolver.

****`#return`****  
`#return`Arahan menunjukkan perilaku yang sama seperti`#return(Object)`, tetapi `null` akan dikembalikan sebagai gantinya.

# Pembantu waktu di \$1 util.time
<a name="time-helpers-in-util-time"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

`$util.time`Variabel berisi metode datetime untuk membantu menghasilkan stempel waktu, mengonversi antara format datetime, dan mengurai string datetime. Sintaks untuk format datetime didasarkan pada [DateTimeFormatter](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html)mana Anda dapat referensi untuk dokumentasi lebih lanjut. Kami memberikan beberapa contoh di bawah ini, serta daftar metode dan deskripsi yang tersedia.

## Penggunaan waktu
<a name="utility-helpers-in-time"></a>

### Daftar utilitas waktu
<a name="utility-helpers-in-time-list"></a>

** `$util.time.nowISO8601() : String` **  
Mengembalikan representasi String dari UTC dalam [ISO8601format](https://en.wikipedia.org/wiki/ISO_8601).

** `$util.time.nowEpochSeconds() : long` **  
Mengembalikan jumlah detik dari epoch 1970-01-01T 00:00:00 Z ke sekarang.

** `$util.time.nowEpochMilliSeconds() : long` **  
Mengembalikan jumlah milidetik dari epoch 1970-01-01T 00:00:00 Z ke sekarang.

** `$util.time.nowFormatted(String) : String` **  
Mengembalikan string timestamp saat ini di UTC menggunakan format yang ditentukan dari tipe input String.

** `$util.time.nowFormatted(String, String) : String` **  
Mengembalikan string timestamp saat ini untuk zona waktu menggunakan format yang ditentukan dan zona waktu dari jenis input String.

** `$util.time.parseFormattedToEpochMilliSeconds(String, String) : Long` **  
Mem-parsing stempel waktu yang diteruskan sebagai String bersama dengan format yang berisi zona waktu, lalu mengembalikan stempel waktu sebagai milidetik sejak epoch.

** `$util.time.parseFormattedToEpochMilliSeconds(String, String, String) : Long` **  
Mem-parsing stempel waktu yang diteruskan sebagai String bersama dengan format dan zona waktu, lalu mengembalikan stempel waktu sebagai milidetik sejak epoch.

** `$util.time.parseISO8601ToEpochMilliSeconds(String) : Long` **  
Mem-parsing ISO8601 stempel waktu yang diteruskan sebagai String, lalu mengembalikan stempel waktu sebagai milidetik sejak epoch.

** `$util.time.epochMilliSecondsToSeconds(long) : long` **  
Mengonversi stempel waktu milidetik epoch menjadi stempel waktu epoch detik.

** `$util.time.epochMilliSecondsToISO8601(long) : String` **  
Mengonversi stempel waktu milidetik epoch menjadi stempel waktu. ISO8601

** `$util.time.epochMilliSecondsToFormatted(long, String) : String` **  
Mengonversi stempel waktu milidetik epoch, diteruskan selama, ke stempel waktu yang diformat sesuai dengan format yang disediakan di UTC.

** `$util.time.epochMilliSecondsToFormatted(long, String, String) : String` **  
Mengonversi stempel waktu milidetik epoch, diteruskan sebagai panjang, ke stempel waktu yang diformat sesuai dengan format yang disediakan di zona waktu yang disediakan.

## Contoh fungsi mandiri
<a name="standalone-function-examples"></a>

```
$util.time.nowISO8601()                                            : 2018-02-06T19:01:35.749Z
$util.time.nowEpochSeconds()                                       : 1517943695
$util.time.nowEpochMilliSeconds()                                  : 1517943695750
$util.time.nowFormatted("yyyy-MM-dd HH:mm:ssZ")                    : 2018-02-06 19:01:35+0000
$util.time.nowFormatted("yyyy-MM-dd HH:mm:ssZ", "+08:00")          : 2018-02-07 03:01:35+0800
$util.time.nowFormatted("yyyy-MM-dd HH:mm:ssZ", "Australia/Perth") : 2018-02-07 03:01:35+0800
```

## Contoh konversi
<a name="conversion-examples"></a>

```
#set( $nowEpochMillis = 1517943695758 )
$util.time.epochMilliSecondsToSeconds($nowEpochMillis)                                     : 1517943695
$util.time.epochMilliSecondsToISO8601($nowEpochMillis)                                     : 2018-02-06T19:01:35.758Z
$util.time.epochMilliSecondsToFormatted($nowEpochMillis, "yyyy-MM-dd HH:mm:ssZ")           : 2018-02-06 19:01:35+0000
$util.time.epochMilliSecondsToFormatted($nowEpochMillis, "yyyy-MM-dd HH:mm:ssZ", "+08:00") : 2018-02-07 03:01:35+0800
```

## Contoh penguraian
<a name="parsing-examples"></a>

```
$util.time.parseISO8601ToEpochMilliSeconds("2018-02-01T17:21:05.180+08:00")                          : 1517476865180
$util.time.parseFormattedToEpochMilliSeconds("2018-02-02 01:19:22+0800", "yyyy-MM-dd HH:mm:ssZ")     : 1517505562000
$util.time.parseFormattedToEpochMilliSeconds("2018-02-02 01:19:22", "yyyy-MM-dd HH:mm:ss", "+08:00") : 1517505562000
```

## Penggunaan dengan skalar AWS AppSync yang ditentukan
<a name="usage-with-aws-scalars"></a>

Format berikut kompatibel dengan`AWSDate`,`AWSDateTime`, dan`AWSTime`.

```
$util.time.nowFormatted("yyyy-MM-dd[XXX]", "-07:00:30")               : 2018-07-11-07:00
$util.time.nowFormatted("yyyy-MM-dd'T'HH:mm:ss[XXXXX]", "-07:00:30")  : 2018-07-11T15:14:15-07:00:30
```

# Daftar pembantu di \$1util.list
<a name="list-helpers-in-util-list"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

`$util.list`berisi metode untuk membantu operasi Daftar umum seperti menghapus atau mempertahankan item dari daftar untuk memfilter kasus penggunaan.

## Daftar utilitas
<a name="utility-helpers-in-list-utils"></a>

** `$util.list.copyAndRetainAll(List, List) : List` **  
Membuat salinan dangkal dari daftar yang disediakan dalam argumen pertama sambil mempertahankan hanya item yang ditentukan dalam argumen kedua, jika ada. Semua item lainnya akan dihapus dari salinan.

** `$util.list.copyAndRemoveAll(List, List) : List` **  
Membuat salinan dangkal dari daftar yang disediakan dalam argumen pertama sambil menghapus item apa pun di mana item ditentukan dalam argumen kedua, jika ada. Semua item lainnya akan disimpan dalam salinan.

** `$util.list.sortList(List, Boolean, String) : List` **  
Mengurutkan daftar objek, yang disediakan dalam argumen pertama. Jika argumen kedua benar, daftar diurutkan dengan cara menurun; jika argumen kedua salah, daftar diurutkan dengan cara menaik. Argumen ketiga adalah nama string dari properti yang digunakan untuk mengurutkan daftar objek kustom. Jika itu adalah daftar hanya Strings, Integers, Floats, atau Doubles, argumen ketiga dapat berupa string acak. Jika semua objek tidak dari kelas yang sama, daftar asli dikembalikan. Hanya daftar yang berisi maksimal 1000 objek yang didukung. Berikut ini adalah contoh penggunaan utilitas ini:   

```
 INPUT:      $util.list.sortList([{"description":"youngest", "age":5},{"description":"middle", "age":45}, {"description":"oldest", "age":85}], false, "description")
 OUTPUT:     [{"description":"middle", "age":45}, {"description":"oldest", "age":85}, {"description":"youngest", "age":5}]
```

# Pembantu peta di \$1 util.map
<a name="utility-helpers-in-map"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

 `$util.map`berisi metode untuk membantu operasi Peta umum seperti menghapus atau mempertahankan item dari Peta untuk memfilter kasus penggunaan.

## Peta utils
<a name="utility-helpers-in-map-list"></a>

** `$util.map.copyAndRetainAllKeys(Map, List) : Map` **  
Membuat salinan dangkal dari peta pertama sambil mempertahankan hanya kunci yang ditentukan dalam daftar, jika ada. Semua kunci lainnya akan dihapus dari salinan.

** `$util.map.copyAndRemoveAllKeys(Map, List) : Map` **  
Membuat salinan dangkal dari peta pertama sambil menghapus entri di mana kunci ditentukan dalam daftar, jika ada. Semua kunci lainnya akan disimpan dalam salinan.

# Pembantu DynamoDB di \$1util.dynamodb
<a name="dynamodb-helpers-in-util-dynamodb"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

`$util.dynamodb`berisi metode pembantu yang memudahkan untuk menulis dan membaca data ke Amazon DynamoDB, seperti pemetaan dan pemformatan tipe otomatis. Metode ini dirancang untuk membuat pemetaan tipe primitif dan Daftar ke format input DynamoDB yang tepat secara otomatis, yang merupakan format. `Map` `{ "TYPE" : VALUE }`

Misalnya, sebelumnya, template pemetaan permintaan untuk membuat item baru di DynamoDB mungkin terlihat seperti ini:

```
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "id" : { "S" : "$util.autoId()" }
    },
    "attributeValues" : {
         "title" : { "S" : $util.toJson($ctx.args.title) },
         "author" : { "S" : $util.toJson($ctx.args.author) },
         "version" : { "N", $util.toJson($ctx.args.version) }
    }
}
```

Jika kita ingin menambahkan bidang ke objek, kita harus memperbarui kueri GraphQL dalam skema, serta template pemetaan permintaan. Namun, kami sekarang dapat merestrukturisasi template pemetaan permintaan kami sehingga secara otomatis mengambil bidang baru yang ditambahkan dalam skema kami dan menambahkannya ke DynamoDB dengan tipe yang benar:

```
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "id" : $util.dynamodb.toDynamoDBJson($util.autoId())
    },
    "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args)
}
```

Pada contoh sebelumnya, kita menggunakan `$util.dynamodb.toDynamoDBJson(...)` helper untuk secara otomatis mengambil id yang dihasilkan dan mengubahnya menjadi representasi DynamoDB dari atribut string. Kami kemudian mengambil semua argumen dan mengubahnya menjadi representasi DynamoDB mereka dan mengeluarkannya ke bidang `attributeValues` di template.

Setiap helper memiliki dua versi: versi yang mengembalikan objek (misalnya,`$util.dynamodb.toString(...)`), dan versi yang mengembalikan objek sebagai string JSON (misalnya,`$util.dynamodb.toStringJson(...)`). Pada contoh sebelumnya, kita menggunakan versi yang mengembalikan data sebagai string JSON. Jika Anda ingin memanipulasi objek sebelum digunakan dalam template, Anda dapat memilih untuk mengembalikan objek sebagai gantinya, seperti yang ditunjukkan berikut:

```
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "id" : $util.dynamodb.toDynamoDBJson($util.autoId())
    },

    #set( $myFoo = $util.dynamodb.toMapValues($ctx.args) )
    #set( $myFoo.version = $util.dynamodb.toNumber(1) )
    #set( $myFoo.timestamp = $util.dynamodb.toString($util.time.nowISO8601()))

    "attributeValues" : $util.toJson($myFoo)
}
```

Pada contoh sebelumnya, kita mengembalikan argumen yang dikonversi sebagai peta alih-alih string JSON, dan kemudian menambahkan `timestamp` bidang `version` and sebelum akhirnya mengeluarkannya ke `attributeValues` bidang dalam template menggunakan. `$util.toJson(...)`

Versi JSON dari masing-masing pembantu setara dengan membungkus versi non-JSON di. `$util.toJson(...)` Misalnya, pernyataan berikut persis sama:

```
$util.toStringJson("Hello, World!")
$util.toJson($util.toString("Hello, World!"))
```

## ToDynamoDB
<a name="utility-helpers-in-toDynamoDB"></a>

### Daftar utilitas ToDynamoDB
<a name="utility-helpers-in-toDynamoDB-list"></a>

** `$util.dynamodb.toDynamoDB(Object) : Map` **  
Alat konversi objek umum untuk DynamoDB yang mengubah objek masukan ke representasi DynamoDB yang sesuai. Ini berpendapat tentang bagaimana itu mewakili beberapa jenis: misalnya, itu akan menggunakan daftar (“L”) daripada set (“SS”, “NS”, “BS”). Ini mengembalikan sebuah objek yang menggambarkan nilai atribut DynamoDB.  
**Contoh string**  

```
Input:      $util.dynamodb.toDynamoDB("foo")
Output:     { "S" : "foo" }
```
**Contoh angka**  

```
Input:      $util.dynamodb.toDynamoDB(12345)
Output:     { "N" : 12345 }
```
**Contoh Boolean**  

```
Input:      $util.dynamodb.toDynamoDB(true)
Output:     { "BOOL" : true }
```
**Daftar contoh**  

```
Input:      $util.dynamodb.toDynamoDB([ "foo", 123, { "bar" : "baz" } ])
Output:     {
               "L" : [
                   { "S" : "foo" },
                   { "N" : 123 },
                   {
                       "M" : {
                           "bar" : { "S" : "baz" }
                       }
                   }
               ]
           }
```
**Contoh peta**  

```
Input:      $util.dynamodb.toDynamoDB({ "foo": "bar", "baz" : 1234, "beep": [ "boop"] })
Output:     {
               "M" : {
                   "foo"  : { "S" : "bar" },
                   "baz"  : { "N" : 1234 },
                   "beep" : {
                       "L" : [
                           { "S" : "boop" }
                       ]
                   }
               }
           }
```

****`$util.dynamodb.toDynamoDBJson(Object) : String`** **  
Sama seperti`$util.dynamodb.toDynamoDB(Object) : Map`, tetapi mengembalikan nilai atribut DynamoDB sebagai string JSON dikodekan.

## ToString utilitas
<a name="utility-helpers-in-toString"></a>

### Daftar utilitas ToString
<a name="utility-helpers-in-toString-list"></a>

****`$util.dynamodb.toString(String) : String`** **  
Mengkonversi string input ke format string DynamoDB. Ini mengembalikan sebuah objek yang menggambarkan nilai atribut DynamoDB.  

```
Input:      $util.dynamodb.toString("foo")
Output:     { "S" : "foo" }
```

** `$util.dynamodb.toStringJson(String) : Map` **  
Sama seperti`$util.dynamodb.toString(String) : String`, tetapi mengembalikan nilai atribut DynamoDB sebagai string JSON dikodekan.

** `$util.dynamodb.toStringSet(List<String>) : Map` **  
Mengkonversi daftar dengan Strings ke format set string DynamoDB. Ini mengembalikan sebuah objek yang menggambarkan nilai atribut DynamoDB.  

```
Input:      $util.dynamodb.toStringSet([ "foo", "bar", "baz" ])
Output:     { "SS" : [ "foo", "bar", "baz" ] }
```

** `$util.dynamodb.toStringSetJson(List<String>) : String` **  
Sama seperti`$util.dynamodb.toStringSet(List<String>) : Map`, tetapi mengembalikan nilai atribut DynamoDB sebagai string JSON dikodekan.

## utilitas Tonumber
<a name="utility-helpers-in-toNumber"></a>

### Daftar utilitas Tonumber
<a name="utility-helpers-in-toNumber-list"></a>

** `$util.dynamodb.toNumber(Number) : Map` **  
Mengkonversi angka ke format nomor DynamoDB. Ini mengembalikan sebuah objek yang menggambarkan nilai atribut DynamoDB.  

```
Input:      $util.dynamodb.toNumber(12345)
Output:     { "N" : 12345 }
```

** `$util.dynamodb.toNumberJson(Number) : String` **  
Sama seperti`$util.dynamodb.toNumber(Number) : Map`, tetapi mengembalikan nilai atribut DynamoDB sebagai string JSON dikodekan.

** `$util.dynamodb.toNumberSet(List<Number>) : Map` **  
Mengkonversi daftar angka ke format set nomor DynamoDB. Ini mengembalikan sebuah objek yang menggambarkan nilai atribut DynamoDB.  

```
Input:      $util.dynamodb.toNumberSet([ 1, 23, 4.56 ])
Output:     { "NS" : [ 1, 23, 4.56 ] }
```

** `$util.dynamodb.toNumberSetJson(List<Number>) : String` **  
Sama seperti`$util.dynamodb.toNumberSet(List<Number>) : Map`, tetapi mengembalikan nilai atribut DynamoDB sebagai string JSON dikodekan.

## Kegunaan toBinary
<a name="utility-helpers-in-toBinary"></a>

### Daftar utilitas toBinary
<a name="utility-helpers-in-toBinary-list"></a>

** `$util.dynamodb.toBinary(String) : Map` **  
Mengkonversi data biner dikodekan sebagai string base64 ke format biner DynamoDB. Ini mengembalikan sebuah objek yang menggambarkan nilai atribut DynamoDB.  

```
Input:      $util.dynamodb.toBinary("foo")
Output:     { "B" : "foo" }
```

** `$util.dynamodb.toBinaryJson(String) : String` **  
Sama seperti`$util.dynamodb.toBinary(String) : Map`, tetapi mengembalikan nilai atribut DynamoDB sebagai string JSON dikodekan.

** `$util.dynamodb.toBinarySet(List<String>) : Map` **  
Mengkonversi daftar data biner yang dikodekan sebagai string base64 ke format set biner DynamoDB. Ini mengembalikan sebuah objek yang menggambarkan nilai atribut DynamoDB.  

```
Input:      $util.dynamodb.toBinarySet([ "foo", "bar", "baz" ])
Output:     { "BS" : [ "foo", "bar", "baz" ] }
```

** `$util.dynamodb.toBinarySetJson(List<String>) : String` **  
Sama seperti`$util.dynamodb.toBinarySet(List<String>) : Map`, tetapi mengembalikan nilai atribut DynamoDB sebagai string JSON dikodekan.

## utilitas ToBoolean
<a name="utility-helpers-in-toBoolean"></a>

### Daftar utilitas ToBoolean
<a name="utility-helpers-in-toBoolean-list"></a>

** `$util.dynamodb.toBoolean(Boolean) : Map` **  
Mengkonversi Boolean ke format DynamoDB Boolean yang sesuai. Ini mengembalikan sebuah objek yang menggambarkan nilai atribut DynamoDB.  

```
Input:      $util.dynamodb.toBoolean(true)
Output:     { "BOOL" : true }
```

** `$util.dynamodb.toBooleanJson(Boolean) : String` **  
Sama seperti`$util.dynamodb.toBoolean(Boolean) : Map`, tetapi mengembalikan nilai atribut DynamoDB sebagai string JSON dikodekan.

## utilitas ToNull
<a name="utility-helpers-in-toNull"></a>

### Daftar utilitas ToNull
<a name="utility-helpers-in-toNull-list"></a>

** `$util.dynamodb.toNull() : Map` **  
Mengembalikan null dalam format DynamoDB null. Ini mengembalikan sebuah objek yang menggambarkan nilai atribut DynamoDB.  

```
Input:      $util.dynamodb.toNull()
Output:     { "NULL" : null }
```

** `$util.dynamodb.toNullJson() : String` **  
Sama seperti`$util.dynamodb.toNull() : Map`, tetapi mengembalikan nilai atribut DynamoDB sebagai string JSON dikodekan.

## utilitas ToList
<a name="utility-helpers-in-toList"></a>

### Daftar utilitas ToList
<a name="utility-helpers-in-toList-list"></a>

****`$util.dynamodb.toList(List) : Map`** **  
Mengkonversi daftar objek ke format daftar DynamoDB. Setiap item dalam daftar juga dikonversi ke format DynamoDB yang sesuai. Ini berpendapat tentang bagaimana itu mewakili beberapa objek bersarang: misalnya, itu akan menggunakan daftar (“L”) daripada set (“SS”, “NS”, “BS”). Ini mengembalikan sebuah objek yang menggambarkan nilai atribut DynamoDB.  

```
Input:      $util.dynamodb.toList([ "foo", 123, { "bar" : "baz" } ])
Output:     {
               "L" : [
                   { "S" : "foo" },
                   { "N" : 123 },
                   {
                       "M" : {
                           "bar" : { "S" : "baz" }
                       }
                   }
               ]
           }
```

** `$util.dynamodb.toListJson(List) : String` **  
Sama seperti`$util.dynamodb.toList(List) : Map`, tetapi mengembalikan nilai atribut DynamoDB sebagai string JSON dikodekan.

## TomAp utilitas
<a name="utility-helpers-in-toMap"></a>

### Daftar utilitas TomAP
<a name="utility-helpers-in-toMap-list"></a>

** `$util.dynamodb.toMap(Map) : Map` **  
Mengkonversi peta ke format peta DynamoDB. Setiap nilai dalam peta juga dikonversi ke format DynamoDB yang sesuai. Ini berpendapat tentang bagaimana itu mewakili beberapa objek bersarang: misalnya, itu akan menggunakan daftar (“L”) daripada set (“SS”, “NS”, “BS”). Ini mengembalikan sebuah objek yang menggambarkan nilai atribut DynamoDB.  

```
Input:      $util.dynamodb.toMap({ "foo": "bar", "baz" : 1234, "beep": [ "boop"] })
Output:     {
               "M" : {
                   "foo"  : { "S" : "bar" },
                   "baz"  : { "N" : 1234 },
                   "beep" : {
                       "L" : [
                           { "S" : "boop" }
                       ]
                   }
               }
           }
```

** `$util.dynamodb.toMapJson(Map) : String` **  
Sama seperti`$util.dynamodb.toMap(Map) : Map`, tetapi mengembalikan nilai atribut DynamoDB sebagai string JSON dikodekan.

** `$util.dynamodb.toMapValues(Map) : Map` **  
Membuat salinan peta di mana setiap nilai telah dikonversi ke format DynamoDB yang sesuai. Ini berpendapat tentang bagaimana itu mewakili beberapa objek bersarang: misalnya, itu akan menggunakan daftar (“L”) daripada set (“SS”, “NS”, “BS”).  

```
Input:      $util.dynamodb.toMapValues({ "foo": "bar", "baz" : 1234, "beep": [ "boop"] })
Output:     {
               "foo"  : { "S" : "bar" },
               "baz"  : { "N" : 1234 },
               "beep" : {
                   "L" : [
                       { "S" : "boop" }
                   ]
               }
           }
```
Ini sedikit berbeda `$util.dynamodb.toMap(Map) : Map` karena hanya mengembalikan isi dari nilai atribut DynamoDB, tetapi tidak seluruh nilai atribut itu sendiri. Misalnya, pernyataan berikut persis sama:  

```
$util.dynamodb.toMapValues($map)
$util.dynamodb.toMap($map).get("M")
```

** `$util.dynamodb.toMapValuesJson(Map) : String` **  
Sama seperti`$util.dynamodb.toMapValues(Map) : Map`, tetapi mengembalikan nilai atribut DynamoDB sebagai string JSON dikodekan.

## S3Object utilitas
<a name="utility-helpers-in-S3Object"></a>

### Daftar utilitas S3Object
<a name="utility-helpers-in-S3Object-list"></a>

** `$util.dynamodb.toS3Object(String key, String bucket, String region) : Map` **  
Mengonversi kunci, bucket, dan wilayah menjadi representasi DynamoDB S3 Object. Ini mengembalikan sebuah objek yang menggambarkan nilai atribut DynamoDB.  

```
Input:      $util.dynamodb.toS3Object("foo", "bar", region = "baz")
Output:     { "S" : "{ \"s3\" : { \"key\" : \"foo", \"bucket\" : \"bar", \"region\" : \"baz" } }" }
```

** `$util.dynamodb.toS3ObjectJson(String key, String bucket, String region) : String` **  
Sama seperti`$util.dynamodb.toS3Object(String key, String bucket, String region) : Map`, tetapi mengembalikan nilai atribut DynamoDB sebagai string JSON dikodekan.

** `$util.dynamodb.toS3Object(String key, String bucket, String region, String version) : Map` **  
Mengonversi kunci, bucket, region, dan versi opsional menjadi representasi DynamoDB S3 Object. Ini mengembalikan sebuah objek yang menggambarkan nilai atribut DynamoDB.  

```
Input:      $util.dynamodb.toS3Object("foo", "bar", "baz", "beep")
Output:     { "S" : "{ \"s3\" : { \"key\" : \"foo\", \"bucket\" : \"bar\", \"region\" : \"baz\", \"version\" = \"beep\" } }" }
```

** `$util.dynamodb.toS3ObjectJson(String key, String bucket, String region, String version) : String` **  
Sama seperti`$util.dynamodb.toS3Object(String key, String bucket, String region, String version) : Map`, tetapi mengembalikan nilai atribut DynamoDB sebagai string JSON dikodekan.

** `$util.dynamodb.fromS3ObjectJson(String) : Map` **  
Menerima nilai string Objek DynamoDB S3 dan mengembalikan peta yang berisi kunci, bucket, wilayah, dan versi opsional.  

```
Input:      $util.dynamodb.fromS3ObjectJson({ "S" : "{ \"s3\" : { \"key\" : \"foo\", \"bucket\" : \"bar\", \"region\" : \"baz\", \"version\" = \"beep\" } }" })
Output:     { "key" : "foo", "bucket" : "bar", "region" : "baz", "version" : "beep" }
```

# Pembantu Amazon RDS di \$1util.rds
<a name="rds-helpers-in-util-rds"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

`$util.rds`berisi metode pembantu yang memformat operasi Amazon RDS dengan menyingkirkan data asing dalam output hasil.

## \$1util.rds daftar utils
<a name="rds-helpers-in-util-rds-list"></a>

****`$util.rds.toJsonString(String serializedSQLResult): String`****  
Mengembalikan `String` dengan mengubah format hasil operasi API Data Amazon Relational Database Service (Amazon RDS) mentah stringified ke string yang lebih ringkas. String yang dikembalikan adalah daftar serial catatan SQL dari set hasil. Setiap catatan direpresentasikan sebagai kumpulan pasangan kunci-nilai. Kunci adalah nama kolom yang sesuai.  
Jika pernyataan yang sesuai dalam input adalah kueri SQL yang menyebabkan mutasi (misalnya INSERT, UPDATE, DELETE), maka daftar kosong dikembalikan. Misalnya, kueri `select * from Books limit 2` memberikan hasil mentah dari operasi Data Amazon RDS:  

```
{
    "sqlStatementResults": [
        {
            "numberOfRecordsUpdated": 0,
            "records": [
                [
                    {
                        "stringValue": "Mark Twain"
                    },
                    {
                        "stringValue": "Adventures of Huckleberry Finn"
                    },
                    {
                        "stringValue": "978-1948132817"
                    }
                ],
                [
                    {
                        "stringValue": "Jack London"
                    },
                    {
                        "stringValue": "The Call of the Wild"
                    },
                    {
                        "stringValue": "978-1948132275"
                    }
                  ]
            ],
            "columnMetadata": [
                {
                    "isSigned": false,
                    "isCurrency": false,
                    "label": "author",
                    "precision": 200,
                    "typeName": "VARCHAR",
                    "scale": 0,
                    "isAutoIncrement": false,
                    "isCaseSensitive": false,
                    "schemaName": "",
                    "tableName": "Books",
                    "type": 12,
                    "nullable": 0,
                    "arrayBaseColumnType": 0,
                    "name": "author"
                },
                {
                    "isSigned": false,
                    "isCurrency": false,
                    "label": "title",
                    "precision": 200,
                    "typeName": "VARCHAR",
                    "scale": 0,
                    "isAutoIncrement": false,
                    "isCaseSensitive": false,
                    "schemaName": "",
                    "tableName": "Books",
                    "type": 12,
                    "nullable": 0,
                    "arrayBaseColumnType": 0,
                    "name": "title"
                },
                {
                    "isSigned": false,
                    "isCurrency": false,
                    "label": "ISBN-13",
                    "precision": 15,
                    "typeName": "VARCHAR",
                    "scale": 0,
                    "isAutoIncrement": false,
                    "isCaseSensitive": false,
                    "schemaName": "",
                    "tableName": "Books",
                    "type": 12,
                    "nullable": 0,
                    "arrayBaseColumnType": 0,
                    "name": "ISBN-13"
                }
            ]
        }
    ]
}
```
`util.rds.toJsonString`adalah:  

```
[
  {
    "author": "Mark Twain",
    "title": "Adventures of Huckleberry Finn",
    "ISBN-13": "978-1948132817"
  },
  {
    "author": "Jack London",
    "title": "The Call of the Wild",
    "ISBN-13": "978-1948132275"
  },
]
```

****`$util.rds.toJsonObject(String serializedSQLResult): Object`****  
Ini sama dengan`util.rds.toJsonString`, tetapi dengan hasilnya menjadi JSON`Object`.

# Pembantu HTTP di \$1 util.http
<a name="http-helpers-in-utils-http"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

`$util.http`Utilitas menyediakan metode pembantu yang dapat Anda gunakan untuk mengelola parameter permintaan HTTP dan untuk menambahkan header respons.

## \$1 util.http daftar utilitas
<a name="http-helpers-in-utils-http-list"></a>

** `$util.http.copyHeaders(Map) : Map` **  
Menyalin header dari peta, tidak termasuk header HTTP terbatas berikut:  
+ transfer-encoding
+ connection
+ host
+ expect
+ keep-alive
+ upgrade
+ proxy-authenticate
+ proxy-authorization
+ te
+ content-length
Anda dapat menggunakan utilitas ini untuk meneruskan header permintaan ke titik akhir HTTP hilir Anda.  

```
{
    ...
    "params": {
        ...
        "headers": $util.http.copyHeaders($ctx.request.headers),
        ...
    },
    ...
}
```

**\$1 util.http. addResponseHeader(String, Objek)**  
Menambahkan header kustom tunggal dengan nama (`String`) dan nilai (`Object`) dari respon. Batasan berikut berlaku:  
+ Selain daftar header terbatas untuk`copyHeaders(Map)`, nama header tidak dapat cocok dengan salah satu dari berikut ini:
  + Access-Control-Allow-Credentials
  + Access-Control-Allow-Origin
  + Access-Control-Expose-Headers
  + Access-Control-Max-Age
  + Access-Control-Allow-Methods
  + Access-Control-Allow-Headers
  + Vary
  + Content-Type
+ Nama header tidak dapat dimulai dengan awalan `x-amzn-` terbatas atau. `x-amz-`
+ Ukuran header respons kustom tidak boleh melebihi 4 KB. Ini termasuk nama dan nilai header.
+ Anda harus menentukan setiap header respons sekali per operasi GraphQL. Namun, jika Anda mendefinisikan header khusus dengan nama yang sama beberapa kali, definisi terbaru akan muncul dalam respons. Semua header dihitung terhadap batas ukuran header terlepas dari penamaan.
+ Header dengan nama kosong atau terbatas `(String)` atau nilai null `(Object)` akan diabaikan dan menghasilkan `ResponseHeaderError` kesalahan yang ditambahkan ke output operasi. `errors`

```
export function request(ctx) {
  util.http.addResponseHeader('itemsCount', 7)
  util.http.addResponseHeader('render', ctx.args.render)
  return {}
}
```

****`$util.http.addResponseHeaders(Map)`****  
Menambahkan beberapa header respons ke respons dari peta nama `(String)` dan nilai `(Object)` yang ditentukan. Keterbatasan yang sama yang tercantum untuk `addResponseHeader(String, Object)` metode ini juga berlaku untuk metode ini.  

```
export function request(ctx) {
  const headers = {
    headerInt: 12,
    headerString: 'stringValue',
    headerObject: {
      field1: 7,
      field2: 'string'
    }
  }
  util.http.addResponseHeaders(headers)
  return {}
}
```

# Pembantu XMLdi \$1 util.xml.
<a name="xml-helpers-in-utils-xml"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

`$util.xml`berisi metode pembantu yang dapat membuatnya lebih mudah untuk menerjemahkan respons XHTML ke JSON atau Kamus.

## \$1 util.xmldaftar utils
<a name="xml-helpers-in-utils-xml-list"></a>

****`$util.xml.toMap(String) : Map`****  
Mengkonversi string XHTML ke Kamus.  

```
Input:

<?xml version="1.0" encoding="UTF-8"?>
<posts>
<post>
  <id>1</id>
  <title>Getting started with GraphQL</title>
</post>
</posts>

Output (JSON representation):

{
  "posts":{
    "post":{
      "id":1,
      "title":"Getting started with GraphQL"
    }
  }
}


Input:

<?xml version="1.0" encoding="UTF-8"?>
<posts>
<post>
  <id>1</id>
  <title>Getting started with GraphQL</title>
</post>
<post>
  <id>2</id>
  <title>Getting started with AWS AppSync</title>
</post>
</posts>

Output (JSON representation):

{
  "posts":{
    "post":[
        {
          "id":1,
          "title":"Getting started with GraphQL"
        },
        {
          "id":2,
          "title":"Getting started with AWS AppSync"
        }
    ]
  }
}
```

****`$util.xml.toJsonString(String) : String`****  
Mengkonversi string XHTML ke string JSON. Ini mirip dengan *TomAP*, kecuali bahwa outputnya adalah string. Hal ini berguna jika Anda ingin langsung mengkonversi dan mengembalikan respon XMLdari objek HTTP ke JSON.

****`$util.xml.toJsonString(String, Boolean) : String`****  
Mengkonversi string XHTML ke string JSON dengan parameter Boolean opsional untuk menentukan apakah Anda ingin string-encode JSON.

# Pembantu transformasi di \$1util.transform
<a name="transformation-helpers-in-utils-transform"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

`$util.transform`berisi metode pembantu yang memudahkan untuk melakukan operasi kompleks terhadap sumber data, seperti operasi filter Amazon DynamoDB.

## Pembantu transformasi
<a name="transformation-helpers-conversions"></a>

### Daftar utilitas pembantu transformasi
<a name="transformation-helpers-in-utils-transform-list"></a>

****`$util.transform.toDynamoDBFilterExpression(Map) : Map`****  
Mengkonversi string input ke ekspresi filter untuk digunakan dengan DynamoDB.  

```
Input:

$util.transform.toDynamoDBFilterExpression({
    "title":{
      "contains":"Hello World"
    }
  })

Output:

{
    "expression" : "contains(#title, :title_contains)"
    "expressionNames" : {
        "#title" : "title",
    },
    "expressionValues" : {
        ":title_contains" : { "S" : "Hello World" }
    },
}
```

****`$util.transform.toElasticsearchQueryDSL(Map) : Map`****  
Mengkonversi input yang diberikan ke ekspresi OpenSearch Query DSL yang setara, mengembalikannya sebagai string JSON.  

```
Input:

$util.transform.toElasticsearchQueryDSL({
    "upvotes":{
        "ne":15,
        "range":[
            10,
            20
        ]
    },
    "title":{
        "eq":"hihihi",
        "wildcard":"h*i"
    }
  })

Output:
{
    "bool":{
      "must":[
          {
            "bool":{
              "must":[
                  {
                    "bool":{
                      "must_not":{
                        "term":{
                          "upvotes":15
                        }
                      }
                    }
                  },
                  {
                    "range":{
                      "upvotes":{
                        "gte":10,
                        "lte":20
                      }
                    }
                  }
              ]
            }
          },
          {
            "bool":{
              "must":[
                  {
                    "term":{
                      "title":"hihihi"
                    }
                  },
                  {
                  "wildcard":{
                      "title":"h*i"
                    }
                  }
              ]
            }
          }
      ]
    }
}
```
Operator default diasumsikan AND.

## Filter berlangganan pembantu transformasi
<a name="transformation-helpers-conversions-subscription-filters"></a>

### Pembantu transformasi berlangganan menyaring daftar utils
<a name="transformation-helpers-in-utils-transform-list"></a>

****`$util.transform.toSubscriptionFilter(Map) : Map`****  
Mengkonversi objek `Map` input ke objek `SubscriptionFilter` ekspresi. `$util.transform.toSubscriptionFilter`Metode ini digunakan sebagai masukan ke `$extensions.setSubscriptionFilter()` ekstensi. Untuk informasi selengkapnya, lihat [Ekstensi](https://docs.aws.amazon.com/appsync/latest/devguide/extensions).

****`$util.transform.toSubscriptionFilter(Map, List) : Map`****  
Mengkonversi objek `Map` input ke objek `SubscriptionFilter` ekspresi. `$util.transform.toSubscriptionFilter`Metode ini digunakan sebagai masukan ke `$extensions.setSubscriptionFilter()` ekstensi. Untuk informasi selengkapnya, lihat [Ekstensi](https://docs.aws.amazon.com/appsync/latest/devguide/extensions).  
Argumen pertama adalah objek `Map` masukan yang dikonversi ke objek `SubscriptionFilter` ekspresi. Argumen kedua adalah nama `List` bidang yang diabaikan dalam objek `Map` masukan pertama saat membangun objek `SubscriptionFilter` ekspresi.

****`$util.transform.toSubscriptionFilter(Map, List, Map) : Map`****  
Mengkonversi objek `Map` input ke objek `SubscriptionFilter` ekspresi. `$util.transform.toSubscriptionFilter`Metode ini digunakan sebagai masukan ke `$extensions.setSubscriptionFilter()` ekstensi. Untuk informasi selengkapnya, lihat [Ekstensi](https://docs.aws.amazon.com/appsync/latest/devguide/extensions).   
Argumen pertama adalah objek `Map` masukan yang dikonversi ke objek `SubscriptionFilter` ekspresi, argumen kedua adalah nama `List` bidang yang akan diabaikan dalam objek `Map` masukan pertama, dan argumen ketiga adalah objek `Map` masukan dari aturan ketat yang disertakan saat membangun objek `SubscriptionFilter` ekspresi. Aturan ketat ini disertakan dalam objek `SubscriptionFilter` ekspresi sedemikian rupa sehingga setidaknya salah satu aturan akan dipenuhi untuk melewati filter berlangganan.

## Argumen filter langganan
<a name="subscription-filter-arguments"></a>

Tabel berikut menjelaskan bagaimana argumen utilitas berikut didefinisikan:
+ `$util.transform.toSubscriptionFilter(Map) : Map`
+ `$util.transform.toSubscriptionFilter(Map, List) : Map`
+ `$util.transform.toSubscriptionFilter(Map, List, Map) : Map`

------
#### [ Argument 1: Map ]

Argumen 1 adalah `Map` objek dengan nilai-nilai kunci berikut:
+ nama bidang
+ “dan”
+ “atau”

Untuk nama bidang sebagai kunci, kondisi pada entri bidang ini adalah dalam bentuk. `"operator" : "value"` 

Contoh berikut menunjukkan bagaimana entri dapat ditambahkan ke`Map`:

```
"field_name" : {
                    "operator1" : value             
               }

## We can have multiple conditions for the same field_name: 

"field_name" : {
                    "operator1" : value             
                    "operator2" : value
                    .
                    .
                    .                  
               }
```

Ketika sebuah bidang memiliki dua atau lebih kondisi di atasnya, semua kondisi ini dianggap menggunakan operasi OR.

Input juga `Map` dapat memiliki “dan” dan “atau” sebagai kunci, menyiratkan bahwa semua entri di dalamnya harus digabungkan menggunakan logika AND atau OR tergantung pada kuncinya. Nilai kunci “dan” dan “atau” mengharapkan berbagai kondisi.

```
"and" : [
            
            {
                "field_name1" : {
                    "operator1" : value             
                }
             },
             
             {
                "field_name2" : {
                    "operator1" : value             
                }
             },
             .
             .
        ].
```

Perhatikan bahwa Anda dapat bersarang “dan” dan “atau”. Artinya, Anda dapat memiliki sarang “dan” /"atau” di dalam blok “dan” /"atau” lainnya. Namun, ini tidak berfungsi untuk bidang sederhana.

```
"and" : [
            
            {
                "field_name1" : {
                    "operator" : value             
                }
             },
             
             {
                "or" : [
                            {
                                "field_name2" : {
                                    "operator" : value             
                                }
                            },
                            
                            {
                                "field_name3" : {
                                    "operator" : value             
                                }
                            }
              
                        ].
```

Contoh berikut menunjukkan masukan *argumen 1* menggunakan`$util.transform.toSubscriptionFilter(Map) : Map`.

**Masukan**

Argumen 1: Peta:

```
{
  "percentageUp": {
    "lte": 50,
    "gte": 20
  },
  "and": [
    {
      "title": {
        "ne": "Book1"
      }
    },
    {
      "downvotes": {
        "gt": 2000
      }
    }
  ],
  "or": [
    {
      "author": {
        "eq": "Admin"
      }
    },
    {
      "isPublished": {
        "eq": false
      }
    }
  ]
}
```

**Keluaran**

Hasilnya adalah `Map` objek:

```
{
  "filterGroup": [
    {
      "filters": [
        {
          "fieldName": "percentageUp",
          "operator": "lte",
          "value": 50
        },
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 2000
        },
        {
          "fieldName": "author",
          "operator": "eq",
          "value": "Admin"
        }
      ]
    },
    {
      "filters": [
        {
          "fieldName": "percentageUp",
          "operator": "lte",
          "value": 50
        },
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 2000
        },
        {
          "fieldName": "isPublished",
          "operator": "eq",
          "value": false
        }
      ]
    },
    {
      "filters": [
        {
          "fieldName": "percentageUp",
          "operator": "gte",
          "value": 20
        },
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 2000
        },
        {
          "fieldName": "author",
          "operator": "eq",
          "value": "Admin"
        }
      ]
    },
    {
      "filters": [
        {
          "fieldName": "percentageUp",
          "operator": "gte",
          "value": 20
        },
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 2000
        },
        {
          "fieldName": "isPublished",
          "operator": "eq",
          "value": false
        }
      ]
    }
  ]
}
```

------
#### [ Argument 2: List ]

Argumen 2 berisi nama `List` bidang yang tidak boleh dipertimbangkan dalam input `Map` (argumen 1) saat membangun objek `SubscriptionFilter` ekspresi. `List`Bisa juga kosong.

Contoh berikut menunjukkan masukan argumen 1 dan argumen 2 menggunakan`$util.transform.toSubscriptionFilter(Map, List) : Map`.

**Masukan**

Argumen 1: Peta:

```
{

  "percentageUp": {
    "lte": 50,
    "gte": 20
  },
  "and": [
    {
      "title": {
        "ne": "Book1"
      }
    },
    {
      "downvotes": {
        "gt": 20
      }
    }
  ],
  "or": [
    {
      "author": {
        "eq": "Admin"
      }
    },
    {
      "isPublished": {
        "eq": false
      }
    }
  ]
}
```

Argumen 2: Daftar:

```
["percentageUp", "author"]
```

**Keluaran**

Hasilnya adalah `Map` objek:

```
{
  "filterGroup": [
    {
      "filters": [
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 20
        },
        {
          "fieldName": "isPublished",
          "operator": "eq",
          "value": false
        }
      ]
    }
  ]
}
```

------
#### [ Argument 3: Map ]

Argumen 3 adalah `Map` objek yang memiliki nama bidang sebagai nilai kunci (tidak dapat memiliki “dan” atau “atau”). Untuk nama bidang sebagai kunci, kondisi pada bidang ini adalah entri dalam bentuk. `"operator" : "value"` Tidak seperti argumen 1, argumen 3 tidak dapat memiliki beberapa kondisi dalam kunci yang sama. Selain itu, argumen 3 tidak memiliki klausa “dan” atau “atau”, jadi tidak ada sarang yang terlibat juga.

Argumen 3 merupakan daftar aturan ketat, yang ditambahkan ke objek `SubscriptionFilter` ekspresi sehingga **setidaknya satu** dari kondisi ini terpenuhi untuk melewati filter.

```
{
  "fieldname1": {
    "operator": value
  },
  "fieldname2": {
    "operator": value
  }
}
.
.
.
```

Contoh berikut menunjukkan masukan dari *argumen 1*, *argumen 2*, dan *argumen 3* menggunakan`$util.transform.toSubscriptionFilter(Map, List, Map) : Map`.

**Masukan**

Argumen 1: Peta:

```
{
  "percentageUp": {
    "lte": 50,
    "gte": 20
  },
  "and": [
    {
      "title": {
        "ne": "Book1"
      }
    },
    {
      "downvotes": {
        "lt": 20
      }
    }
  ],
  "or": [
    {
      "author": {
        "eq": "Admin"
      }
    },
    {
      "isPublished": {
        "eq": false
      }
    }
  ]
}
```

Argumen 2: Daftar:

```
["percentageUp", "author"]
```

Argumen 3: Peta:

```
{
  "upvotes": {
    "gte": 250
  },
  "author": {
    "eq": "Person1"
  }
}
```

**Keluaran**

Hasilnya adalah `Map` objek:

```
{
  "filterGroup": [
    {
      "filters": [
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 20
        },
        {
          "fieldName": "isPublished",
          "operator": "eq",
          "value": false
        },
        {
          "fieldName": "upvotes",
          "operator": "gte",
          "value": 250
        }
      ]
    },
    {
      "filters": [
        {
          "fieldName": "title",
          "operator": "ne",
          "value": "Book1"
        },
        {
          "fieldName": "downvotes",
          "operator": "gt",
          "value": 20
        },
        {
          "fieldName": "isPublished",
          "operator": "eq",
          "value": false
        },
        {
          "fieldName": "author",
          "operator": "eq",
          "value": "Person1"
        }
      ]
    }
  ]
}
```

------

# Pembantu matematika di \$1util.math
<a name="math-helpers-in-util-math"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

 `$util.math`berisi metode untuk membantu operasi Matematika umum. 

## \$1util.math daftar utilitas
<a name="math-helpers-in-util-math-list"></a>

** `$util.math.roundNum(Double) : Integer` **  
Mengambil ganda dan membulatkannya ke bilangan bulat terdekat. 

** `$util.math.minVal(Double, Double) : Double` **  
Mengambil dua ganda dan mengembalikan nilai minimum antara dua ganda.

** `$util.math.maxVal(Double, Double) : Double` **  
Mengambil dua ganda dan mengembalikan nilai maksimum antara dua ganda.

** `$util.math.randomDouble() : Double` **  
Mengembalikan ganda acak antara 0 dan 1.  
Fungsi ini tidak boleh digunakan untuk apa pun yang membutuhkan keacakan entropi tinggi (misalnya, kriptografi).

** `$util.math.randomWithinRange(Integer, Integer) : Integer` **  
Mengembalikan nilai integer acak dalam rentang yang ditentukan, dengan argumen pertama menentukan nilai yang lebih rendah dari rentang dan argumen kedua menentukan nilai atas rentang.   
Fungsi ini tidak boleh digunakan untuk apa pun yang membutuhkan keacakan entropi tinggi (misalnya, kriptografi).

# Pembantu string di \$1util.str
<a name="str-helpers-in-util-str"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

 `$util.str`berisi metode untuk membantu operasi String umum. 

## \$1util.str daftar utils
<a name="str-helpers-in-util-str-list"></a>

** `$util.str.toUpper(String) : String` **  
Mengambil string dan mengubahnya menjadi huruf besar sepenuhnya. 

** `$util.str.toLower(String) : String` **  
Mengambil string dan mengubahnya menjadi huruf kecil sepenuhnya.

** `$util.str.toReplace(String, String, String) : String` **  
Mengganti substring dalam string dengan string lain. Argumen pertama menentukan string untuk melakukan operasi penggantian. Argumen kedua menentukan substring untuk menggantikan. Argumen ketiga menentukan string untuk menggantikan argumen kedua dengan. Berikut ini adalah contoh penggunaan utilitas ini:   

```
 INPUT:      $util.str.toReplace("hello world", "hello", "mellow")
 OUTPUT:     "mellow world"
```

** `$util.str.normalize(String, String) : String` **  
Menormalkan string menggunakan salah satu dari empat bentuk normalisasi unicode: NFC, NFD, NFKC, atau NFKD. Argumen pertama adalah string untuk menormalkan. Argumen kedua adalah “nfc”, “nfd”, “nfkc”, atau “nfkd” yang menentukan jenis normalisasi yang akan digunakan untuk proses normalisasi.

# Ekstensi
<a name="extensions"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

`$extensions`berisi serangkaian metode untuk membuat tindakan tambahan dalam resolver Anda.

## Ekstensi caching
<a name="caching-extensions-list"></a>

**`$extensions.evictFromApiCache(String, String, Object) : Object`**  
Mengusir item dari cache sisi AWS AppSync server. Argumen pertama adalah nama tipe. Argumen kedua adalah nama bidang. Argumen ketiga adalah objek yang berisi item pasangan kunci-nilai yang menentukan nilai kunci caching. Anda harus meletakkan item dalam objek dalam urutan yang sama dengan kunci caching di resolver cache. `cachingKey`  
Utilitas ini hanya berfungsi untuk mutasi, bukan kueri.

## Ekstensi berlangganan
<a name="subscription-extensions-list"></a>

**`$extensions.setSubscriptionFilter(filterJsonObject)`**  
Mendefinisikan filter langganan yang disempurnakan. Setiap acara pemberitahuan langganan dievaluasi terhadap filter langganan yang disediakan dan mengirimkan pemberitahuan kepada klien jika semua filter mengevaluasi. `true` Argumennya `filterJsonObject` seperti yang dijelaskan di bagian berikut.  
Anda dapat menggunakan metode ekstensi ini hanya dalam template pemetaan respons dari resolver langganan.

**`$extensions.setSubscriptionInvalidationFilter(filterJsonObject)`**  
Mendefinisikan filter pembatalan langganan. Filter langganan dievaluasi terhadap muatan pembatalan, lalu membatalkan langganan yang diberikan jika filter mengevaluasi. `true` Argumennya `filterJsonObject` seperti yang dijelaskan di bagian berikut.  
Anda dapat menggunakan metode ekstensi ini hanya dalam template pemetaan respons dari resolver langganan.

**`$extensions.invalidateSubscriptions(invalidationJsonObject)`**  
Digunakan untuk memulai pembatalan langganan dari mutasi. Argumennya `invalidationJsonObject` seperti yang dijelaskan di bagian berikut.  
Ekstensi ini hanya dapat digunakan dalam template pemetaan respons dari resolver mutasi.  
Anda hanya dapat menggunakan paling banyak lima panggilan `$extensions.invalidateSubscriptions()` metode unik dalam satu permintaan. Jika Anda melebihi batas ini, Anda akan menerima kesalahan GraphQL.

## Argumen: filterJsonObject
<a name="extensions-setSubscriptionInvalidationFilter"></a>

Objek JSON mendefinisikan filter langganan atau pembatalan. Ini adalah array filter dalam a`filterGroup`. Setiap filter adalah kumpulan filter individual.

```
{
    "filterGroup": [
        {
           "filters" : [
                 {
                    "fieldName" : "userId",
                    "operator" : "eq",
                    "value" : 1
                }
           ]
           
        },
        {
           "filters" : [
                {
                    "fieldName" : "group",
                    "operator" : "in",
                    "value" : ["Admin", "Developer"]
                }
           ]
           
        }
    ]
}
```

Setiap filter memiliki tiga atribut: 
+ `fieldName`- Bidang skema GraphQL.
+ `operator`— Jenis operator.
+ `value`— Nilai untuk dibandingkan dengan `fieldName` nilai notifikasi langganan.

Berikut ini adalah contoh penugasan atribut ini:

```
{
 "fieldName" : "severity",
 "operator" : "le",
 "value" : $context.result.severity
}
```

### Bidang: fieldName
<a name="extensions-fieldName"></a>

Jenis string `fieldName` mengacu pada bidang yang ditentukan dalam skema GraphQL yang cocok dengan payload notifikasi `fieldName` langganan. Ketika kecocokan ditemukan, bidang skema GraphQL dibandingkan dengan filter notifikasi `value` langganan. `value` Dalam contoh berikut, `fieldName` filter cocok dengan `service` bidang yang ditentukan dalam tipe GraphQL tertentu. Jika payload notifikasi berisi `service` bidang yang `value` setara dengan`AWS AppSync`, filter akan mengevaluasi: `true`

```
{
 "fieldName" : "service",
 "operator" : "eq",
 "value" : "AWS AppSync"
}
```

### Bidang: nilai
<a name="extensions-value"></a>

Nilai dapat berupa tipe yang berbeda berdasarkan operator:
+ Nomor tunggal atau Boolean
  + Contoh string:`"test"`, `"service"`
  + Contoh nomor:`1`,`2`, `45.75`
  + Contoh Boolean:`true`, `false`
+ Pasangan angka atau string
  + Contoh pasangan string:`["test1","test2"]`, `["start","end"]`
  + Contoh pasangan angka:`[1,4]`,`[67,89]`, `[12.45, 95.45]`
+ Array angka atau string
  + Contoh array string: `["test1","test2","test3","test4","test5"]`
  + Contoh array angka:`[1,2,3,4,5]`, `[12.11,46.13,45.09,12.54,13.89]`

### Bidang: operator
<a name="extensions-operator"></a>

String peka huruf besar/kecil dengan nilai yang mungkin berikut: 


| 
| 
| Operator | Deskripsi | Jenis nilai yang mungkin | 
| --- |--- |--- |
| persamaan | Sama | bilangan bulat, mengambang, string, Boolean | 
| ne | Tidak sama | bilangan bulat, mengambang, string, Boolean | 
| le | Kurang dari atau sama | bilangan bulat, mengambang, string | 
| lt | Kurang dari | bilangan bulat, mengambang, string | 
| ge | Lebih besar dari atau sama | bilangan bulat, mengambang, string | 
| gt | Lebih besar dari | bilangan bulat, mengambang, string | 
| mengandung | Memeriksa urutan atau nilai dalam set. | bilangan bulat, mengambang, string | 
| NotBerisi | Memeriksa tidak adanya urutan atau tidak adanya nilai dalam himpunan. | bilangan bulat, mengambang, string | 
| Mulailah dengan | Memeriksa awalan. | string | 
| in | Memeriksa elemen pencocokan yang ada dalam daftar. | Array integer, float, atau string | 
| TidakIn | Memeriksa elemen pencocokan yang tidak ada dalam daftar. | Array integer, float, atau string | 
| antara | Antara dua nilai | bilangan bulat, mengambang, string | 
| MengandungAny | Berisi elemen umum | bilangan bulat, mengambang, string | 

Tabel berikut menjelaskan bagaimana setiap operator digunakan dalam pemberitahuan berlangganan.

------
#### [ eq (equal) ]

`eq`Operator mengevaluasi `true` apakah nilai bidang notifikasi langganan cocok dan benar-benar sama dengan nilai filter. Dalam contoh berikut, filter mengevaluasi `true` apakah pemberitahuan langganan memiliki `service` bidang dengan nilai yang setara `AWS AppSync` dengan.

**Jenis nilai yang mungkin:** integer, float, string, Boolean

```
{
 "fieldName" : "service",
 "operator" : "eq",
 "value" : "AWS AppSync"
}
```

------
#### [ ne (not equal) ]

`ne`Operator mengevaluasi `true` apakah nilai bidang notifikasi langganan berbeda dari nilai filter. Dalam contoh berikut, filter mengevaluasi `true` apakah pemberitahuan langganan memiliki `service` bidang dengan nilai yang berbeda dari`AWS AppSync`.

**Jenis nilai yang mungkin:** integer, float, string, Boolean

```
{
 "fieldName" : "service",
 "operator" : "ne",
 "value" : "AWS AppSync"
}
```

------
#### [ le (less or equal) ]

`le`Operator mengevaluasi `true` apakah nilai bidang notifikasi langganan kurang dari atau sama dengan nilai filter. Dalam contoh berikut, filter mengevaluasi `true` apakah pemberitahuan langganan memiliki `size` bidang dengan nilai kurang dari atau sama dengan`5`.

**Jenis nilai yang mungkin:** integer, float, string

```
{
 "fieldName" : "size",
 "operator" : "le",
 "value" : 5
}
```

------
#### [ lt (less than) ]

`lt`Operator mengevaluasi `true` apakah nilai bidang notifikasi langganan lebih rendah dari nilai filter. Dalam contoh berikut, filter mengevaluasi `true` apakah pemberitahuan langganan memiliki `size` bidang dengan nilai lebih rendah dari`5`.

**Jenis nilai yang mungkin:** integer, float, string

```
{
 "fieldName" : "size",
 "operator" : "lt",
 "value" : 5
}
```

------
#### [ ge (greater or equal) ]

`ge`Operator mengevaluasi `true` apakah nilai bidang notifikasi langganan lebih besar dari atau sama dengan nilai filter. Dalam contoh berikut, filter mengevaluasi `true` apakah pemberitahuan langganan memiliki `size` bidang dengan nilai lebih besar dari atau sama dengan`5`.

**Jenis nilai yang mungkin:** integer, float, string

```
{
 "fieldName" : "size",
 "operator" : "ge",
 "value" : 5
}
```

------
#### [ gt (greater than) ]

`gt`Operator mengevaluasi `true` apakah nilai bidang notifikasi langganan lebih besar dari nilai filter. Dalam contoh berikut, filter mengevaluasi `true` apakah pemberitahuan langganan memiliki `size` bidang dengan nilai lebih besar dari`5`.

**Jenis nilai yang mungkin:** integer, float, string

```
{
 "fieldName" : "size",
 "operator" : "gt",
 "value" : 5
}
```

------
#### [ contains ]

`contains`Operator memeriksa substring, urutan, atau nilai dalam satu set atau item tunggal. Filter dengan `contains` operator mengevaluasi `true` apakah nilai bidang notifikasi langganan berisi nilai filter. Dalam contoh berikut, filter mengevaluasi `true` apakah pemberitahuan langganan memiliki `seats` bidang dengan nilai array yang berisi nilai`10`.

**Jenis nilai yang mungkin:** integer, float, string

```
{
 "fieldName" : "seats",
 "operator" : "contains",
 "value" : 10
}
```

Dalam contoh lain, filter mengevaluasi `true` apakah notifikasi langganan memiliki `event` bidang dengan `launch` substring.

```
{
 "fieldName" : "event",
 "operator" : "contains",
 "value" : "launch"
}
```

------
#### [ notContains ]

`notContains`Operator memeriksa tidak adanya substring, urutan, atau nilai dalam satu set atau item tunggal. Filter dengan `notContains` operator mengevaluasi `true` jika nilai bidang notifikasi langganan tidak berisi nilai filter. Dalam contoh berikut, filter mengevaluasi `true` apakah pemberitahuan langganan memiliki `seats` bidang dengan nilai array yang tidak mengandung nilai`10`.

**Jenis nilai yang mungkin:** integer, float, string

```
{
 "fieldName" : "seats",
 "operator" : "notContains",
 "value" : 10
}
```

Dalam contoh lain, filter mengevaluasi `true` apakah pemberitahuan langganan memiliki nilai `event` bidang tanpa `launch` sebagai urutannya.

```
{
 "fieldName" : "event",
 "operator" : "notContains",
 "value" : "launch"
}
```

------
#### [ beginsWith ]

`beginsWith`Operator memeriksa awalan dalam string. Filter yang berisi `beginsWith` operator mengevaluasi `true` apakah nilai bidang notifikasi langganan dimulai dengan nilai filter. Dalam contoh berikut, filter mengevaluasi `true` apakah pemberitahuan langganan memiliki `service` bidang dengan nilai yang dimulai dengan`AWS`.

**Jenis nilai yang mungkin:** string

```
{
 "fieldName" : "service",
 "operator" : "beginsWith",
 "value" : "AWS"
}
```

------
#### [ in ]

`in`Operator memeriksa elemen yang cocok dalam array. Filter yang berisi `in` operator mengevaluasi `true` apakah nilai bidang notifikasi langganan ada dalam larik. Dalam contoh berikut, filter mengevaluasi `true` apakah pemberitahuan langganan memiliki `severity` bidang dengan salah satu nilai yang ada dalam array:`[1,2,3]`.

**Jenis nilai yang mungkin:** Array integer, float, atau string

```
{
 "fieldName" : "severity",
 "operator" : "in",
 "value" : [1,2,3]
}
```

------
#### [ notIn ]

`notIn`Operator memeriksa elemen yang hilang dalam array. Filter yang berisi `notIn` operator mengevaluasi `true` jika nilai bidang notifikasi langganan tidak ada dalam larik. Dalam contoh berikut, filter mengevaluasi `true` apakah pemberitahuan langganan memiliki `severity` bidang dengan salah satu nilai yang tidak ada dalam array:`[1,2,3]`.

**Jenis nilai yang mungkin:** Array integer, float, atau string

```
{
 "fieldName" : "severity",
 "operator" : "notIn",
 "value" : [1,2,3]
}
```

------
#### [ between ]

`between`Operator memeriksa nilai antara dua angka atau string. Filter yang berisi `between` operator mengevaluasi `true` apakah nilai bidang notifikasi langganan berada di antara pasangan nilai filter. Dalam contoh berikut, filter mengevaluasi `true` apakah pemberitahuan langganan memiliki `severity` bidang dengan nilai`2`,`3`,`4`.

**Jenis nilai yang mungkin:** Sepasang integer, float, atau string

```
{
 "fieldName" : "severity",
 "operator" : "between",
 "value" : [1,5]
}
```

------
#### [ containsAny ]

`containsAny`Operator memeriksa elemen umum dalam array. Filter dengan `containsAny` operator mengevaluasi `true` apakah persimpangan bidang notifikasi langganan menetapkan nilai dan nilai set filter tidak kosong. Dalam contoh berikut, filter mengevaluasi `true` apakah pemberitahuan langganan memiliki `seats` bidang dengan nilai array yang berisi salah satu `10` atau`15`. Ini berarti bahwa filter akan mengevaluasi `true` apakah pemberitahuan langganan memiliki nilai `seats` bidang `[10,11]` atau`[15,20,30]`.

**Jenis nilai yang mungkin:** integer, float, atau string

```
{
 "fieldName" : "seats",
 "operator" : "containsAny",
 "value" : [10, 15]
}
```

------

### Logika DAN
<a name="extensions-AND-logic"></a>

Anda dapat menggabungkan beberapa filter menggunakan logika AND dengan mendefinisikan beberapa entri dalam `filters` objek dalam array. `filterGroup` Dalam contoh berikut, filter mengevaluasi `true` apakah pemberitahuan langganan memiliki `userId` bidang dengan nilai yang setara dengan `1` DAN nilai `group` bidang salah satu `Admin` atau`Developer`.

```
{
    "filterGroup": [
        {
           "filters" : [
                 {
                    "fieldName" : "userId",
                    "operator" : "eq",
                    "value" : 1
                },
                {
                    "fieldName" : "group",
                    "operator" : "in",
                    "value" : ["Admin", "Developer"]
                }
           ]
           
        }
    ]
}
```

### Logika ATAU
<a name="extensions-OR-logic"></a>

Anda dapat menggabungkan beberapa filter menggunakan logika OR dengan mendefinisikan beberapa objek filter dalam `filterGroup` array. Dalam contoh berikut, filter mengevaluasi `true` apakah pemberitahuan langganan memiliki `userId` bidang dengan nilai yang setara dengan `1` ATAU nilai `group` bidang dari salah satu `Admin` atau`Developer`.

```
{
    "filterGroup": [
        {
           "filters" : [
                 {
                    "fieldName" : "userId",
                    "operator" : "eq",
                    "value" : 1
                }
           ]
           
        },
        {
           "filters" : [
                {
                    "fieldName" : "group",
                    "operator" : "in",
                    "value" : ["Admin", "Developer"]
                }
           ]
           
        }
    ]
}
```

### Pengecualian
<a name="extensions-exceptions"></a>

Perhatikan bahwa ada beberapa batasan untuk menggunakan filter:
+ Dalam `filters` objek, bisa ada maksimal lima `fieldName` item unik per filter. Ini berarti Anda dapat menggabungkan maksimal lima `fieldName` objek individu menggunakan logika AND.
+ Bisa ada maksimum dua puluh nilai untuk `containsAny` operator.
+ Bisa ada maksimal lima nilai untuk `in` dan `notIn` operator.
+ Setiap string dapat maksimal 256 karakter.
+ Setiap perbandingan string peka huruf besar/kecil.
+ Pemfilteran objek bersarang memungkinkan hingga lima tingkat penyaringan bersarang.
+ Masing-masing `filterGroup` dapat memiliki maksimal 10`filters`. Ini berarti Anda dapat menggabungkan maksimal 10 `filters` menggunakan logika OR.
  + `in`Operator adalah kasus khusus logika OR. Dalam contoh berikut, ada dua`filters`:

    ```
    {
        "filterGroup": [
            {
               "filters" : [
                     {
                        "fieldName" : "userId",
                        "operator" : "eq",
                        "value" : 1
                    },
                    {
                        "fieldName" : "group",
                        "operator" : "in",
                        "value" : ["Admin", "Developer"]
                    }
               ]  
            }
        ]
    }
    ```

    Grup filter sebelumnya dievaluasi sebagai berikut dan dihitung menuju batas filter maksimum:

    ```
    {
        "filterGroup": [
            {
               "filters" : [
                     {
                        "fieldName" : "userId",
                        "operator" : "eq",
                        "value" : 1
                    },
                    {
                        "fieldName" : "group",
                        "operator" : "eq",
                        "value" : "Admin"
                    }
               ]  
            },
            {
               "filters" : [
                     {
                        "fieldName" : "userId",
                        "operator" : "eq",
                        "value" : 1
                    },
                    {
                        "fieldName" : "group",
                        "operator" : "eq",
                        "value" : "Developer"
                    }
               ]  
            }
        ]
    }
    ```

## Argumen: invalidationJsonObject
<a name="extensions-invalidationJsonObject"></a>

`invalidationJsonObject`Mendefinisikan sebagai berikut:
+ `subscriptionField`— Langganan skema GraphQL untuk membatalkan. Langganan tunggal, didefinisikan sebagai string di`subscriptionField`, dianggap untuk pembatalan.
+ `payload`— Daftar pasangan kunci-nilai yang digunakan sebagai input untuk membatalkan langganan jika filter pembatalan mengevaluasi terhadap nilainya. `true`

  Contoh berikut membatalkan klien yang berlangganan dan terhubung menggunakan `onUserDelete` langganan saat filter pembatalan yang ditentukan dalam resolver langganan mengevaluasi terhadap nilainya. `true` `payload`

  ```
  $extensions.invalidateSubscriptions({
          "subscriptionField": "onUserDelete",
          "payload": {
                  "group": "Developer"
                  "type" : "Full-Time"
        }
      })
  ```

# AWS AppSync referensi template pemetaan resolver untuk DynamoDB
<a name="resolver-mapping-template-reference-dynamodb"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

Fungsi AWS AppSync DynamoDB memungkinkan Anda menggunakan [GraphQL](https://graphql.org) untuk menyimpan dan mengambil data dalam tabel Amazon DynamoDB yang ada di akun Anda dengan memetakan permintaan GraphQL yang masuk ke dalam panggilan DynamoDB, lalu memetakan respons DynamoDB kembali ke GraphQL. Bagian ini menjelaskan penangan permintaan dan respons untuk operasi DynamoDB yang didukung:
+  [GetItem](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-resolver-mapping-template-reference-dynamodb-getitem.html)- GetItem Permintaan memungkinkan Anda memberi tahu fungsi DynamoDB untuk membuat GetItem permintaan ke DynamoDB, dan memungkinkan Anda untuk menentukan kunci item di DynamoDB dan apakah akan menggunakan pembacaan yang konsisten atau tidak.
+  [ PutItem ](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-resolver-mapping-template-reference-dynamodb-putitem.html)- Dokumen pemetaan PutItem permintaan memungkinkan Anda memberi tahu fungsi DynamoDB untuk membuat PutItem permintaan ke DynamoDB, dan memungkinkan Anda untuk menentukan kunci item di DynamoDB, isi lengkap item (terdiri dari kunci dan attributeValues), dan kondisi agar operasi berhasil.
+  [ UpdateItem ](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-resolver-mapping-template-reference-dynamodb-updateitem.html)- UpdateItem Permintaan memungkinkan Anda untuk memberi tahu fungsi DynamoDB untuk membuat UpdateItem permintaan ke DynamoDB dan memungkinkan Anda untuk menentukan kunci item di DynamoDB, ekspresi pembaruan yang menjelaskan cara memperbarui item di DynamoDB, dan kondisi agar operasi berhasil.
+  [ DeleteItem ](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-resolver-mapping-template-reference-dynamodb-deleteitem.html)- DeleteItem Permintaan memungkinkan Anda memberi tahu fungsi DynamoDB untuk membuat DeleteItem permintaan ke DynamoDB, dan memungkinkan Anda untuk menentukan kunci item di DynamoDB dan kondisi agar operasi berhasil.
+  [Query](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-resolver-mapping-template-reference-dynamodb-query.html) - Objek permintaan Query memungkinkan Anda memberi tahu penyelesai DynamoDB untuk membuat permintaan Query ke DynamoDB, dan memungkinkan Anda menentukan ekspresi kunci, indeks mana yang akan digunakan, filter tambahan, berapa banyak item yang akan dikembalikan, apakah akan menggunakan pembacaan yang konsisten, arah kueri (maju atau mundur), dan token pagination.
+  [Scan](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-resolver-mapping-template-reference-dynamodb-scan.html) - Permintaan Scan memungkinkan Anda memberi tahu fungsi DynamoDB untuk membuat permintaan Scan ke DynamoDB, dan memungkinkan Anda menentukan filter untuk mengecualikan hasil, indeks mana yang akan digunakan, berapa banyak item yang akan dikembalikan, apakah akan menggunakan pembacaan yang konsisten, token pagination, dan scan paralel.
+  [Sync](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-resolver-mapping-template-reference-dynamodb-sync.html) - Objek permintaan Sync memungkinkan Anda mengambil semua hasil dari tabel DynamoDB dan kemudian menerima hanya data yang diubah sejak kueri terakhir Anda (pembaruan delta). Permintaan sinkronisasi hanya dapat dilakukan ke sumber data DynamoDB berversi. Anda dapat menentukan filter untuk mengecualikan hasil, berapa banyak item yang akan dikembalikan, Token pagination, dan kapan operasi Sinkronisasi terakhir Anda dimulai.
+  [ BatchGetItem ](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-resolver-mapping-template-reference-dynamodb-batch-get-item.html)- Objek BatchGetItem permintaan memungkinkan Anda memberi tahu fungsi DynamoDB untuk membuat BatchGetItem permintaan ke DynamoDB untuk mengambil beberapa item, berpotensi di beberapa tabel. Untuk objek permintaan ini, Anda harus menentukan nama tabel untuk mengambil item dari dan kunci item yang akan diambil dari setiap tabel.
+  [ BatchDeleteItem ](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-resolver-mapping-template-reference-dynamodb-batch-delete-item.html)- Objek BatchDeleteItem permintaan memungkinkan Anda memberi tahu fungsi DynamoDB untuk membuat BatchWriteItem permintaan ke DynamoDB untuk menghapus beberapa item, berpotensi di beberapa tabel. Untuk objek permintaan ini, Anda harus menentukan nama tabel untuk menghapus item dari dan kunci item yang akan dihapus dari setiap tabel.
+  [ BatchPutItem ](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-resolver-mapping-template-reference-dynamodb-batch-put-item.html)- Objek BatchPutItem permintaan memungkinkan Anda memberi tahu fungsi DynamoDB untuk membuat BatchWriteItem permintaan ke DynamoDB untuk menempatkan beberapa item, berpotensi di beberapa tabel. Untuk objek permintaan ini, Anda harus menentukan nama tabel untuk memasukkan item dan item lengkap untuk dimasukkan ke dalam setiap tabel.
+  [ TransactGetItems ](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-resolver-mapping-template-reference-dynamodb-transact-get-items.html)- Objek TransactGetItems permintaan memungkinkan Anda untuk memberitahu fungsi DynamoDB untuk membuat TransactGetItems permintaan ke DynamoDB untuk mengambil beberapa item, berpotensi di beberapa tabel. Untuk objek permintaan ini, Anda harus menentukan nama tabel dari setiap item permintaan untuk mengambil item dari dan kunci setiap item permintaan untuk diambil dari setiap tabel.
+  [ TransactWriteItems ](https://docs.aws.amazon.com/appsync/latest/devguide/js-aws-appsync-resolver-reference-dynamodb-transact-write-items.html)- Objek TransactWriteItems permintaan memungkinkan Anda memberi tahu fungsi DynamoDB untuk membuat TransactWriteItems permintaan ke DynamoDB untuk menulis beberapa item, berpotensi ke beberapa tabel. Untuk objek permintaan ini, Anda harus menentukan nama tabel tujuan dari setiap item permintaan, operasi setiap item permintaan yang akan dilakukan, dan kunci dari setiap item permintaan untuk ditulis.
+  [Sistem tipe (pemetaan permintaan)](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.html) - Pelajari lebih lanjut tentang bagaimana pengetikan DynamoDB diintegrasikan ke dalam permintaan. AWS AppSync 
+  [Sistem tipe (pemetaan respons)](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses.html) - Pelajari lebih lanjut tentang cara jenis DynamoDB dikonversi secara otomatis ke GraphQL atau JSON dalam muatan respons.
+  [Filter](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-resolver-mapping-template-reference-dynamodb-filter.html) - Pelajari lebih lanjut tentang filter untuk operasi kueri dan pemindaian.
+  [Ekspresi kondisi](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-resolver-mapping-template-reference-dynamodb-condition-expressions.html) - Pelajari lebih lanjut tentang ekspresi kondisi untuk PutItem, UpdateItem, dan DeleteItem operasi.
+  [Ekspresi kondisi transaksi](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-resolver-mapping-template-reference-dynamodb-transaction-condition-expressions.html) - Pelajari lebih lanjut tentang ekspresi kondisi untuk TransactWriteItems operasi.
+  [Proyeksi](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-resolver-mapping-template-reference-dynamodb-projections.html) - Pelajari lebih lanjut tentang cara menentukan atribut dalam operasi baca.

# GetItem
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-getitem"></a>

Dokumen pemetaan `GetItem` permintaan memungkinkan Anda memberi tahu AWS AppSync DynamoDB resolver untuk membuat `GetItem` permintaan ke DynamoDB, dan memungkinkan Anda untuk menentukan:
+ Kunci item di DynamoDB
+ Apakah akan menggunakan bacaan yang konsisten atau tidak

Dokumen `GetItem` pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2017-02-28",
    "operation" : "GetItem",
    "key" : {
        "foo" : ... typed value,
        "bar" : ... typed value
    },
    "consistentRead" : true,
    "projection" : {
        ...
    }
}
```

Bidang didefinisikan sebagai berikut:

## GetItem bidang
<a name="getitem-list"></a>

### GetItem daftar bidang
<a name="getitem-list-col"></a>

 **`version`**   
Versi definisi template. `2017-02-28`dan `2018-05-29` saat ini didukung. Nilai ini diperlukan.

 **`operation`**   
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `GetItem` DynamoDB, ini harus diatur ke. `GetItem` Nilai ini diperlukan.

 **`key`**   
Kunci item di DynamoDB. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). Nilai ini diperlukan.

 **`consistentRead`**   
Apakah akan melakukan pembacaan yang sangat konsisten dengan DynamoDB atau tidak. Ini opsional, dan default ke. `false`

**`projection`**  
Proyeksi yang digunakan untuk menentukan atribut yang akan dikembalikan dari operasi DynamoDB. Untuk informasi selengkapnya tentang proyeksi, lihat [Proyeksi](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-projections). Bidang ini bersifat opsional.

Item yang dikembalikan dari DynamoDB secara otomatis diubah menjadi tipe primitif GraphQL dan JSON, dan tersedia dalam konteks pemetaan (). `$context.result`

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses.md)pemetaan respons).

Untuk informasi selengkapnya tentang template pemetaan respons, lihat Ringkasan template [pemetaan Resolver](resolver-mapping-template-reference-overview.md#aws-appsync-resolver-mapping-template-reference-overview).

## Contoh
<a name="example"></a>

Contoh berikut adalah template pemetaan untuk query GraphQL: `getThing(foo: String!, bar: String!)`

```
{
    "version" : "2017-02-28",
    "operation" : "GetItem",
    "key" : {
        "foo" : $util.dynamodb.toDynamoDBJson($ctx.args.foo),
        "bar" : $util.dynamodb.toDynamoDBJson($ctx.args.bar)
    },
    "consistentRead" : true
}
```

Untuk informasi selengkapnya tentang DynamoDB API, lihat `GetItem` dokumentasi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html) API.

# PutItem
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-putitem"></a>

Dokumen pemetaan `PutItem` permintaan memungkinkan Anda memberi tahu AWS AppSync DynamoDB resolver untuk membuat `PutItem` permintaan ke DynamoDB, dan memungkinkan Anda untuk menentukan hal berikut:
+ Kunci item di DynamoDB
+ Isi lengkap item (terdiri dari `key` dan`attributeValues`)
+ Kondisi agar operasi berhasil

Dokumen `PutItem` pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2018-05-29",
    "operation" : "PutItem",
    "customPartitionKey" : "foo",
    "populateIndexFields" : boolean value,
    "key": {
        "foo" : ... typed value,
        "bar" : ... typed value
    },
    "attributeValues" : {
        "baz" : ... typed value
    },
    "condition" : {
       ...
    },
    "_version" : 1
}
```

Bidang didefinisikan sebagai berikut:

## PutItem bidang
<a name="putitem-list"></a>

### PutItem daftar bidang
<a name="putitem-list-col"></a>

 **`version`**   
Versi definisi template. `2017-02-28`dan `2018-05-29` saat ini didukung. Nilai ini diperlukan.

 **`operation`**   
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `PutItem` DynamoDB, ini harus diatur ke. `PutItem` Nilai ini diperlukan.

 **`key`**   
Kunci item di DynamoDB. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). Nilai ini diperlukan.

 **`attributeValues`**   
Sisa atribut item yang akan dimasukkan ke dalam DynamoDB. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). Bidang ini bersifat opsional.

 **`condition`**   
Suatu kondisi untuk menentukan apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB. Jika tidak ada kondisi yang ditentukan, `PutItem` permintaan akan menimpa entri yang ada untuk item tersebut. Untuk informasi selengkapnya tentang kondisi, lihat [Ekspresi kondisi](aws-appsync-resolver-mapping-template-reference-dynamodb-condition-expressions.md). Nilai ini bersifat opsional.

 **`_version`**   
Nilai numerik yang mewakili versi item terbaru yang diketahui. Nilai ini bersifat opsional. Bidang ini digunakan untuk *Deteksi Konflik* dan hanya didukung pada sumber data berversi.

**`customPartitionKey`**  
*Saat diaktifkan, nilai string ini mengubah format `ds_sk` dan `ds_pk` catatan yang digunakan oleh tabel sinkronisasi delta saat pembuatan versi telah diaktifkan (untuk informasi selengkapnya, lihat [Deteksi konflik dan sinkronisasi](https://docs.aws.amazon.com/appsync/latest/devguide/conflict-detection-and-sync.html) di Panduan Pengembang AWS AppSync ).* Saat diaktifkan, pemrosesan `populateIndexFields` entri juga diaktifkan. Bidang ini bersifat opsional.

**`populateIndexFields`**  
Nilai boolean yang, ketika diaktifkan **bersama dengan `customPartitionKey`**, membuat entri baru untuk setiap catatan dalam tabel sinkronisasi delta, khususnya di kolom dan`gsi_ds_pk`. `gsi_ds_sk` Untuk informasi selengkapnya, lihat [Deteksi dan sinkronisasi konflik](https://docs.aws.amazon.com/appsync/latest/devguide/conflict-detection-and-sync.html) di *Panduan AWS AppSync Pengembang*. Bidang ini bersifat opsional. 

Item yang ditulis ke DynamoDB secara otomatis diubah menjadi tipe primitif GraphQL dan JSON dan tersedia dalam konteks pemetaan (). `$context.result`

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses.md)pemetaan respons).

Untuk informasi selengkapnya tentang template pemetaan respons, lihat Ringkasan template [pemetaan Resolver](resolver-mapping-template-reference-overview.md#aws-appsync-resolver-mapping-template-reference-overview).

## Contoh 1
<a name="example-1"></a>

Contoh berikut adalah template pemetaan untuk mutasi GraphQL. `updateThing(foo: String!, bar: String!, name: String!, version: Int!)`

Jika tidak ada item dengan kunci yang ditentukan, itu dibuat. Jika item sudah ada dengan kunci yang ditentukan, itu akan ditimpa.

```
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "foo" : $util.dynamodb.toDynamoDBJson($ctx.args.foo),
        "bar" : $util.dynamodb.toDynamoDBJson($ctx.args.bar)
    },
    "attributeValues" : {
        "name"    : $util.dynamodb.toDynamoDBJson($ctx.args.name),
        "version" : $util.dynamodb.toDynamoDBJson($ctx.args.version)
    }
}
```

## Contoh 2
<a name="example-2"></a>

Contoh berikut adalah template pemetaan untuk mutasi GraphQL. `updateThing(foo: String!, bar: String!, name: String!, expectedVersion: Int!)`

Contoh ini memeriksa untuk memastikan item yang saat ini di DynamoDB memiliki bidang yang disetel `version` ke. `expectedVersion`

```
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "foo" : $util.dynamodb.toDynamoDBJson($ctx.args.foo),
        "bar" : $util.dynamodb.toDynamoDBJson($ctx.args.bar)
    },
    "attributeValues" : {
        "name"    : $util.dynamodb.toDynamoDBJson($ctx.args.name),
        #set( $newVersion = $context.arguments.expectedVersion + 1 )
        "version" : $util.dynamodb.toDynamoDBJson($newVersion)
    },
    "condition" : {
        "expression" : "version = :expectedVersion",
        "expressionValues" : {
            ":expectedVersion" : $util.dynamodb.toDynamoDBJson($expectedVersion)
        }
    }
}
```

Untuk informasi selengkapnya tentang DynamoDB API, lihat `PutItem` dokumentasi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html) API.

# UpdateItem
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-updateitem"></a>

Dokumen pemetaan `UpdateItem` permintaan memungkinkan Anda untuk memberitahu AWS AppSync DynamoDB resolver untuk membuat `UpdateItem` permintaan ke DynamoDB dan memungkinkan Anda untuk menentukan yang berikut:
+ Kunci item di DynamoDB
+ Ekspresi pembaruan yang menjelaskan cara memperbarui item di DynamoDB
+ Kondisi agar operasi berhasil

Dokumen `UpdateItem` pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2018-05-29",
    "operation" : "UpdateItem",
    "customPartitionKey" : "foo",
    "populateIndexFields" : boolean value,
    "key": {
        "foo" : ... typed value,
        "bar" : ... typed value
    },
    "update" : {
        "expression" : "someExpression",
        "expressionNames" : {
           "#foo" : "foo"
       },
       "expressionValues" : {
           ":bar" : ... typed value
       }
    },
    "condition" : {
        ...
    },
    "_version" : 1
}
```

Bidang didefinisikan sebagai berikut:

## UpdateItem bidang
<a name="updateitem-list"></a>

### UpdateItem daftar bidang
<a name="updateitem-list-col"></a>

 **`version`**   
Versi definisi template. `2017-02-28`dan `2018-05-29` saat ini didukung. Nilai ini diperlukan.

 **`operation`**   
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `UpdateItem` DynamoDB, ini harus diatur ke. `UpdateItem` Nilai ini diperlukan.

 **`key`**   
Kunci item di DynamoDB. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). Nilai ini diperlukan.

 **`update`**   
`update`Bagian ini memungkinkan Anda menentukan ekspresi pembaruan yang menjelaskan cara memperbarui item di DynamoDB. Untuk informasi selengkapnya tentang cara menulis ekspresi pembaruan, lihat dokumentasi [DynamoDB UpdateExpressions ](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html). Bagian ini diperlukan.  
`update`Bagian ini memiliki tiga komponen:    
** `expression` **  
Ekspresi pembaruan. Nilai ini diperlukan.  
** `expressionNames` **  
Substitusi untuk placeholder *nama* atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci sesuai dengan placeholder nama yang digunakan dalam`expression`, dan nilainya harus berupa string yang sesuai dengan nama atribut item di DynamoDB. Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nama atribut ekspresi yang digunakan dalam. `expression`  
** `expressionValues` **  
Substitusi untuk placeholder *nilai* atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci sesuai dengan placeholder nilai yang digunakan dalam`expression`, dan nilainya harus berupa nilai yang diketik. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). Ini harus ditentukan. Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nilai atribut ekspresi yang digunakan dalam. `expression`

 **`condition`**   
Suatu kondisi untuk menentukan apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB. Jika tidak ada kondisi yang ditentukan, `UpdateItem` permintaan akan memperbarui entri yang ada terlepas dari statusnya saat ini. Untuk informasi selengkapnya tentang kondisi, lihat [Ekspresi kondisi](aws-appsync-resolver-mapping-template-reference-dynamodb-condition-expressions.md). Nilai ini bersifat opsional.

 **`_version`**   
Nilai numerik yang mewakili versi item terbaru yang diketahui. Nilai ini bersifat opsional. Bidang ini digunakan untuk *Deteksi Konflik* dan hanya didukung pada sumber data berversi.

**`customPartitionKey`**  
*Saat diaktifkan, nilai string ini mengubah format `ds_sk` dan `ds_pk` catatan yang digunakan oleh tabel sinkronisasi delta saat pembuatan versi telah diaktifkan (untuk informasi selengkapnya, lihat [Deteksi konflik dan sinkronisasi](https://docs.aws.amazon.com/appsync/latest/devguide/conflict-detection-and-sync.html) di Panduan Pengembang AWS AppSync ).* Saat diaktifkan, pemrosesan `populateIndexFields` entri juga diaktifkan. Bidang ini bersifat opsional.

**`populateIndexFields`**  
Nilai boolean yang, ketika diaktifkan **bersama dengan `customPartitionKey`**, membuat entri baru untuk setiap catatan dalam tabel sinkronisasi delta, khususnya di kolom dan`gsi_ds_pk`. `gsi_ds_sk` Untuk informasi selengkapnya, lihat [Deteksi dan sinkronisasi konflik](https://docs.aws.amazon.com/appsync/latest/devguide/conflict-detection-and-sync.html) di *Panduan AWS AppSync Pengembang*. Bidang ini bersifat opsional.

Item yang diperbarui di DynamoDB secara otomatis diubah menjadi tipe primitif GraphQL dan JSON dan tersedia dalam konteks pemetaan (). `$context.result`

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses.md)pemetaan respons).

Untuk informasi selengkapnya tentang template pemetaan respons, lihat Ringkasan template [pemetaan Resolver](resolver-mapping-template-reference-overview.md#aws-appsync-resolver-mapping-template-reference-overview).

## Contoh 1
<a name="id3"></a>

Contoh berikut adalah template pemetaan untuk mutasi GraphQL. `upvote(id: ID!)`

Dalam contoh ini, item di DynamoDB memiliki `version` dan `upvotes` bidangnya bertambah 1.

```
{
    "version" : "2017-02-28",
    "operation" : "UpdateItem",
    "key" : {
        "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id)
    },
    "update" : {
        "expression" : "ADD #votefield :plusOne, version :plusOne",
        "expressionNames" : {
            "#votefield" : "upvotes"
        },
        "expressionValues" : {
            ":plusOne" : { "N" : 1 }
        }
    }
}
```

## Contoh 2
<a name="id4"></a>

Contoh berikut adalah template pemetaan untuk mutasi GraphQL. `updateItem(id: ID!, title: String, author: String, expectedVersion: Int!)`

Ini adalah contoh kompleks yang memeriksa argumen dan secara dinamis menghasilkan ekspresi pembaruan yang hanya mencakup argumen yang telah disediakan oleh klien. Misalnya, jika `title` dan `author` dihilangkan, mereka tidak diperbarui. Jika argumen ditentukan tetapi nilainya`null`, maka bidang itu dihapus dari objek di DynamoDB. Akhirnya, operasi memiliki kondisi, yang memverifikasi apakah item saat ini di DynamoDB memiliki `version` bidang yang disetel ke: `expectedVersion`

```
{
    "version" : "2017-02-28",

    "operation" : "UpdateItem",

    "key" : {
        "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id)
    },

    ## Set up some space to keep track of things we're updating **
    #set( $expNames  = {} )
    #set( $expValues = {} )
    #set( $expSet = {} )
    #set( $expAdd = {} )
    #set( $expRemove = [] )

    ## Increment "version" by 1 **
    $!{expAdd.put("version", ":newVersion")}
    $!{expValues.put(":newVersion", { "N" : 1 })}

    ## Iterate through each argument, skipping "id" and "expectedVersion" **
    #foreach( $entry in $context.arguments.entrySet() )
        #if( $entry.key != "id" && $entry.key != "expectedVersion" )
            #if( (!$entry.value) && ("$!{entry.value}" == "") )
                ## If the argument is set to "null", then remove that attribute from the item in DynamoDB **

                #set( $discard = ${expRemove.add("#${entry.key}")} )
                $!{expNames.put("#${entry.key}", "$entry.key")}
            #else
                ## Otherwise set (or update) the attribute on the item in DynamoDB **

                $!{expSet.put("#${entry.key}", ":${entry.key}")}
                $!{expNames.put("#${entry.key}", "$entry.key")}

                #if( $entry.key == "ups" || $entry.key == "downs" )
                    $!{expValues.put(":${entry.key}", { "N" : $entry.value })}
                #else
                    $!{expValues.put(":${entry.key}", { "S" : "${entry.value}" })}
                #end
            #end
        #end
    #end

    ## Start building the update expression, starting with attributes we're going to SET **
    #set( $expression = "" )
    #if( !${expSet.isEmpty()} )
        #set( $expression = "SET" )
        #foreach( $entry in $expSet.entrySet() )
            #set( $expression = "${expression} ${entry.key} = ${entry.value}" )
            #if ( $foreach.hasNext )
                #set( $expression = "${expression}," )
            #end
        #end
    #end

    ## Continue building the update expression, adding attributes we're going to ADD **
    #if( !${expAdd.isEmpty()} )
        #set( $expression = "${expression} ADD" )
        #foreach( $entry in $expAdd.entrySet() )
            #set( $expression = "${expression} ${entry.key} ${entry.value}" )
            #if ( $foreach.hasNext )
                #set( $expression = "${expression}," )
            #end
        #end
    #end

    ## Continue building the update expression, adding attributes we're going to REMOVE **
    #if( !${expRemove.isEmpty()} )
        #set( $expression = "${expression} REMOVE" )

        #foreach( $entry in $expRemove )
            #set( $expression = "${expression} ${entry}" )
            #if ( $foreach.hasNext )
                #set( $expression = "${expression}," )
            #end
        #end
    #end

    ## Finally, write the update expression into the document, along with any expressionNames and expressionValues **
    "update" : {
        "expression" : "${expression}"
        #if( !${expNames.isEmpty()} )
            ,"expressionNames" : $utils.toJson($expNames)
        #end
        #if( !${expValues.isEmpty()} )
            ,"expressionValues" : $utils.toJson($expValues)
        #end
    },

    "condition" : {
        "expression"       : "version = :expectedVersion",
        "expressionValues" : {
            ":expectedVersion" : $util.dynamodb.toDynamoDBJson($ctx.args.expectedVersion)
        }
    }
}
```

Untuk informasi selengkapnya tentang DynamoDB API, lihat `UpdateItem` dokumentasi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html) API.

# DeleteItem
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-deleteitem"></a>

Dokumen pemetaan `DeleteItem` permintaan memungkinkan Anda memberi tahu AWS AppSync DynamoDB resolver untuk membuat `DeleteItem` permintaan ke DynamoDB, dan memungkinkan Anda untuk menentukan hal berikut:
+ Kunci item di DynamoDB
+ Kondisi agar operasi berhasil

Dokumen `DeleteItem` pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2018-05-29",
    "operation" : "DeleteItem",
    "customPartitionKey" : "foo",
    "populateIndexFields" : boolean value,
    "key": {
        "foo" : ... typed value,
        "bar" : ... typed value
    },
    "condition" : {
        ...
    },
    "_version" : 1
}
```

Bidang didefinisikan sebagai berikut:

## DeleteItem bidang
<a name="deleteitem-list"></a>

### DeleteItem daftar bidang
<a name="deleteitem-list-col"></a>

** `version` **  
Versi definisi template. `2017-02-28`dan `2018-05-29` saat ini didukung. Nilai ini diperlukan.

** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `DeleteItem` DynamoDB, ini harus diatur ke. `DeleteItem` Nilai ini diperlukan.

** `key` **  
Kunci item di DynamoDB. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). Nilai ini diperlukan.

** `condition` **  
Suatu kondisi untuk menentukan apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB. Jika tidak ada kondisi yang ditentukan, `DeleteItem` permintaan menghapus item terlepas dari keadaan saat ini. Untuk informasi selengkapnya tentang kondisi, lihat [Ekspresi kondisi](aws-appsync-resolver-mapping-template-reference-dynamodb-condition-expressions.md). Nilai ini bersifat opsional.

** `_version` **  
Nilai numerik yang mewakili versi item terbaru yang diketahui. Nilai ini bersifat opsional. Bidang ini digunakan untuk *Deteksi Konflik* dan hanya didukung pada sumber data berversi.

**`customPartitionKey`**  
*Saat diaktifkan, nilai string ini mengubah format `ds_sk` dan `ds_pk` catatan yang digunakan oleh tabel sinkronisasi delta saat pembuatan versi telah diaktifkan (untuk informasi selengkapnya, lihat [Deteksi konflik dan sinkronisasi](https://docs.aws.amazon.com/appsync/latest/devguide/conflict-detection-and-sync.html) di Panduan Pengembang AWS AppSync ).* Saat diaktifkan, pemrosesan `populateIndexFields` entri juga diaktifkan. Bidang ini bersifat opsional.

**`populateIndexFields`**  
Nilai boolean yang, ketika diaktifkan **bersama dengan `customPartitionKey`**, membuat entri baru untuk setiap catatan dalam tabel sinkronisasi delta, khususnya di kolom dan`gsi_ds_pk`. `gsi_ds_sk` Untuk informasi selengkapnya, lihat [Deteksi dan sinkronisasi konflik](https://docs.aws.amazon.com/appsync/latest/devguide/conflict-detection-and-sync.html) di *Panduan AWS AppSync Pengembang*. Bidang ini bersifat opsional. 

Item yang dihapus dari DynamoDB secara otomatis diubah menjadi tipe primitif GraphQL dan JSON dan tersedia dalam konteks pemetaan (). `$context.result`

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses.md)pemetaan respons).

Untuk informasi selengkapnya tentang template pemetaan respons, lihat Ringkasan template [pemetaan Resolver](resolver-mapping-template-reference-overview.md#aws-appsync-resolver-mapping-template-reference-overview).

## Contoh 1
<a name="id6"></a>

Contoh berikut adalah template pemetaan untuk mutasi GraphQL. `deleteItem(id: ID!)` Jika ada item dengan ID ini, item tersebut akan dihapus.

```
{
    "version" : "2017-02-28",
    "operation" : "DeleteItem",
    "key" : {
        "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id)
    }
}
```

## Contoh 2
<a name="id7"></a>

Contoh berikut adalah template pemetaan untuk mutasi GraphQL. `deleteItem(id: ID!, expectedVersion: Int!)` Jika item ada dengan ID ini, itu akan dihapus, tetapi hanya jika `version` bidangnya disetel ke`expectedVersion`:

```
{
    "version" : "2017-02-28",
    "operation" : "DeleteItem",
    "key" : {
        "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id)
    },
    "condition" : {
        "expression"       : "attribute_not_exists(id) OR version = :expectedVersion",
        "expressionValues" : {
            ":expectedVersion" : $util.dynamodb.toDynamoDBJson($expectedVersion)
        }
    }
}
```

Untuk informasi selengkapnya tentang DynamoDB API, lihat `DeleteItem` dokumentasi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DeleteItem.html) API.

# Kueri
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-query"></a>

Dokumen pemetaan `Query` permintaan memungkinkan Anda memberi tahu AWS AppSync DynamoDB resolver untuk membuat `Query` permintaan ke DynamoDB, dan memungkinkan Anda untuk menentukan hal berikut:
+ Ekspresi kunci
+ Indeks mana yang akan digunakan
+ Filter tambahan
+ Berapa banyak item yang akan dikembalikan
+ Apakah akan menggunakan pembacaan yang konsisten
+ arah kueri (maju atau mundur)
+ Token pagination

Dokumen `Query` pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2017-02-28",
    "operation" : "Query",
    "query" : {
        "expression" : "some expression",
        "expressionNames" : {
            "#foo" : "foo"
        },
        "expressionValues" : {
            ":bar" : ... typed value
        }
    },
    "index" : "fooIndex",
    "nextToken" : "a pagination token",
    "limit" : 10,
    "scanIndexForward" : true,
    "consistentRead" : false,
    "select" : "ALL_ATTRIBUTES" | "ALL_PROJECTED_ATTRIBUTES" | "SPECIFIC_ATTRIBUTES",
    "filter" : {
        ...
    },
    "projection" : {
        ...
    }
}
```

Bidang didefinisikan sebagai berikut:

## Bidang kueri
<a name="query-list"></a>

### Daftar bidang kueri
<a name="query-list-col"></a>

** `version` **  
Versi definisi template. `2017-02-28`dan `2018-05-29` saat ini didukung. Nilai ini diperlukan.

** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `Query` DynamoDB, ini harus diatur ke. `Query` Nilai ini diperlukan.

** `query` **  
`query`Bagian ini memungkinkan Anda menentukan ekspresi kondisi kunci yang menjelaskan item mana yang akan diambil dari DynamoDB. Untuk informasi selengkapnya tentang cara menulis ekspresi kondisi kunci, lihat dokumentasi [DynamoDB KeyConditions ](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.KeyConditions.html). Bagian ini harus ditentukan.    
** `expression` **  
Ekspresi kueri. Bidang ini harus ditentukan.  
** `expressionNames` **  
Substitusi untuk placeholder *nama* atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci sesuai dengan placeholder nama yang digunakan dalam`expression`, dan nilainya harus berupa string yang sesuai dengan nama atribut item di DynamoDB. Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nama atribut ekspresi yang digunakan dalam. `expression`  
** `expressionValues` **  
Substitusi untuk placeholder *nilai* atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci sesuai dengan placeholder nilai yang digunakan dalam`expression`, dan nilainya harus berupa nilai yang diketik. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). Nilai ini diperlukan. Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nilai atribut ekspresi yang digunakan dalam. `expression`

** `filter` **  
Filter tambahan yang dapat digunakan untuk memfilter hasil dari DynamoDB sebelum dikembalikan. Untuk informasi selengkapnya tentang filter, lihat [Menyaring](aws-appsync-resolver-mapping-template-reference-dynamodb-filter.md). Bidang ini bersifat opsional.

** `index` **  
Nama indeks untuk query. Operasi query DynamoDB memungkinkan Anda untuk memindai Indeks Sekunder Lokal dan Indeks Sekunder Global selain indeks kunci utama untuk kunci hash. Jika ditentukan, ini memberitahu DynamoDB untuk query indeks tertentu. Jika dihilangkan, indeks kunci utama ditanyakan.

** `nextToken` **  
Token pagination untuk melanjutkan kueri sebelumnya. Ini akan diperoleh dari kueri sebelumnya. Bidang ini bersifat opsional.

** `limit` **  
Jumlah maksimum item untuk dievaluasi (tidak selalu merupakan jumlah item yang cocok). Bidang ini bersifat opsional.

** `scanIndexForward` **  
Boolean yang menunjukkan apakah akan melakukan kueri maju atau mundur. Bidang ini opsional, dan defaultnya. `true`

** `consistentRead` **  
Boolean yang menunjukkan apakah akan menggunakan pembacaan yang konsisten saat menanyakan DynamoDB. Bidang ini opsional, dan defaultnya. `false`

** `select` **  
Secara default, AWS AppSync DynamoDB resolver hanya mengembalikan atribut yang diproyeksikan ke dalam indeks. Jika lebih banyak atribut diperlukan, Anda dapat mengatur bidang ini. Bidang ini bersifat opsional. Nilai yang didukung adalah:    
** `ALL_ATTRIBUTES` **  
Mengembalikan semua atribut item dari tabel tertentu atau indeks. Jika Anda menanyakan indeks sekunder lokal, DynamoDB mengambil seluruh item dari tabel induk untuk setiap item yang cocok dalam indeks. Jika indeks dikonfigurasi untuk memproyeksikan semua atribut item, semua data dapat diperoleh dari indeks sekunder lokal dan tidak diperlukan pengambilan.  
** `ALL_PROJECTED_ATTRIBUTES` **  
Diizinkan hanya saat menanyakan indeks. Mengambil semua atribut yang telah diproyeksikan ke dalam indeks. Jika indeks dikonfigurasi untuk memproyeksikan semua atribut, nilai pengembalian ini setara dengan menentukan`ALL_ATTRIBUTES`.  
**`SPECIFIC_ATTRIBUTES`**  
Mengembalikan hanya atribut yang tercantum dalam `projection`'s`expression`. Nilai pengembalian ini setara dengan menentukan `projection`'s `expression` tanpa menentukan nilai apa pun untuk. `Select`

**`projection`**  
Proyeksi yang digunakan untuk menentukan atribut yang akan dikembalikan dari operasi DynamoDB. Untuk informasi selengkapnya tentang proyeksi, lihat [Proyeksi](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-projections). Bidang ini bersifat opsional.

Hasil dari DynamoDB secara otomatis diubah menjadi tipe primitif GraphQL dan JSON dan tersedia dalam konteks pemetaan (). `$context.result`

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses.md)pemetaan respons).

Untuk informasi selengkapnya tentang template pemetaan respons, lihat Ringkasan template [pemetaan Resolver](resolver-mapping-template-reference-overview.md#aws-appsync-resolver-mapping-template-reference-overview).

Hasilnya memiliki struktur sebagai berikut:

```
{
    items = [ ... ],
    nextToken = "a pagination token",
    scannedCount = 10
}
```

Bidang didefinisikan sebagai berikut:

** `items` **  
Daftar yang berisi item yang dikembalikan oleh query DynamoDB.

** `nextToken` **  
Jika mungkin ada lebih banyak hasil, `nextToken` berisi token pagination yang dapat Anda gunakan dalam permintaan lain. Perhatikan bahwa AWS AppSync mengenkripsi dan mengaburkan token pagination yang dikembalikan dari DynamoDB. Ini mencegah data tabel Anda bocor secara tidak sengaja ke penelepon. Perhatikan juga bahwa token pagination ini tidak dapat digunakan di berbagai resolver.

** `scannedCount` **  
Jumlah item yang cocok dengan ekspresi kondisi kueri, sebelum ekspresi filter (jika ada) diterapkan.

## Contoh
<a name="id9"></a>

Contoh berikut adalah template pemetaan untuk query GraphQL. `getPosts(owner: ID!)`

Dalam contoh ini, indeks sekunder global pada tabel ditanyakan untuk mengembalikan semua posting yang dimiliki oleh ID yang ditentukan.

```
{
    "version" : "2017-02-28",
    "operation" : "Query",
    "query" : {
        "expression" : "ownerId = :ownerId",
        "expressionValues" : {
            ":ownerId" : $util.dynamodb.toDynamoDBJson($context.arguments.owner)
        }
    },
    "index" : "owner-index"
}
```

Untuk informasi selengkapnya tentang DynamoDB API, lihat `Query` dokumentasi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html) API.

# Scan
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-scan"></a>

Dokumen pemetaan `Scan` permintaan memungkinkan Anda memberi tahu AWS AppSync DynamoDB resolver untuk membuat `Scan` permintaan ke DynamoDB, dan memungkinkan Anda untuk menentukan hal berikut:
+ Filter untuk mengecualikan hasil
+ Indeks mana yang akan digunakan
+ Berapa banyak item yang akan dikembalikan
+ Apakah akan menggunakan pembacaan yang konsisten
+ Token pagination
+ Pemindaian paralel

Dokumen `Scan` pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2017-02-28",
    "operation" : "Scan",
    "index" : "fooIndex",
    "limit" : 10,
    "consistentRead" : false,
    "nextToken" : "aPaginationToken",
    "totalSegments" : 10,
    "segment" : 1,
    "filter" : {
        ...
    },
    "projection" : {
        ...
    }
}
```

Bidang didefinisikan sebagai berikut:

## Bidang pemindaian
<a name="scan-list"></a>

### Pindai daftar bidang
<a name="scan-list-col"></a>

** `version` **  
Versi definisi template. `2017-02-28`dan `2018-05-29` saat ini didukung. Nilai ini diperlukan.

** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `Scan` DynamoDB, ini harus diatur ke. `Scan` Nilai ini diperlukan.

** `filter` **  
Filter yang dapat digunakan untuk memfilter hasil dari DynamoDB sebelum dikembalikan. Untuk informasi selengkapnya tentang filter, lihat [Menyaring](aws-appsync-resolver-mapping-template-reference-dynamodb-filter.md). Bidang ini bersifat opsional.

** `index` **  
Nama indeks untuk query. Operasi query DynamoDB memungkinkan Anda untuk memindai Indeks Sekunder Lokal dan Indeks Sekunder Global selain indeks kunci utama untuk kunci hash. Jika ditentukan, ini memberitahu DynamoDB untuk query indeks tertentu. Jika dihilangkan, indeks kunci utama ditanyakan.

** `limit` **  
Jumlah maksimum item untuk dievaluasi pada satu waktu. Bidang ini bersifat opsional.

** `consistentRead` **  
Boolean yang menunjukkan apakah akan menggunakan pembacaan yang konsisten saat menanyakan DynamoDB. Bidang ini opsional, dan defaultnya. `false`

** `nextToken` **  
Token pagination untuk melanjutkan kueri sebelumnya. Ini akan diperoleh dari kueri sebelumnya. Bidang ini bersifat opsional.

** `select` **  
Secara default, AWS AppSync DynamoDB resolver hanya mengembalikan atribut apa pun yang diproyeksikan ke dalam indeks. Jika lebih banyak atribut diperlukan, maka bidang ini dapat diatur. Bidang ini bersifat opsional. Nilai yang didukung adalah:    
** `ALL_ATTRIBUTES` **  
Mengembalikan semua atribut item dari tabel tertentu atau indeks. Jika Anda menanyakan indeks sekunder lokal, DynamoDB mengambil seluruh item dari tabel induk untuk setiap item yang cocok dalam indeks. Jika indeks dikonfigurasi untuk memproyeksikan semua atribut item, semua data dapat diperoleh dari indeks sekunder lokal dan tidak diperlukan pengambilan.  
** `ALL_PROJECTED_ATTRIBUTES` **  
Diizinkan hanya saat menanyakan indeks. Mengambil semua atribut yang telah diproyeksikan ke dalam indeks. Jika indeks dikonfigurasi untuk memproyeksikan semua atribut, nilai pengembalian ini setara dengan menentukan`ALL_ATTRIBUTES`.  
**`SPECIFIC_ATTRIBUTES`**  
Mengembalikan hanya atribut yang tercantum dalam `projection`'s`expression`. Nilai pengembalian ini setara dengan menentukan `projection`'s `expression` tanpa menentukan nilai apa pun untuk. `Select`

** `totalSegments` **  
Jumlah segmen untuk mempartisi tabel dengan saat melakukan pemindaian paralel. Bidang ini opsional, tetapi harus ditentukan jika `segment` ditentukan.

** `segment` **  
Segmen tabel dalam operasi ini saat melakukan pemindaian paralel. Bidang ini opsional, tetapi harus ditentukan jika `totalSegments` ditentukan.

**`projection`**  
Proyeksi yang digunakan untuk menentukan atribut yang akan dikembalikan dari operasi DynamoDB. Untuk informasi selengkapnya tentang proyeksi, lihat [Proyeksi](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-projections). Bidang ini bersifat opsional.

Hasil yang dikembalikan oleh pemindaian DynamoDB secara otomatis diubah menjadi tipe primitif GraphQL dan JSON dan tersedia dalam konteks pemetaan (). `$context.result`

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses.md)pemetaan respons).

Untuk informasi selengkapnya tentang template pemetaan respons, lihat Ringkasan template [pemetaan Resolver](resolver-mapping-template-reference-overview.md#aws-appsync-resolver-mapping-template-reference-overview).

Hasilnya memiliki struktur sebagai berikut:

```
{
    items = [ ... ],
    nextToken = "a pagination token",
    scannedCount = 10
}
```

Bidang didefinisikan sebagai berikut:

** `items` **  
Daftar yang berisi item yang dikembalikan oleh pemindaian DynamoDB.

** `nextToken` **  
Jika mungkin ada lebih banyak hasil, `nextToken` berisi token pagination yang dapat Anda gunakan dalam permintaan lain. AWS AppSync mengenkripsi dan mengaburkan token pagination yang dikembalikan dari DynamoDB. Ini mencegah data tabel Anda bocor secara tidak sengaja ke penelepon. Selain itu, token pagination ini tidak dapat digunakan di berbagai resolver.

** `scannedCount` **  
Jumlah item yang diambil oleh DynamoDB sebelum ekspresi filter (jika ada) diterapkan.

## Contoh 1
<a name="id11"></a>

Contoh berikut adalah template pemetaan untuk query GraphQL:. `allPosts`

Dalam contoh ini, semua entri dalam tabel dikembalikan.

```
{
    "version" : "2017-02-28",
    "operation" : "Scan"
}
```

## Contoh 2
<a name="id12"></a>

Contoh berikut adalah template pemetaan untuk query GraphQL:. `postsMatching(title: String!)`

Dalam contoh ini, semua entri dalam tabel dikembalikan di mana judul dimulai dengan `title` argumen.

```
{
    "version" : "2017-02-28",
    "operation" : "Scan",
    "filter" : {
        "expression" : "begins_with(title, :title)",
        "expressionValues" : {
            ":title" : $util.dynamodb.toDynamoDBJson($context.arguments.title)
        },
    }
}
```

Untuk informasi selengkapnya tentang DynamoDB API, lihat `Scan` dokumentasi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Scan.html) API.

# Sinkronkan
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-sync"></a>

Dokumen pemetaan `Sync` permintaan memungkinkan Anda mengambil semua hasil dari tabel DynamoDB dan kemudian hanya menerima data yang diubah sejak kueri terakhir Anda (pembaruan delta). `Sync`permintaan hanya dapat dibuat ke sumber data DynamoDB berversi. Anda dapat menentukan sebagai berikut:
+ Filter untuk mengecualikan hasil
+ Berapa banyak item yang akan dikembalikan
+ Token Paginasi
+ Ketika `Sync` operasi terakhir Anda dimulai

Dokumen `Sync` pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2018-05-29",
    "operation" : "Sync",
    "basePartitionKey": "Base Tables PartitionKey",
    "deltaIndexName": "delta-index-name",
    "limit" : 10,
    "nextToken" : "aPaginationToken",
    "lastSync" :  1550000000000,
    "filter" : {
        ...
    }
}
```

Bidang didefinisikan sebagai berikut:

## Bidang sinkronisasi
<a name="sync-list"></a>

### Daftar bidang sinkronisasi
<a name="sync-list-col"></a>

** `version` **  
Versi definisi template. Hanya saat `2018-05-29` ini didukung. Nilai ini diperlukan.

** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan `Sync` operasi, ini harus diatur ke`Sync`. Nilai ini diperlukan.

** `filter` **  
Filter yang dapat digunakan untuk memfilter hasil dari DynamoDB sebelum dikembalikan. Untuk informasi selengkapnya tentang filter, lihat [Menyaring](aws-appsync-resolver-mapping-template-reference-dynamodb-filter.md). Bidang ini bersifat opsional.

** `limit` **  
Jumlah maksimum item untuk dievaluasi pada satu waktu. Bidang ini bersifat opsional. Jika dihilangkan, batas default akan diatur ke `100` item. Nilai maksimum untuk bidang ini adalah `1000` item.

** `nextToken` **  
Token pagination untuk melanjutkan kueri sebelumnya. Ini akan diperoleh dari kueri sebelumnya. Bidang ini bersifat opsional.

** `lastSync` **  
Momen, dalam milidetik zaman, ketika `Sync` operasi sukses terakhir dimulai. Jika ditentukan, hanya item yang telah berubah setelah `lastSync` dikembalikan. Bidang ini opsional, dan hanya boleh diisi setelah mengambil semua halaman dari operasi awal`Sync`. Jika dihilangkan, hasil dari tabel *Base* akan dikembalikan, jika tidak, hasil dari tabel *Delta* akan dikembalikan.

**`basePartitionKey`**  
Kunci partisi dari tabel *Basis* yang digunakan saat melakukan `Sync` operasi. Bidang ini memungkinkan `Sync` operasi yang akan dilakukan ketika tabel menggunakan kunci partisi kustom. Ini adalah bidang opsional.

**`deltaIndexName`**  
Indeks yang digunakan untuk `Sync` operasi. Indeks ini diperlukan untuk mengaktifkan `Sync` operasi di seluruh tabel penyimpanan delta saat tabel menggunakan kunci partisi khusus. `Sync`Operasi akan dilakukan pada GSI (dibuat pada `gsi_ds_pk` dan`gsi_ds_sk`). Bidang ini bersifat opsional.

Hasil yang dikembalikan oleh sinkronisasi DynamoDB secara otomatis diubah menjadi tipe primitif GraphQL dan JSON dan tersedia dalam konteks pemetaan (). `$context.result`

Untuk informasi selengkapnya tentang konversi tipe DynamoDB, [lihat Mengetik sistem (](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses.md)pemetaan respons).

Untuk informasi selengkapnya tentang template pemetaan respons, lihat Ringkasan template [pemetaan Resolver](resolver-mapping-template-reference-overview.md#aws-appsync-resolver-mapping-template-reference-overview).

Hasilnya memiliki struktur sebagai berikut:

```
{
    items = [ ... ],
    nextToken = "a pagination token",
    scannedCount = 10,
    startedAt = 1550000000000
}
```

Bidang didefinisikan sebagai berikut:

** `items` **  
Daftar yang berisi item yang dikembalikan oleh sinkronisasi.

** `nextToken` **  
Jika mungkin ada lebih banyak hasil, `nextToken` berisi token pagination yang dapat Anda gunakan dalam permintaan lain. AWS AppSync mengenkripsi dan mengaburkan token pagination yang dikembalikan dari DynamoDB. Ini mencegah data tabel Anda bocor secara tidak sengaja ke penelepon. Selain itu, token pagination ini tidak dapat digunakan di berbagai resolver.

** `scannedCount` **  
Jumlah item yang diambil oleh DynamoDB sebelum ekspresi filter (jika ada) diterapkan.

** `startedAt` **  
Saat ini, dalam milidetik epoch, ketika operasi sinkronisasi dimulai yang dapat Anda simpan secara lokal dan gunakan dalam permintaan lain sebagai argumen Anda. `lastSync` Jika token pagination disertakan dalam permintaan, nilai ini akan sama dengan yang dikembalikan oleh permintaan untuk halaman pertama hasil.

## Contoh
<a name="id14"></a>

Contoh berikut adalah template pemetaan untuk query GraphQL:. `syncPosts(nextToken: String, lastSync: AWSTimestamp)`

Dalam contoh ini, jika `lastSync` dihilangkan, semua entri dalam tabel dasar dikembalikan. Jika `lastSync` disediakan, hanya entri dalam tabel sinkronisasi delta yang telah berubah sejak itu `lastSync` dikembalikan.

```
{
    "version" : "2018-05-29",
    "operation" : "Sync",
    "limit": 100,
    "nextToken": $util.toJson($util.defaultIfNull($ctx.args.nextToken, null)),
    "lastSync": $util.toJson($util.defaultIfNull($ctx.args.lastSync, null))
}
```

# BatchGetItem
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-batch-get-item"></a>

Dokumen pemetaan `BatchGetItem` permintaan memungkinkan Anda memberi tahu AWS AppSync DynamoDB resolver untuk membuat `BatchGetItem` permintaan ke DynamoDB untuk mengambil beberapa item, berpotensi di beberapa tabel. Untuk template permintaan ini, Anda harus menentukan yang berikut:
+ Nama tabel tempat untuk mengambil item dari
+ Kunci item untuk mengambil dari setiap tabel

Batas `BatchGetItem` DynamoDB berlaku **dan tidak ada ekspresi kondisi** yang dapat diberikan.

Dokumen `BatchGetItem` pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2018-05-29",
    "operation" : "BatchGetItem",
    "tables" : {
        "table1": {
           "keys": [
              ## Item to retrieve Key
              {
                   "foo" : ... typed value,
                   "bar" : ... typed value
              },
              ## Item2 to retrieve Key
              {
                   "foo" : ... typed value,
                   "bar" : ... typed value
              }
            ],
            "consistentRead": true|false,            
            "projection" : {
                 ...
            }
        },
        "table2": {
           "keys": [
              ## Item3 to retrieve Key
              {
                   "foo" : ... typed value,
                   "bar" : ... typed value
              },
              ## Item4 to retrieve Key
              {
                   "foo" : ... typed value,
                   "bar" : ... typed value
              }
            ],
            "consistentRead": true|false,
            "projection" : {
                 ...
            }
        }
    }
}
```

Bidang didefinisikan sebagai berikut:

## BatchGetItem bidang
<a name="BatchGetItem-list"></a>

### BatchGetItem daftar bidang
<a name="BatchGetItem-list-col"></a>

** `version` **  
Versi definisi template. Hanya `2018-05-29` didukung. Nilai ini diperlukan.

** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `BatchGetItem` DynamoDB, ini harus diatur ke. `BatchGetItem` Nilai ini diperlukan.

** `tables` **  
Tabel DynamoDB untuk mengambil item dari. Nilainya adalah peta di mana nama tabel ditentukan sebagai kunci peta. Setidaknya satu meja harus disediakan. `tables`Nilai ini diperlukan.    
** `keys` **  
Daftar kunci DynamoDB yang mewakili kunci utama item yang akan diambil. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md).  
** `consistentRead` **  
Apakah akan menggunakan pembacaan yang konsisten saat menjalankan *GetItem*operasi. *Nilai ini opsional dan default ke false.*  
**`projection`**  
Proyeksi yang digunakan untuk menentukan atribut yang akan dikembalikan dari operasi DynamoDB. Untuk informasi selengkapnya tentang proyeksi, lihat [Proyeksi](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-projections). Bidang ini bersifat opsional.

Hal-hal yang perlu diingat:
+ Jika item belum diambil dari tabel, elemen *null* muncul di blok data untuk tabel itu.
+ Hasil pemanggilan diurutkan per tabel, berdasarkan urutan di mana mereka disediakan di dalam template pemetaan permintaan.
+ Setiap `Get` perintah di dalam a `BatchGetItem` adalah atom, namun, batch dapat diproses sebagian. *Jika batch diproses sebagian karena kesalahan, kunci yang belum diproses dikembalikan sebagai bagian dari hasil pemanggilan di dalam blok UnprocessedKeys.*
+  `BatchGetItem`terbatas pada 100 kunci.

Untuk contoh template pemetaan permintaan berikut:

```
{
  "version": "2018-05-29",
  "operation": "BatchGetItem",
  "tables": {
    "authors": [
        {
          "author_id": {
            "S": "a1"
          }
        },
    ],
    "posts": [
        {
          "author_id": {
            "S": "a1"
          },
          "post_id": {
            "S": "p2"
          }
        }
    ],
  }
}
```

Hasil pemanggilan yang tersedia `$ctx.result` adalah sebagai berikut:

```
{
   "data": {
     "authors": [null],
     "posts": [
        # Was retrieved
        {
          "author_id": "a1",
          "post_id": "p2",
          "post_title": "title",
          "post_description": "description",
        }
     ]
   },
   "unprocessedKeys": {
     "authors": [
        # This item was not processed due to an error
        {
          "author_id": "a1"
        }
      ],
     "posts": []
   }
}
```

`$ctx.error`Berisi rincian tentang kesalahan. **Data** kunci, **UnprocessedKeys**, dan setiap kunci tabel yang disediakan dalam template pemetaan permintaan dijamin akan hadir dalam hasil pemanggilan. Item yang telah dihapus muncul di blok **data**. Item yang belum diproses ditandai sebagai *null* di dalam blok data dan ditempatkan di dalam blok **UnprocessedKeys**.

Untuk contoh yang lebih lengkap, ikuti tutorial DynamoDB Batch [dengan di sini AppSync Tutorial: DynamoDB](tutorial-dynamodb-batch.md#aws-appsync-tutorial-dynamodb-batch) batch resolvers.

# BatchDeleteItem
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-batch-delete-item"></a>

Dokumen pemetaan `BatchDeleteItem` permintaan memungkinkan Anda memberi tahu penyelesai AWS AppSync DynamoDB untuk membuat `BatchWriteItem` permintaan ke DynamoDB untuk menghapus beberapa item, berpotensi di beberapa tabel. Untuk template permintaan ini, Anda harus menentukan yang berikut:
+ Nama tabel tempat menghapus item
+ Kunci item yang akan dihapus dari setiap tabel

Batas `BatchWriteItem` DynamoDB berlaku **dan tidak ada ekspresi kondisi** yang dapat diberikan.

Dokumen `BatchDeleteItem` pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2018-05-29",
    "operation" : "BatchDeleteItem",
    "tables" : {
        "table1": [
        ## Item to delete Key
        {
             "foo" : ... typed value,
             "bar" : ... typed value
        },
        ## Item2 to delete Key
        {
             "foo" : ... typed value,
             "bar" : ... typed value
        }],
        "table2": [
        ## Item3 to delete Key
        {
             "foo" : ... typed value,
             "bar" : ... typed value
        },
        ## Item4 to delete Key
        {
             "foo" : ... typed value,
             "bar" : ... typed value
        }],
    }
}
```

Bidang didefinisikan sebagai berikut:

## BatchDeleteItem bidang
<a name="BatchDeleteItem-list"></a>

### BatchDeleteItem daftar bidang
<a name="BatchDeleteItem-list-col"></a>

** `version` **  
Versi definisi template. Hanya `2018-05-29` didukung. Nilai ini diperlukan.

** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `BatchDeleteItem` DynamoDB, ini harus diatur ke. `BatchDeleteItem` Nilai ini diperlukan.

** `tables` **  
Tabel DynamoDB untuk menghapus item dari. Setiap tabel adalah daftar kunci DynamoDB yang mewakili kunci utama item yang akan dihapus. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). Setidaknya satu meja harus disediakan. `tables`Nilai diperlukan.

Hal-hal yang perlu diingat:
+ Berlawanan dengan `DeleteItem` operasi, item yang dihapus sepenuhnya tidak dikembalikan dalam respons. Hanya kunci yang dilewati yang dikembalikan.
+ Jika item belum dihapus dari tabel, elemen *null* muncul di blok data untuk tabel itu.
+ Hasil pemanggilan diurutkan per tabel, berdasarkan urutan di mana mereka disediakan di dalam template pemetaan permintaan.
+ Setiap `Delete` perintah di dalam a `BatchDeleteItem` adalah atom. Namun batch dapat diproses sebagian. *Jika batch diproses sebagian karena kesalahan, kunci yang belum diproses dikembalikan sebagai bagian dari hasil pemanggilan di dalam blok UnprocessedKeys.*
+  `BatchDeleteItem`terbatas pada 25 kunci.
+ Operasi **ini tidak** didukung saat digunakan dengan deteksi konflik. Menggunakan keduanya secara bersamaan dapat mengakibatkan kesalahan.

Untuk contoh template pemetaan permintaan berikut:

```
{
  "version": "2018-05-29",
  "operation": "BatchDeleteItem",
  "tables": {
    "authors": [
        {
          "author_id": {
            "S": "a1"
          }
        },
    ],
    "posts": [
        {
          "author_id": {
            "S": "a1"
          },
          "post_id": {
            "S": "p2"
          }
        }
    ],
  }
}
```

Hasil pemanggilan yang tersedia `$ctx.result` adalah sebagai berikut:

```
{
   "data": {
     "authors": [null],
     "posts": [
        # Was deleted
        {
          "author_id": "a1",
          "post_id": "p2"
        }
     ]
   },
   "unprocessedKeys": {
     "authors": [
        # This key was not processed due to an error
        {
          "author_id": "a1"
        }
      ],
     "posts": []
   }
}
```

`$ctx.error`Berisi rincian tentang kesalahan. **Data** kunci, **UnprocessedKeys**, dan setiap kunci tabel yang disediakan dalam template pemetaan permintaan dijamin akan hadir dalam hasil pemanggilan. Item yang telah dihapus ada di blok **data**. Item yang belum diproses ditandai sebagai *null* di dalam blok data dan ditempatkan di dalam blok **UnprocessedKeys**.

Untuk contoh yang lebih lengkap, ikuti tutorial DynamoDB Batch [dengan di sini AppSync Tutorial: DynamoDB](tutorial-dynamodb-batch.md#aws-appsync-tutorial-dynamodb-batch) batch resolvers.

# BatchPutItem
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-batch-put-item"></a>

Dokumen pemetaan `BatchPutItem` permintaan memungkinkan Anda memberi tahu AWS AppSync DynamoDB resolver untuk membuat `BatchWriteItem` permintaan ke DynamoDB untuk menempatkan beberapa item, berpotensi di beberapa tabel. Untuk template permintaan ini, Anda harus menentukan yang berikut:
+ Nama tabel tempat meletakkan item
+ Item lengkap untuk dimasukkan ke dalam setiap tabel

Batas `BatchWriteItem` DynamoDB berlaku **dan tidak ada ekspresi kondisi** yang dapat diberikan.

Dokumen `BatchPutItem` pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2018-05-29",
    "operation" : "BatchPutItem",
    "tables" : {
        "table1": [
        ## Item to put
        {
             "foo" : ... typed value,
             "bar" : ... typed value
        },
        ## Item2 to put
        {
             "foo" : ... typed value,
             "bar" : ... typed value
        }],
        "table2": [
        ## Item3 to put
        {
             "foo" : ... typed value,
             "bar" : ... typed value
        },
        ## Item4 to put
        {
             "foo" : ... typed value,
             "bar" : ... typed value
        }],
    }
}
```

Bidang didefinisikan sebagai berikut:

## BatchPutItem bidang
<a name="BatchPutItem-list"></a>

### BatchPutItem daftar bidang
<a name="BatchPutItem-list-col"></a>

** `version` **  
Versi definisi template. Hanya `2018-05-29` didukung. Nilai ini diperlukan.

** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `BatchPutItem` DynamoDB, ini harus diatur ke. `BatchPutItem` Nilai ini diperlukan.

** `tables` **  
Tabel DynamoDB untuk menempatkan item di. Setiap entri tabel mewakili daftar item DynamoDB untuk disisipkan untuk tabel khusus ini. Setidaknya satu meja harus disediakan. Nilai ini diperlukan.

Hal-hal yang perlu diingat:
+ Item yang disisipkan sepenuhnya dikembalikan dalam respons, jika berhasil.
+ Jika item belum dimasukkan dalam tabel, elemen *null* ditampilkan di blok data untuk tabel tersebut.
+ Item yang disisipkan diurutkan per tabel, berdasarkan urutan penyediaannya di dalam templat pemetaan permintaan.
+ Setiap `Put` perintah di dalam a `BatchPutItem` adalah atom, namun, batch dapat diproses sebagian. *Jika batch diproses sebagian karena kesalahan, kunci yang belum diproses dikembalikan sebagai bagian dari hasil pemanggilan di dalam blok UnprocessedKeys.*
+  `BatchPutItem`terbatas pada 25 item.
+ Operasi **ini tidak** didukung saat digunakan dengan deteksi konflik. Menggunakan keduanya secara bersamaan dapat mengakibatkan kesalahan.

Untuk contoh template pemetaan permintaan berikut:

```
{
  "version": "2018-05-29",
  "operation": "BatchPutItem",
  "tables": {
    "authors": [
        {
          "author_id": {
            "S": "a1"
          },
          "author_name": {
            "S": "a1_name"
          }
        },
    ],
    "posts": [
        {
          "author_id": {
            "S": "a1"
          },
          "post_id": {
            "S": "p2"
          },
          "post_title": {
            "S": "title"
          }
        }
    ],
  }
}
```

Hasil pemanggilan yang tersedia `$ctx.result` adalah sebagai berikut:

```
{
   "data": {
     "authors": [
         null
     ],
     "posts": [
        # Was inserted
        {
          "author_id": "a1",
          "post_id": "p2",
          "post_title": "title"
        }
     ]
   },
   "unprocessedItems": {
     "authors": [
        # This item was not processed due to an error
        {
          "author_id": "a1",
          "author_name": "a1_name"
        }
      ],
     "posts": []
   }
}
```

`$ctx.error`Berisi rincian tentang kesalahan. **Data** kunci, **UnprocessEditems**, dan setiap kunci tabel yang disediakan dalam template pemetaan permintaan dijamin akan hadir dalam hasil pemanggilan. Item yang telah dimasukkan ada di blok **data**. Item yang belum diproses ditandai sebagai *null* di dalam blok data dan ditempatkan di dalam blok **UnProcessEditems**.

Untuk contoh yang lebih lengkap, ikuti tutorial DynamoDB Batch [dengan di sini AppSync Tutorial: DynamoDB](tutorial-dynamodb-batch.md#aws-appsync-tutorial-dynamodb-batch) batch resolvers.

# TransactGetItems
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-transact-get-items"></a>

Dokumen pemetaan `TransactGetItems` permintaan memungkinkan Anda memberi tahu AWS AppSync DynamoDB resolver untuk membuat `TransactGetItems` permintaan ke DynamoDB untuk mengambil beberapa item, berpotensi di beberapa tabel. Untuk template permintaan ini, Anda harus menentukan yang berikut:
+ Nama tabel dari setiap item permintaan tempat untuk mengambil item dari
+ Kunci dari setiap item permintaan untuk diambil dari setiap tabel

Batas `TransactGetItems` DynamoDB berlaku **dan tidak ada ekspresi kondisi** yang dapat diberikan.

Dokumen `TransactGetItems` pemetaan memiliki struktur sebagai berikut:

```
{
    "version": "2018-05-29",
    "operation": "TransactGetItems",
    "transactItems": [
       ## First request item
       {
           "table": "table1",
           "key": {
               "foo": ... typed value,
               "bar": ... typed value
           },
           "projection" : {
                ...
           }
       },
       ## Second request item
       {
           "table": "table2",
           "key": {
               "foo": ... typed value,
               "bar": ... typed value
           },
           "projection" : {
                ...
           }
       }
    ]
}
```

Bidang didefinisikan sebagai berikut:

## TransactGetItems bidang
<a name="TransactGetItems-list"></a>

### TransactGetItems daftar bidang
<a name="TransactGetItems-list-col"></a>

** `version` **  
Versi definisi template. Hanya `2018-05-29` didukung. Nilai ini diperlukan.

** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `TransactGetItems` DynamoDB, ini harus diatur ke. `TransactGetItems` Nilai ini diperlukan.

** `transactItems` **  
Item permintaan untuk disertakan. Nilainya adalah array item permintaan. Setidaknya satu item permintaan harus disediakan. `transactItems`Nilai ini diperlukan.    
** `table` **  
Tabel DynamoDB untuk mengambil item dari. Nilainya adalah string dari nama tabel. `table`Nilai ini diperlukan.  
** `key` **  
Kunci DynamoDB mewakili kunci utama item yang akan diambil. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md).  
**`projection`**  
Proyeksi yang digunakan untuk menentukan atribut yang akan dikembalikan dari operasi DynamoDB. Untuk informasi selengkapnya tentang proyeksi, lihat [Proyeksi](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-projections). Bidang ini bersifat opsional.

Hal-hal yang perlu diingat:
+ Jika transaksi berhasil, urutan item yang diambil di `items` blok akan sama dengan urutan item permintaan.
+ Transaksi dilakukan dengan all-or-nothing cara tertentu. Jika ada item permintaan yang menyebabkan kesalahan, seluruh transaksi tidak akan dilakukan dan rincian kesalahan akan dikembalikan.
+ Item permintaan yang tidak dapat diambil bukanlah kesalahan. Sebagai gantinya, elemen *null* muncul di blok *item* di posisi yang sesuai.
+ Jika kesalahan transaksi adalah *TransactionCanceledException*, `cancellationReasons` blok akan diisi. Urutan alasan pembatalan di `cancellationReasons` blok akan sama dengan urutan item permintaan.
+  `TransactGetItems`terbatas pada 100 item permintaan.

Untuk contoh template pemetaan permintaan berikut:

```
{
    "version": "2018-05-29",
    "operation": "TransactGetItems",
    "transactItems": [
       ## First request item
       {
           "table": "posts",
           "key": {
               "post_id": {
                 "S": "p1"
               }
           }
       },
       ## Second request item
       {
           "table": "authors",
           "key": {
               "author_id": {
                 "S": a1
               }
           }
       }
    ]
}
```

Jika transaksi berhasil dan hanya item yang diminta pertama yang diambil, hasil pemanggilan yang tersedia adalah sebagai berikut: `$ctx.result`

```
{
    "items": [
       {
           // Attributes of the first requested item
           "post_id": "p1",
           "post_title": "title",
           "post_description": "description"
       },
       // Could not retrieve the second requested item
       null,
    ],
    "cancellationReasons": null
}
```

Jika transaksi gagal karena *TransactionCanceledException*disebabkan oleh item permintaan pertama, hasil pemanggilan yang tersedia `$ctx.result` adalah sebagai berikut:

```
{
    "items": null,
    "cancellationReasons": [
       {
           "type":"Sample error type",
           "message":"Sample error message"
       },
       {
           "type":"None",
           "message":"None"
       }
    ]
}
```

`$ctx.error`Berisi rincian tentang kesalahan. **Item** kunci dan **CancellationReasons** dijamin akan hadir di. `$ctx.result`

Untuk contoh yang lebih lengkap, ikuti tutorial Transaksi DynamoDB AppSync dengan [tutorial di sini: DynamoDB](tutorial-dynamodb-transact.md#aws-appsync-tutorial-dynamodb-transact) transaction resolvers.

# TransactWriteItems
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-transact-write-items"></a>

Dokumen pemetaan `TransactWriteItems` permintaan memungkinkan Anda memberi tahu AWS AppSync DynamoDB resolver untuk membuat `TransactWriteItems` permintaan ke DynamoDB untuk menulis beberapa item, berpotensi ke beberapa tabel. Untuk template permintaan ini, Anda harus menentukan yang berikut:
+ Nama tabel tujuan dari setiap item permintaan
+ Pengoperasian setiap item permintaan untuk dilakukan. Ada empat jenis operasi yang didukung: *PutItem*, *UpdateItem*, *DeleteItem*, dan *ConditionCheck* 
+ Kunci dari setiap item permintaan untuk menulis

Batas DynamoDB `TransactWriteItems` berlaku.

Dokumen `TransactWriteItems` pemetaan memiliki struktur sebagai berikut:

```
{
    "version": "2018-05-29",
    "operation": "TransactWriteItems",
    "transactItems": [
       {
           "table": "table1",
           "operation": "PutItem",
           "key": {
               "foo": ... typed value,
               "bar": ... typed value
           },
           "attributeValues": {
               "baz": ... typed value
           },
           "condition": {
               "expression": "someExpression",
               "expressionNames": {
                   "#foo": "foo"
               },
               "expressionValues": {
                   ":bar": ... typed value
               },
               "returnValuesOnConditionCheckFailure": true|false
           }
       },
       {
           "table":"table2",
           "operation": "UpdateItem",
           "key": {
               "foo": ... typed value,
               "bar": ... typed value
           },
           "update": {
               "expression": "someExpression",
               "expressionNames": {
                   "#foo": "foo"
               },
               "expressionValues": {
                   ":bar": ... typed value
               }
           },
           "condition": {
               "expression": "someExpression",
               "expressionNames": {
                   "#foo":"foo"
               },
               "expressionValues": {
                   ":bar": ... typed value
               },
               "returnValuesOnConditionCheckFailure": true|false
           }
       },
       {
           "table": "table3",
           "operation": "DeleteItem",
           "key":{
               "foo": ... typed value,
               "bar": ... typed value
           },
           "condition":{
               "expression": "someExpression",
               "expressionNames": {
                   "#foo": "foo"
               },
               "expressionValues": {
                   ":bar": ... typed value
               },
               "returnValuesOnConditionCheckFailure": true|false
           }
       },
       {
           "table": "table4",
           "operation": "ConditionCheck",
           "key":{
               "foo": ... typed value,
               "bar": ... typed value
           },
           "condition":{
               "expression": "someExpression",
               "expressionNames": {
                   "#foo": "foo"
               },
               "expressionValues": {
                   ":bar": ... typed value
               },
               "returnValuesOnConditionCheckFailure": true|false
           }
       }
    ]
}
```

## TransactWriteItems bidang
<a name="TransactWriteItems-list"></a>

### TransactWriteItems daftar bidang
<a name="TransactWriteItems-list-col"></a>

**Bidang didefinisikan sebagai berikut:**    
** `version` **  
Versi definisi template. Hanya `2018-05-29` didukung. Nilai ini diperlukan.  
** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `TransactWriteItems` DynamoDB, ini harus diatur ke. `TransactWriteItems` Nilai ini diperlukan.  
** `transactItems` **  
Item permintaan untuk disertakan. Nilainya adalah array item permintaan. Setidaknya satu item permintaan harus disediakan. `transactItems`Nilai ini diperlukan.  
Untuk`PutItem`, bidang didefinisikan sebagai berikut:    
** `table` **  
Tabel DynamoDB tujuan. Nilainya adalah string dari nama tabel. `table`Nilai ini diperlukan.  
** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `PutItem` DynamoDB, ini harus diatur ke. `PutItem` Nilai ini diperlukan.  
** `key` **  
Kunci DynamoDB mewakili kunci utama item yang akan diletakkan. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). Nilai ini diperlukan.  
** `attributeValues` **  
Sisa atribut item yang akan dimasukkan ke dalam DynamoDB. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). Bidang ini bersifat opsional.  
** `condition` **  
Suatu kondisi untuk menentukan apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB. Jika tidak ada kondisi yang ditentukan, `PutItem` permintaan akan menimpa entri yang ada untuk item tersebut. Anda dapat menentukan apakah akan mengambil kembali item yang ada saat pemeriksaan kondisi gagal. Untuk informasi selengkapnya tentang kondisi transaksional, lihat Ekspresi [kondisi transaksi](aws-appsync-resolver-mapping-template-reference-dynamodb-transaction-condition-expressions.md). Nilai ini bersifat opsional.
Untuk`UpdateItem`, bidang didefinisikan sebagai berikut:    
** `table` **  
Tabel DynamoDB untuk memperbarui. Nilainya adalah string dari nama tabel. `table`Nilai ini diperlukan.  
** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `UpdateItem` DynamoDB, ini harus diatur ke. `UpdateItem` Nilai ini diperlukan.  
** `key` **  
Kunci DynamoDB mewakili kunci utama item yang akan diperbarui. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). Nilai ini diperlukan.  
** `update` **  
`update`Bagian ini memungkinkan Anda menentukan ekspresi pembaruan yang menjelaskan cara memperbarui item di DynamoDB. Untuk informasi selengkapnya tentang cara menulis ekspresi pembaruan, lihat dokumentasi [DynamoDB UpdateExpressions ](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html). Bagian ini diperlukan.  
** `condition` **  
Suatu kondisi untuk menentukan apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB. Jika tidak ada kondisi yang ditentukan, `UpdateItem` permintaan akan memperbarui entri yang ada terlepas dari statusnya saat ini. Anda dapat menentukan apakah akan mengambil kembali item yang ada saat pemeriksaan kondisi gagal. Untuk informasi selengkapnya tentang kondisi transaksional, lihat Ekspresi [kondisi transaksi](aws-appsync-resolver-mapping-template-reference-dynamodb-transaction-condition-expressions.md). Nilai ini bersifat opsional.
Untuk`DeleteItem`, bidang didefinisikan sebagai berikut:    
** `table` **  
Tabel DynamoDB untuk menghapus item. Nilainya adalah string dari nama tabel. `table`Nilai ini diperlukan.  
** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `DeleteItem` DynamoDB, ini harus diatur ke. `DeleteItem` Nilai ini diperlukan.  
** `key` **  
Tombol DynamoDB mewakili kunci utama item yang akan dihapus. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). Nilai ini diperlukan.  
** `condition` **  
Suatu kondisi untuk menentukan apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB. Jika tidak ada kondisi yang ditentukan, `DeleteItem` permintaan menghapus item terlepas dari keadaan saat ini. Anda dapat menentukan apakah akan mengambil kembali item yang ada saat pemeriksaan kondisi gagal. Untuk informasi selengkapnya tentang kondisi transaksional, lihat Ekspresi [kondisi transaksi](aws-appsync-resolver-mapping-template-reference-dynamodb-transaction-condition-expressions.md). Nilai ini bersifat opsional.
Untuk`ConditionCheck`, bidang didefinisikan sebagai berikut:    
** `table` **  
Tabel DynamoDB untuk memeriksa kondisi. Nilainya adalah string dari nama tabel. `table`Nilai ini diperlukan.  
** `operation` **  
Operasi DynamoDB untuk melakukan. Untuk melakukan operasi `ConditionCheck` DynamoDB, ini harus diatur ke. `ConditionCheck` Nilai ini diperlukan.  
** `key` **  
Kunci DynamoDB mewakili kunci utama item untuk pemeriksaan kondisi. Item DynamoDB mungkin memiliki kunci hash tunggal, atau kunci hash dan kunci sortir, tergantung pada struktur tabel. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Mengetik [sistem (pemetaan permintaan)](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md). Nilai ini diperlukan.  
** `condition` **  
Suatu kondisi untuk menentukan apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB. Anda dapat menentukan apakah akan mengambil kembali item yang ada saat pemeriksaan kondisi gagal. Untuk informasi selengkapnya tentang kondisi transaksional, lihat Ekspresi [kondisi transaksi](aws-appsync-resolver-mapping-template-reference-dynamodb-transaction-condition-expressions.md). Nilai ini diperlukan.

Hal-hal yang perlu diingat:
+ Hanya kunci item permintaan yang dikembalikan dalam respons, jika berhasil. Urutan kunci akan sama dengan urutan item permintaan.
+ Transaksi dilakukan dengan all-or-nothing cara tertentu. Jika ada item permintaan yang menyebabkan kesalahan, seluruh transaksi tidak akan dilakukan dan rincian kesalahan akan dikembalikan.
+ Tidak ada dua item permintaan yang dapat menargetkan item yang sama. Kalau tidak, mereka akan menyebabkan *TransactionCanceledException*kesalahan.
+ Jika kesalahan transaksi adalah *TransactionCanceledException*, `cancellationReasons` blok akan diisi. Jika pemeriksaan kondisi item permintaan gagal **dan** Anda tidak `returnValuesOnConditionCheckFailure` menentukan`false`, item yang ada di tabel akan diambil dan disimpan `item` di posisi `cancellationReasons` blok yang sesuai.
+  `TransactWriteItems`terbatas pada 100 item permintaan.
+ Operasi **ini tidak** didukung saat digunakan dengan deteksi konflik. Menggunakan keduanya secara bersamaan dapat mengakibatkan kesalahan.

Untuk contoh template pemetaan permintaan berikut:

```
{
    "version": "2018-05-29",
    "operation": "TransactWriteItems",
    "transactItems": [
       {
           "table": "posts",
           "operation": "PutItem",
           "key": {
               "post_id": {
                   "S": "p1"
               }
           },
           "attributeValues": {
               "post_title": {
                   "S": "New title"
               },
               "post_description": {
                   "S": "New description"
               }
           },
           "condition": {
               "expression": "post_title = :post_title",
               "expressionValues": {
                   ":post_title": {
                       "S": "Expected old title"
                   }
               }
           }
       },
       {
           "table":"authors",
           "operation": "UpdateItem",
           "key": {
               "author_id": {
                   "S": "a1"
               },
           },
           "update": {
               "expression": "SET author_name = :author_name",
               "expressionValues": {
                   ":author_name": {
                       "S": "New name"
                   }
               }
           },
       }
    ]
}
```

Jika transaksi berhasil, hasil pemanggilan yang tersedia `$ctx.result` adalah sebagai berikut:

```
{
    "keys": [
       // Key of the PutItem request
       {
           "post_id": "p1",
       },
       // Key of the UpdateItem request
       {
           "author_id": "a1"
       }
    ],
    "cancellationReasons": null
}
```

Jika transaksi gagal karena kegagalan pemeriksaan kondisi `PutItem` permintaan, hasil pemanggilan yang tersedia `$ctx.result` adalah sebagai berikut:

```
{
    "keys": null,
    "cancellationReasons": [
       {
           "item": {
               "post_id": "p1",
               "post_title": "Actual old title",
               "post_description": "Old description"
           },
           "type": "ConditionCheckFailed",
           "message": "The condition check failed."
       },
       {
           "type": "None",
           "message": "None"
       }
    ]
}
```

`$ctx.error`Berisi rincian tentang kesalahan. Kunci **kunci** dan **CancellationReasons** dijamin akan ada di. `$ctx.result`

Untuk contoh yang lebih lengkap, ikuti tutorial Transaksi DynamoDB AppSync dengan [tutorial di sini: DynamoDB](tutorial-dynamodb-transact.md#aws-appsync-tutorial-dynamodb-transact) transaction resolvers.

# Jenis sistem (pemetaan permintaan)
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request"></a>

Saat menggunakan AWS AppSync DynamoDB resolver untuk memanggil AWS AppSync tabel DynamoDB Anda, perlu mengetahui jenis setiap nilai yang akan digunakan dalam panggilan itu. Ini karena DynamoDB mendukung lebih banyak tipe primitif daripada GraphQL atau JSON (seperti set dan data biner). AWS AppSync membutuhkan beberapa petunjuk saat menerjemahkan antara GraphQL dan DynamoDB, jika tidak maka harus membuat beberapa asumsi tentang bagaimana data disusun dalam tabel Anda.

[Untuk informasi selengkapnya tentang tipe data DynamoDB, lihat deskriptor tipe Data DynamoDB dan [dokumentasi](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.LowLevelAPI.html#Programming.LowLevelAPI.DataTypeDescriptors) tipe data.](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html#HowItWorks.DataTypes)

Nilai DynamoDB diwakili oleh objek JSON yang berisi pasangan kunci-nilai tunggal. Kunci menentukan jenis DynamoDB, dan nilai menentukan nilai itu sendiri. Dalam contoh berikut, kunci `S` menunjukkan bahwa nilainya adalah string, dan nilainya `identifier` adalah nilai string itu sendiri.

```
{ "S" : "identifier" }
```

Perhatikan bahwa objek JSON tidak dapat memiliki lebih dari satu pasangan kunci-nilai. Jika lebih dari satu pasangan kunci-nilai ditentukan, dokumen pemetaan permintaan tidak diuraikan.

Nilai DynamoDB digunakan di mana saja dalam dokumen pemetaan permintaan di mana Anda perlu menentukan nilai. Beberapa tempat di mana Anda perlu melakukan ini termasuk: `key` dan `attributeValue` bagian, dan `expressionValues` bagian dari bagian ekspresi. Dalam contoh berikut, `identifier` nilai DynamoDB String sedang ditetapkan ke `id` bidang di bagian (mungkin dalam `key` `GetItem` dokumen pemetaan permintaan).

```
"key" : {
   "id" : { "S" : "identifier" }
}
```

 **Jenis yang Didukung** 

AWS AppSync mendukung skalar DynamoDB, dokumen, dan jenis set berikut:

**Jenis string `S` **  
Nilai string tunggal. Nilai DynamoDB String dilambangkan dengan:  

```
{ "S" : "some string" }
```
Contoh penggunaan adalah:  

```
"key" : {
   "id" : { "S" : "some string" }
}
```

**Jenis set string `SS` **  
Satu set nilai string. Nilai DynamoDB String Set dilambangkan dengan:  

```
{ "SS" : [ "first value", "second value", ... ] }
```
Contoh penggunaan adalah:  

```
"attributeValues" : {
   "phoneNumbers" : { "SS" : [ "+1 555 123 4567", "+1 555 234 5678" ] }
}
```

**Jenis nomor `N` **  
Nilai numerik tunggal. Nilai DynamoDB Number dilambangkan dengan:  

```
{ "N" : 1234 }
```
Contoh penggunaan adalah:  

```
"expressionValues" : {
   ":expectedVersion" : { "N" : 1 }
}
```

**Jenis set nomor `NS` **  
Satu set nilai angka. Nilai DynamoDB Number Set dilambangkan dengan:  

```
{ "NS" : [ 1, 2.3, 4 ... ] }
```
Contoh penggunaan adalah:  

```
"attributeValues" : {
   "sensorReadings" : { "NS" : [ 67.8, 12.2, 70 ] }
}
```

**Tipe biner `B` **  
Nilai biner. Nilai biner DynamoDB dilambangkan dengan:  

```
{ "B" : "SGVsbG8sIFdvcmxkIQo=" }
```
Perhatikan bahwa nilainya sebenarnya adalah string, di mana string adalah representasi yang dikodekan base64 dari data biner. AWS AppSync mendekode string ini kembali ke nilai binernya sebelum mengirimnya ke DynamoDB. AWS AppSync menggunakan skema decoding base64 seperti yang didefinisikan oleh RFC 2045: karakter apa pun yang tidak ada dalam alfabet base64 diabaikan.  
Contoh penggunaan adalah:  

```
"attributeValues" : {
   "binaryMessage" : { "B" : "SGVsbG8sIFdvcmxkIQo=" }
}
```

**Jenis set biner `BS` **  
Satu set nilai biner. Nilai DynamoDB Binary Set dilambangkan dengan:  

```
{ "BS" : [ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ... ] }
```
Perhatikan bahwa nilainya sebenarnya adalah string, di mana string adalah representasi yang dikodekan base64 dari data biner. AWS AppSync mendekode string ini kembali ke nilai binernya sebelum mengirimnya ke DynamoDB. AWS AppSync menggunakan skema decoding base64 seperti yang didefinisikan oleh RFC 2045: karakter apa pun yang tidak ada dalam alfabet base64 diabaikan.  
Contoh penggunaan adalah:  

```
"attributeValues" : {
   "binaryMessages" : { "BS" : [ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ] }
}
```

**Jenis Boolean `BOOL` **  
Nilai Boolean. Nilai DynamoDB Boolean dilambangkan dengan:  

```
{ "BOOL" : true }
```
Perhatikan bahwa hanya `true` dan `false` merupakan nilai yang valid.  
Contoh penggunaan adalah:  

```
"attributeValues" : {
   "orderComplete" : { "BOOL" : false }
}
```

**Jenis daftar `L` **  
Daftar nilai DynamoDB lain yang didukung. Nilai Daftar DynamoDB dilambangkan dengan:  

```
{ "L" : [ ... ] }
```
Perhatikan bahwa nilainya adalah nilai gabungan, di mana daftar dapat berisi nol atau lebih dari nilai DynamoDB yang didukung (termasuk daftar lainnya). Daftar ini juga dapat berisi campuran berbagai jenis.  
Contoh penggunaan adalah:  

```
{ "L" : [
      { "S"  : "A string value" },
      { "N"  : 1 },
      { "SS" : [ "Another string value", "Even more string values!" ] }
   ]
}
```

**Jenis peta `M` **  
Mewakili kumpulan pasangan kunci-nilai yang tidak berurutan dari nilai DynamoDB lain yang didukung. Nilai DynamoDB Map dilambangkan dengan:  

```
{ "M" : { ... } }
```
Perhatikan bahwa peta dapat berisi nol atau lebih pasangan nilai kunci. Kuncinya harus berupa string, dan nilainya dapat berupa nilai DynamoDB yang didukung (termasuk peta lainnya). Peta juga dapat berisi campuran dari berbagai jenis.  
Contoh penggunaan adalah:  

```
{ "M" : {
      "someString" : { "S"  : "A string value" },
      "someNumber" : { "N"  : 1 },
      "stringSet"  : { "SS" : [ "Another string value", "Even more string values!" ] }
   }
}
```

**Tipe nol `NULL` **  
Sebuah nilai nol. Nilai DynamoDB Null dilambangkan dengan:  

```
{ "NULL" : null }
```
Contoh penggunaan adalah:  

```
"attributeValues" : {
   "phoneNumbers" : { "NULL" : null }
}
```

Untuk informasi selengkapnya tentang setiap jenis, lihat dokumentasi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html).

# Jenis sistem (pemetaan respons)
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-responses"></a>

Saat menerima respons dari DynamoDB AWS AppSync , secara otomatis mengubahnya menjadi tipe primitif GraphQL dan JSON. Setiap atribut di DynamoDB diterjemahkan dan dikembalikan dalam konteks pemetaan respons.

Misalnya, jika DynamoDB mengembalikan berikut:

```
{
    "id" : { "S" : "1234" },
    "name" : { "S" : "Nadia" },
    "age" : { "N" : 25 }
}
```

Kemudian AWS AppSync DynamoDB resolver mengubahnya menjadi tipe GraphQL dan JSON sebagai:

```
{
    "id" : "1234",
    "name" : "Nadia",
    "age" : 25
}
```

Bagian ini menjelaskan cara AWS AppSync mengonversi skalar DynamoDB berikut, dokumen, dan jenis set:

**Jenis string `S` **  
Nilai string tunggal. Nilai DynamoDB String dikembalikan sebagai string.  
Misalnya, jika DynamoDB mengembalikan nilai DynamoDB String berikut:  

```
{ "S" : "some string" }
```
AWS AppSync mengubahnya menjadi string:  

```
"some string"
```

**Jenis set string `SS` **  
Satu set nilai string. Nilai DynamoDB String Set dikembalikan sebagai daftar string.  
Misalnya, jika DynamoDB mengembalikan nilai DynamoDB String Set berikut:  

```
{ "SS" : [ "first value", "second value", ... ] }
```
AWS AppSync mengubahnya menjadi daftar string:  

```
[ "+1 555 123 4567", "+1 555 234 5678" ]
```

**Jenis nomor `N` **  
Nilai numerik tunggal. Nilai DynamoDB Number dikembalikan sebagai angka.  
Misalnya, jika DynamoDB mengembalikan nilai Nomor DynamoDB berikut:  

```
{ "N" : 1234 }
```
AWS AppSync mengubahnya menjadi angka:  

```
1234
```

**Jenis set nomor `NS` **  
Satu set nilai angka. Nilai DynamoDB Number Set dikembalikan sebagai daftar angka.  
Misalnya, jika DynamoDB mengembalikan nilai DynamoDB Number Set berikut:  

```
{ "NS" : [ 67.8, 12.2, 70 ] }
```
AWS AppSync mengubahnya menjadi daftar angka:  

```
[ 67.8, 12.2, 70 ]
```

**Tipe biner `B` **  
Nilai biner. Nilai DynamoDB Binary dikembalikan sebagai string yang berisi representasi base64 dari nilai tersebut.  
Misalnya, jika DynamoDB mengembalikan nilai DynamoDB Binary berikut:  

```
{ "B" : "SGVsbG8sIFdvcmxkIQo=" }
```
AWS AppSync mengubahnya menjadi string yang berisi representasi base64 dari nilai:  

```
"SGVsbG8sIFdvcmxkIQo="
```
[Perhatikan bahwa data biner dikodekan dalam skema pengkodean base64 seperti yang ditentukan dalam [RFC 4648 dan RFC 2045](https://tools.ietf.org/html/rfc4648).](https://tools.ietf.org/html/rfc2045)

**Jenis set biner `BS` **  
Satu set nilai biner. Nilai DynamoDB Binary Set dikembalikan sebagai daftar string yang berisi representasi nilai base64.  
Misalnya, jika DynamoDB mengembalikan nilai DynamoDB Binary Set berikut:  

```
{ "BS" : [ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ... ] }
```
AWS AppSync mengubahnya menjadi daftar string yang berisi representasi nilai base64:  

```
[ "SGVsbG8sIFdvcmxkIQo=", "SG93IGFyZSB5b3U/Cg==" ... ]
```
[Perhatikan bahwa data biner dikodekan dalam skema pengkodean base64 seperti yang ditentukan dalam [RFC 4648 dan RFC 2045](https://tools.ietf.org/html/rfc4648).](https://tools.ietf.org/html/rfc2045)

**Jenis Boolean `BOOL` **  
Nilai Boolean. Nilai DynamoDB Boolean dikembalikan sebagai Boolean.  
Misalnya, jika DynamoDB mengembalikan nilai DynamoDB Boolean berikut:  

```
{ "BOOL" : true }
```
AWS AppSync mengubahnya menjadi Boolean:  

```
true
```

**Jenis daftar `L` **  
Daftar nilai DynamoDB lain yang didukung. Nilai Daftar DynamoDB dikembalikan sebagai daftar nilai, di mana setiap nilai batin juga dikonversi.  
Misalnya, jika DynamoDB mengembalikan nilai Daftar DynamoDB berikut:  

```
{ "L" : [
      { "S"  : "A string value" },
      { "N"  : 1 },
      { "SS" : [ "Another string value", "Even more string values!" ] }
   ]
}
```
AWS AppSync mengubahnya menjadi daftar nilai yang dikonversi:  

```
[ "A string value", 1, [ "Another string value", "Even more string values!" ] ]
```

**Jenis peta `M` **  
 key/value Kumpulan nilai DynamoDB lain yang didukung. Nilai DynamoDB Map dikembalikan sebagai objek JSON, di mana key/value masing-masing juga dikonversi.  
Misalnya, jika DynamoDB mengembalikan nilai DynamoDB Map berikut:  

```
{ "M" : {
      "someString" : { "S"  : "A string value" },
      "someNumber" : { "N"  : 1 },
      "stringSet"  : { "SS" : [ "Another string value", "Even more string values!" ] }
   }
}
```
AWS AppSync mengubahnya menjadi objek JSON:  

```
{
   "someString" : "A string value",
   "someNumber" : 1,
   "stringSet"  : [ "Another string value", "Even more string values!" ]
}
```

**Tipe nol `NULL` **  
Sebuah nilai nol.  
Misalnya, jika DynamoDB mengembalikan nilai DynamoDB Null berikut:  

```
{ "NULL" : null }
```
AWS AppSync mengubahnya menjadi null:  

```
null
```

# Penyaring
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-filter"></a>

Saat menanyakan objek di DynamoDB menggunakan `Query` operasi `Scan` dan, Anda dapat secara opsional menentukan `filter` a yang mengevaluasi hasil dan hanya mengembalikan nilai yang diinginkan.

Bagian pemetaan filter dari dokumen `Query` atau `Scan` pemetaan memiliki struktur berikut:

```
"filter" : {
    "expression" : "filter expression"
    "expressionNames" : {
        "#name" : "name",
    },
    "expressionValues" : {
        ":value" : ... typed value
    },
}
```

Bidang didefinisikan sebagai berikut:

** `expression` **  
Ekspresi kueri. Untuk informasi selengkapnya tentang cara menulis ekspresi filter, lihat dokumentasi [DynamoDB [dan QueryFilter ScanFilter](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.ScanFilter.html) DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.QueryFilter.html). Bidang ini harus ditentukan.

** `expressionNames` **  
Substitusi untuk placeholder *nama* atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci tersebut sesuai dengan placeholder nama yang digunakan dalam file. `expression` Nilai harus berupa string yang sesuai dengan nama atribut item di DynamoDB. Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nama atribut ekspresi yang digunakan dalam. `expression`

** `expressionValues` **  
Substitusi untuk placeholder *nilai* atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci sesuai dengan placeholder nilai yang digunakan dalam`expression`, dan nilainya harus berupa nilai yang diketik. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat [Jenis Sistem (Permintaan Pemetaan](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md)). Ini harus ditentukan. Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nilai atribut ekspresi yang digunakan dalam. `expression`

## Contoh
<a name="id18"></a>

Contoh berikut adalah bagian filter untuk template pemetaan, di mana entri diambil dari DynamoDB hanya dikembalikan jika judul dimulai dengan argumen. `title`

```
"filter" : {
    "expression" : "begins_with(#title, :title)",
    "expressionNames" : {
        "#title" : "title"
    },
    "expressionValues" : {
        ":title" : $util.dynamodb.toDynamoDBJson($context.arguments.title)
    }
}
```

# Ekspresi kondisi
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-condition-expressions"></a>

Saat Anda mengubah objek di DynamoDB dengan menggunakan operasi`PutItem`,`UpdateItem`, dan `DeleteItem` DynamoDB, Anda dapat secara opsional menentukan ekspresi kondisi yang mengontrol apakah permintaan harus berhasil atau tidak, berdasarkan status objek yang sudah ada di DynamoDB sebelum operasi dilakukan.

 AWS AppSync DynamoDB resolver memungkinkan ekspresi kondisi untuk ditentukan `PutItem` dalam`UpdateItem`,, `DeleteItem` dan meminta dokumen pemetaan, dan juga strategi untuk mengikuti jika kondisi gagal dan objek tidak diperbarui.

## Contoh 1
<a name="id19"></a>

Dokumen `PutItem` pemetaan berikut tidak memiliki ekspresi kondisi. Akibatnya, ia menempatkan item di DynamoDB bahkan jika item dengan kunci yang sama sudah ada, sehingga menimpa item yang ada.

```
{
   "version" : "2017-02-28",
   "operation" : "PutItem",
   "key" : {
      "id" : { "S" : "1" }
   }
}
```

## Contoh 2
<a name="id20"></a>

Dokumen `PutItem` pemetaan berikut memang memiliki ekspresi kondisi yang memungkinkan operasi berhasil hanya jika item dengan kunci yang sama *tidak* ada di DynamoDB.

```
{
   "version" : "2017-02-28",
   "operation" : "PutItem",
   "key" : {
      "id" : { "S" : "1" }
   },
   "condition" : {
      "expression" : "attribute_not_exists(id)"
   }
}
```

Secara default, jika pemeriksaan kondisi gagal, penyelesai AWS AppSync DynamoDB mengembalikan kesalahan untuk mutasi. Namun, AWS AppSync DynamoDB resolver menawarkan beberapa fitur tambahan untuk membantu pengembang menangani beberapa kasus tepi umum:
+ Jika AWS AppSync DynamoDB resolver dapat menentukan bahwa nilai saat ini di DynamoDB cocok dengan hasil yang diinginkan, ia memperlakukan operasi seolah-olah berhasil pula.
+ Alih-alih mengembalikan kesalahan, Anda dapat mengonfigurasi resolver untuk menjalankan fungsi Lambda khusus untuk memutuskan bagaimana penyelesai DynamoDB AWS AppSync harus menangani kegagalan.

Ini dijelaskan secara lebih rinci di bagian [Penanganan Kegagalan Pemeriksaan Kondisi](#aws-appsync-resolver-mapping-template-reference-dynamodb-condition-handling).

[Untuk informasi selengkapnya tentang ekspresi kondisi DynamoDB, lihat dokumentasi DynamoDB. ConditionExpressions ](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html)

## Menentukan suatu kondisi
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-condition-specification"></a>

Dokumen pemetaan `PutItem``UpdateItem`,, dan `DeleteItem` permintaan semuanya memungkinkan `condition` bagian opsional untuk ditentukan. Jika dihilangkan, tidak ada pemeriksaan kondisi yang dilakukan. Jika ditentukan, kondisi harus benar agar operasi berhasil.

`condition`Bagian memiliki struktur sebagai berikut:

```
"condition" : {
    "expression" : "someExpression"
    "expressionNames" : {
        "#foo" : "foo"
    },
    "expressionValues" : {
        ":bar" : ... typed value
    },
    "equalsIgnore" : [ "version" ],
    "consistentRead" : true,
    "conditionalCheckFailedHandler" : {
        "strategy" : "Custom",
        "lambdaArn" : "arn:..."
    }
}
```

Bidang berikut menentukan kondisi:

** `expression` **  
Ekspresi pembaruan itu sendiri. Untuk informasi selengkapnya tentang cara menulis ekspresi kondisi, lihat dokumentasi [DynamoDB ConditionExpressions ](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html). Bidang ini harus ditentukan.

** `expressionNames` **  
Substitusi untuk placeholder nama atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci sesuai dengan placeholder nama yang digunakan dalam *ekspresi*, dan nilainya harus berupa string yang sesuai dengan nama atribut item di DynamoDB. *Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nama atribut ekspresi yang digunakan dalam ekspresi.*

** `expressionValues` **  
Substitusi untuk placeholder nilai atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci sesuai dengan placeholder nilai yang digunakan dalam ekspresi, dan nilainya harus berupa nilai yang diketik. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat [Jenis Sistem (Permintaan Pemetaan](aws-appsync-resolver-mapping-template-reference-dynamodb-typed-values-request.md)). Ini harus ditentukan. Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nilai atribut ekspresi yang digunakan dalam ekspresi.

Bidang yang tersisa memberi tahu AWS AppSync DynamoDB resolver cara menangani kegagalan pemeriksaan kondisi:

** `equalsIgnore` **  
Ketika pemeriksaan kondisi gagal saat menggunakan `PutItem` operasi, penyelesai AWS AppSync DynamoDB membandingkan item yang saat ini ada di DynamoDB dengan item yang coba ditulisnya. Jika mereka sama, itu memperlakukan operasi seolah-olah berhasil. Anda dapat menggunakan `equalsIgnore` bidang untuk menentukan daftar atribut yang AWS AppSync harus diabaikan saat melakukan perbandingan tersebut. Misalnya, jika satu-satunya perbedaan adalah `version` atribut, ia memperlakukan operasi seolah-olah berhasil. Bidang ini bersifat opsional.

** `consistentRead` **  
Ketika pemeriksaan kondisi gagal, AWS AppSync dapatkan nilai item saat ini dari DynamoDB menggunakan pembacaan yang sangat konsisten. Anda dapat menggunakan bidang ini untuk memberi tahu penyelesai AWS AppSync DynamoDB agar menggunakan pembacaan yang konsisten pada akhirnya. Bidang ini opsional, dan defaultnya. `true`

** `conditionalCheckFailedHandler` **  
Bagian ini memungkinkan Anda untuk menentukan bagaimana penyelesai AWS AppSync DynamoDB memperlakukan kegagalan pemeriksaan kondisi setelah membandingkan nilai saat ini di DynamoDB dengan hasil yang diharapkan. Bagian ini opsional. Jika dihilangkan, itu default ke strategi. `Reject`    
** `strategy` **  
Strategi yang diambil oleh AWS AppSync DynamoDB resolver setelah membandingkan nilai saat ini di DynamoDB dengan hasil yang diharapkan. Bidang ini diperlukan dan memiliki nilai yang mungkin berikut:    
** `Reject` **  
Mutasi gagal, dan kesalahan ditambahkan ke respons GraphQL.  
** `Custom` **  
Penyelesai DynamoDB memanggil fungsi Lambda khusus untuk memutuskan cara menangani kegagalan pemeriksaan kondisi. AWS AppSync Ketika `strategy` diatur ke`Custom`, `lambdaArn` bidang harus berisi ARN dari fungsi Lambda untuk dipanggil.  
** `lambdaArn` **  
ARN dari fungsi Lambda untuk memanggil yang menentukan bagaimana DynamoDB resolver harus menangani kegagalan pemeriksaan AWS AppSync kondisi. Bidang ini hanya harus ditentukan ketika `strategy` diatur ke`Custom`. Untuk informasi selengkapnya tentang cara menggunakan fitur ini, lihat [Menangani Kegagalan Pemeriksaan Kondisi](#aws-appsync-resolver-mapping-template-reference-dynamodb-condition-handling).

## Menangani kegagalan pemeriksaan kondisi
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-condition-handling"></a>

Secara default, ketika pemeriksaan kondisi gagal, penyelesai AWS AppSync DynamoDB mengembalikan kesalahan untuk mutasi dan nilai objek saat ini di DynamoDB. Namun, AWS AppSync DynamoDB resolver menawarkan beberapa fitur tambahan untuk membantu pengembang menangani beberapa kasus tepi umum:
+ Jika AWS AppSync DynamoDB resolver dapat menentukan bahwa nilai saat ini di DynamoDB cocok dengan hasil yang diinginkan, ia memperlakukan operasi seolah-olah berhasil pula.
+ Alih-alih mengembalikan kesalahan, Anda dapat mengonfigurasi resolver untuk menjalankan fungsi Lambda khusus untuk memutuskan bagaimana penyelesai DynamoDB AWS AppSync harus menangani kegagalan.

Diagram alur untuk proses ini adalah:

![\[Flowchart showing process for transforming requests with mutation attempts and value checks.\]](http://docs.aws.amazon.com/id_id/appsync/latest/devguide/images/DynamoDB-condition-check-failure-handling.png)


### Memeriksa hasil yang diinginkan
<a name="checking-for-the-desired-result"></a>

Ketika pemeriksaan kondisi gagal, penyelesai AWS AppSync DynamoDB melakukan permintaan DynamoDB `GetItem` untuk mendapatkan nilai item saat ini dari DynamoDB. Secara default, ini menggunakan pembacaan yang sangat konsisten, namun ini dapat dikonfigurasi menggunakan `consistentRead` bidang di `condition` blok dan membandingkannya dengan hasil yang diharapkan:
+ Untuk `PutItem` operasi, AWS AppSync DynamoDB resolver membandingkan nilai saat ini terhadap nilai yang mencoba untuk menulis, tidak termasuk atribut yang tercantum dalam dari perbandingan. `equalsIgnore` Jika itemnya sama, ia memperlakukan operasi sebagai berhasil dan mengembalikan item yang diambil dari DynamoDB. Jika tidak, ia mengikuti strategi yang dikonfigurasi.

  Misalnya, jika dokumen pemetaan `PutItem` permintaan terlihat seperti berikut:

  ```
  {
     "version" : "2017-02-28",
     "operation" : "PutItem",
     "key" : {
        "id" : { "S" : "1" }
     },
     "attributeValues" : {
        "name" : { "S" : "Steve" },
        "version" : { "N" : 2 }
     },
     "condition" : {
        "expression" : "version = :expectedVersion",
        "expressionValues" : {
            ":expectedVersion" : { "N" : 1 }
        },
        "equalsIgnore": [ "version" ]
     }
  }
  ```

  Dan item yang saat ini ada di DynamoDB terlihat seperti berikut:

  ```
  {
     "id" : { "S" : "1" },
     "name" : { "S" : "Steve" },
     "version" : { "N" : 8 }
  }
  ```

  Penyelesai DynamoDB akan membandingkan item yang coba ditulisnya dengan nilai saat ini, melihat bahwa satu-satunya perbedaan adalah `version` bidang, tetapi karena dikonfigurasi untuk mengabaikan `version` bidang, ia memperlakukan operasi sebagai berhasil dan mengembalikan item yang diambil dari DynamoDB. AWS AppSync 
+ Untuk `DeleteItem` operasi, AWS AppSync DynamoDB resolver memeriksa untuk memverifikasi bahwa item dikembalikan dari DynamoDB. Jika tidak ada barang yang dikembalikan, itu memperlakukan operasi sebagai berhasil. Jika tidak, ia mengikuti strategi yang dikonfigurasi.
+ Untuk `UpdateItem` operasi, penyelesai AWS AppSync DynamoDB tidak memiliki informasi yang cukup untuk menentukan apakah item yang saat ini ada di DynamoDB cocok dengan hasil yang diharapkan, dan oleh karena itu mengikuti strategi yang dikonfigurasi.

Jika status objek saat ini di DynamoDB berbeda dari hasil yang diharapkan, penyelesai AWS AppSync DynamoDB mengikuti strategi yang dikonfigurasi, untuk menolak mutasi atau memanggil fungsi Lambda untuk menentukan apa yang harus dilakukan selanjutnya.

### Mengikuti strategi “tolak”
<a name="following-the-reject-strategy"></a>

Saat mengikuti `Reject` strategi, penyelesai AWS AppSync DynamoDB mengembalikan kesalahan untuk mutasi.

Misalnya, mengingat permintaan mutasi berikut:

```
mutation {
    updatePerson(id: 1, name: "Steve", expectedVersion: 1) {
        Name
        theVersion
    }
}
```

Jika item yang dikembalikan dari DynamoDB terlihat seperti berikut:

```
{
   "id" : { "S" : "1" },
   "name" : { "S" : "Steve" },
   "version" : { "N" : 8 }
}
```

Dan template pemetaan respons terlihat seperti berikut:

```
{
   "id" : $util.toJson($context.result.id),
   "Name" : $util.toJson($context.result.name),
   "theVersion" : $util.toJson($context.result.version)
}
```

Respons GraphQL terlihat seperti berikut:

```
{
  "data": null,
  "errors": [
    {
      "message": "The conditional request failed (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ConditionalCheckFailedException; Request ID: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ)"
      "errorType": "DynamoDB:ConditionalCheckFailedException",
      ...
    }
  ]
}
```

Juga, jika ada bidang dalam objek yang dikembalikan diisi oleh resolver lain dan mutasi telah berhasil, mereka tidak akan diselesaikan ketika objek dikembalikan di bagian. `error`

### Mengikuti strategi “kustom”
<a name="following-the-custom-strategy"></a>

Saat mengikuti `Custom` strategi, penyelesai AWS AppSync DynamoDB memanggil fungsi Lambda untuk memutuskan apa yang harus dilakukan selanjutnya. Fungsi Lambda memilih salah satu opsi berikut:
+  `reject`mutasi. Ini memberitahu AWS AppSync DynamoDB resolver untuk berperilaku seolah-olah strategi yang dikonfigurasi `Reject` adalah, mengembalikan kesalahan untuk mutasi dan nilai objek saat ini di DynamoDB seperti yang dijelaskan di bagian sebelumnya.
+  `discard`mutasi. Ini memberitahu AWS AppSync DynamoDB resolver untuk diam-diam mengabaikan kegagalan pemeriksaan kondisi dan mengembalikan nilai dalam DynamoDB.
+  `retry`mutasi. Ini memberitahu AWS AppSync DynamoDB resolver untuk mencoba lagi mutasi dengan dokumen pemetaan permintaan baru.

 **Permintaan doa Lambda** 

Penyelesai AWS AppSync DynamoDB memanggil fungsi Lambda yang ditentukan dalam. `lambdaArn` Ini menggunakan `service-role-arn` konfigurasi yang sama pada sumber data. Muatan doa memiliki struktur sebagai berikut:

```
{
    "arguments": { ... },
    "requestMapping": {... },
    "currentValue": { ... },
    "resolver": { ... },
    "identity": { ... }
}
```

Bidang didefinisikan sebagai berikut:

** `arguments` **  
Argumen dari mutasi GraphQL. Ini sama dengan argumen yang tersedia untuk dokumen pemetaan permintaan di`$context.arguments`.

** `requestMapping` **  
Dokumen pemetaan permintaan untuk operasi ini.

** `currentValue` **  
Nilai objek saat ini di DynamoDB.

** `resolver` **  
Informasi tentang AWS AppSync resolver.

** `identity` **  
Informasi tentang penelepon. Ini sama dengan informasi identitas yang tersedia untuk dokumen pemetaan permintaan di`$context.identity`.

Contoh lengkap dari muatan:

```
{
    "arguments": {
        "id": "1",
        "name": "Steve",
        "expectedVersion": 1
    },
    "requestMapping": {
        "version" : "2017-02-28",
        "operation" : "PutItem",
        "key" : {
           "id" : { "S" : "1" }
        },
        "attributeValues" : {
           "name" : { "S" : "Steve" },
           "version" : { "N" : 2 }
        },
        "condition" : {
           "expression" : "version = :expectedVersion",
           "expressionValues" : {
               ":expectedVersion" : { "N" : 1 }
           },
           "equalsIgnore": [ "version" ]
        }
    },
    "currentValue": {
        "id" : { "S" : "1" },
        "name" : { "S" : "Steve" },
        "version" : { "N" : 8 }
    },
    "resolver": {
        "tableName": "People",
        "awsRegion": "us-west-2",
        "parentType": "Mutation",
        "field": "updatePerson",
        "outputType": "Person"
    },
    "identity": {
        "accountId": "123456789012",
        "sourceIp": "x.x.x.x",
        "user": "AIDAAAAAAAAAAAAAAAAAA",
        "userArn": "arn:aws:iam::123456789012:user/appsync"
    }
}
```

 **Tanggapan Doa Lambda** 

Fungsi Lambda dapat memeriksa payload pemanggilan dan menerapkan logika bisnis apa pun untuk memutuskan bagaimana penyelesai AWS AppSync DynamoDB harus menangani kegagalan. Ada tiga opsi untuk menangani kegagalan pemeriksaan kondisi:
+  `reject`mutasi. Payload respons untuk opsi ini harus memiliki struktur ini:

  ```
  {
      "action": "reject"
  }
  ```

  Ini memberitahu AWS AppSync DynamoDB resolver untuk berperilaku seolah-olah strategi yang dikonfigurasi `Reject` adalah, mengembalikan kesalahan untuk mutasi dan nilai objek saat ini di DynamoDB, seperti yang dijelaskan pada bagian di atas.
+  `discard`mutasi. Payload respons untuk opsi ini harus memiliki struktur ini:

  ```
  {
      "action": "discard"
  }
  ```

  Ini memberitahu AWS AppSync DynamoDB resolver untuk diam-diam mengabaikan kegagalan pemeriksaan kondisi dan mengembalikan nilai dalam DynamoDB.
+  `retry`mutasi. Payload respons untuk opsi ini harus memiliki struktur ini:

  ```
  {
      "action": "retry",
      "retryMapping": { ... }
  }
  ```

  Ini memberitahu AWS AppSync DynamoDB resolver untuk mencoba lagi mutasi dengan dokumen pemetaan permintaan baru. Struktur `retryMapping` bagian tergantung pada operasi DynamoDB, dan merupakan bagian dari dokumen pemetaan permintaan lengkap untuk operasi itu.

  Untuk`PutItem`, `retryMapping` bagian tersebut memiliki struktur sebagai berikut. Untuk deskripsi `attributeValues` lapangan, lihat [PutItem](aws-appsync-resolver-mapping-template-reference-dynamodb-putitem.md).

  ```
  {
      "attributeValues": { ... },
      "condition": {
          "equalsIgnore" = [ ... ],
          "consistentRead" = true
      }
  }
  ```

  Untuk`UpdateItem`, `retryMapping` bagian tersebut memiliki struktur sebagai berikut. Untuk deskripsi `update` bagian ini, lihat [UpdateItem](aws-appsync-resolver-mapping-template-reference-dynamodb-updateitem.md).

  ```
  {
      "update" : {
          "expression" : "someExpression"
          "expressionNames" : {
              "#foo" : "foo"
          },
          "expressionValues" : {
              ":bar" : ... typed value
          }
      },
      "condition": {
          "consistentRead" = true
      }
  }
  ```

  Untuk`DeleteItem`, `retryMapping` bagian tersebut memiliki struktur sebagai berikut.

  ```
  {
      "condition": {
          "consistentRead" = true
      }
  }
  ```

  Tidak ada cara untuk menentukan operasi atau kunci yang berbeda untuk dikerjakan. AWS AppSync DynamoDB resolver hanya memungkinkan percobaan ulang dari operasi yang sama pada objek yang sama. Juga, `condition` bagian ini tidak mengizinkan a `conditionalCheckFailedHandler` untuk ditentukan. Jika percobaan ulang gagal, penyelesai AWS AppSync DynamoDB mengikuti strategi. `Reject`

Berikut adalah contoh fungsi Lambda untuk menangani permintaan yang gagal`PutItem`. Logika bisnis melihat siapa yang membuat panggilan. Jika dibuat oleh`jeffTheAdmin`, ia mencoba ulang permintaan, memperbarui `version` dan `expectedVersion` dari item yang saat ini ada di DynamoDB. Jika tidak, ia menolak mutasi.

```
exports.handler = (event, context, callback) => {
    console.log("Event: "+ JSON.stringify(event));

    // Business logic goes here.

    var response;
    if ( event.identity.user == "jeffTheAdmin" ) {
        response = {
            "action" : "retry",
            "retryMapping" : {
                "attributeValues" : event.requestMapping.attributeValues,
                "condition" : {
                    "expression" : event.requestMapping.condition.expression,
                    "expressionValues" : event.requestMapping.condition.expressionValues
                }
            }
        }
        response.retryMapping.attributeValues.version = { "N" : event.currentValue.version.N + 1 }
        response.retryMapping.condition.expressionValues[':expectedVersion'] = event.currentValue.version

    } else {
        response = { "action" : "reject" }
    }

    console.log("Response: "+ JSON.stringify(response))
    callback(null, response)
};
```

# Ekspresi kondisi transaksi
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-transaction-condition-expressions"></a>

Ekspresi kondisi transaksi tersedia dalam template pemetaan permintaan dari keempat jenis operasi di`TransactWriteItems`, yaitu,,`PutItem`, `DeleteItem``UpdateItem`, dan`ConditionCheck`.

Untuk`PutItem`,`DeleteItem`, dan`UpdateItem`, ekspresi kondisi transaksi adalah opsional. Untuk`ConditionCheck`, ekspresi kondisi transaksi diperlukan.

## Contoh 1
<a name="id22"></a>

Dokumen `DeleteItem` pemetaan transaksional berikut tidak memiliki ekspresi kondisi. Akibatnya, ia menghapus item di DynamoDB.

```
{
   "version": "2018-05-29",
   "operation": "TransactWriteItems",
   "transactItems": [
      {
         "table": "posts",
         "operation": "DeleteItem",
         "key": {
            "id": { "S" : "1" }
         }
      }
   ]
}
```

## Contoh 2
<a name="id23"></a>

Dokumen `DeleteItem` pemetaan transaksional berikut memang memiliki ekspresi kondisi transaksi yang memungkinkan operasi berhasil hanya jika penulis posting itu sama dengan nama tertentu.

```
{
   "version": "2018-05-29",
   "operation": "TransactWriteItems",
   "transactItems": [
      {
         "table": "posts",
         "operation": "DeleteItem",
         "key": {
            "id": { "S" : "1" }
         }
         "condition": {
            "expression": "author = :author",
            "expressionValues": {
               ":author": { "S" : "Chunyan" }
            }
         }
      }
   ]
}
```

Jika pemeriksaan kondisi gagal, itu akan menyebabkan `TransactionCanceledException` dan detail kesalahan akan dikembalikan`$ctx.result.cancellationReasons`. Perhatikan bahwa secara default, item lama di DynamoDB yang membuat pemeriksaan kondisi gagal akan dikembalikan. `$ctx.result.cancellationReasons`

## Menentukan suatu kondisi
<a name="id24"></a>

Dokumen pemetaan `PutItem``UpdateItem`,, dan `DeleteItem` permintaan semuanya memungkinkan `condition` bagian opsional untuk ditentukan. Jika dihilangkan, tidak ada pemeriksaan kondisi yang dilakukan. Jika ditentukan, kondisi harus benar agar operasi berhasil. `ConditionCheck`Harus memiliki `condition` bagian yang akan ditentukan. Syaratnya harus benar agar seluruh transaksi berhasil.

`condition`Bagian memiliki struktur sebagai berikut:

```
"condition": {
    "expression": "someExpression",
    "expressionNames": {
        "#foo": "foo"
    },
    "expressionValues": {
        ":bar": ... typed value
    },
    "returnValuesOnConditionCheckFailure": false
}
```

Bidang berikut menentukan kondisi:

** `expression` **  
Ekspresi pembaruan itu sendiri. Untuk informasi selengkapnya tentang cara menulis ekspresi kondisi, lihat dokumentasi [DynamoDB ConditionExpressions ](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ConditionExpressions.html). Bidang ini harus ditentukan.

** `expressionNames` **  
Substitusi untuk placeholder nama atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci sesuai dengan placeholder nama yang digunakan dalam *ekspresi*, dan nilainya harus berupa string yang sesuai dengan nama atribut item di DynamoDB. *Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nama atribut ekspresi yang digunakan dalam ekspresi.*

** `expressionValues` **  
Substitusi untuk placeholder nilai atribut ekspresi, dalam bentuk pasangan kunci-nilai. Kunci sesuai dengan placeholder nilai yang digunakan dalam ekspresi, dan nilainya harus berupa nilai yang diketik. Untuk informasi selengkapnya tentang cara menentukan “nilai yang diketik”, lihat Jenis Sistem (pemetaan permintaan). Ini harus ditentukan. Bidang ini bersifat opsional, dan seharusnya hanya diisi dengan substitusi untuk placeholder nilai atribut ekspresi yang digunakan dalam ekspresi.

** `returnValuesOnConditionCheckFailure` **  
Tentukan apakah akan mengambil item di DynamoDB kembali ketika pemeriksaan kondisi gagal. Item yang diambil akan masuk`$ctx.result.cancellationReasons[$index].item`, di `$index` mana indeks item permintaan yang gagal dalam pemeriksaan kondisi. Nilai ini default ke true.

# Proyeksi
<a name="aws-appsync-resolver-mapping-template-reference-dynamodb-projections"></a>

Saat membaca objek di DynamoDB menggunakan `GetItem``Scan`,,,`Query`, `TransactGetItems` dan operasi`BatchGetItem`, Anda dapat secara opsional menentukan proyeksi yang mengidentifikasi atribut yang Anda inginkan. Proyeksi memiliki struktur berikut, yang mirip dengan filter: 

```
"projection" : {
    "expression" : "projection expression"
    "expressionNames" : {
        "#name" : "name",
    }
}
```

Bidang didefinisikan sebagai berikut:

**`expression`**   
Ekspresi proyeksi, yang merupakan string. Untuk mengambil atribut tunggal, tentukan namanya. Untuk beberapa atribut, nama harus berupa nilai yang dipisahkan koma. Untuk informasi selengkapnya tentang penulisan ekspresi proyeksi, lihat dokumentasi ekspresi proyeksi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ProjectionExpressions.html). Bidang ini wajib diisi. 

 **`expressionNames`**   
Substitusi untuk placeholder *nama* atribut ekspresi dalam bentuk pasangan kunci-nilai. Kunci tersebut sesuai dengan placeholder nama yang digunakan dalam file. `expression` Nilai harus berupa string yang sesuai dengan nama atribut item di DynamoDB. Bidang ini opsional dan hanya boleh diisi dengan substitusi untuk placeholder nama atribut ekspresi yang digunakan dalam. `expression` Untuk informasi selengkapnya`expressionNames`, lihat dokumentasi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ExpressionAttributeNames.html). 

## Contoh 1
<a name="id25"></a>

Contoh berikut adalah bagian proyeksi untuk template pemetaan VTL di mana hanya atribut `author` dan `id` dikembalikan dari DynamoDB:

```
"projection" : {
    "expression" : "#author, id",
    "expressionNames" : {
        "#author" : "author"
    }
}
```

**Tip**  
[Anda dapat mengakses set pemilihan permintaan GraphQL Anda menggunakan \$1context.info. selectionSetList](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference.html#aws-appsync-resolver-context-reference-info). Bidang ini memungkinkan Anda untuk membingkai ekspresi proyeksi Anda secara dinamis sesuai dengan kebutuhan Anda.

**catatan**  
Saat menggunakan ekspresi proyeksi dengan `Scan` operasi `Query` dan, nilai untuk `select` harus`SPECIFIC_ATTRIBUTES`. Untuk informasi selengkapnya, lihat dokumentasi [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html#DDB-Query-request-Select).

# AWS AppSync referensi template pemetaan resolver untuk RDS
<a name="resolver-mapping-template-reference-rds"></a>

Template pemetaan resolver AWS AppSync RDS memungkinkan pengembang mengirim kueri SQL ke API Data untuk Amazon Aurora Tanpa Server dan mendapatkan kembali hasil kueri ini.

## Meminta template pemetaan
<a name="request-mapping-template"></a>

Template pemetaan permintaan RDS cukup sederhana:

```
{
    "version": "2018-05-29",
    "statements": [],
    "variableMap": {},
    "variableTypeHintMap": {}
}
```

Berikut adalah representasi skema JSON dari template pemetaan permintaan RDS, setelah diselesaikan.

```
{
    "definitions": {},
    "$schema": "https://json-schema.org/draft-07/schema#",
    "$id": "https://example.com/root.json",
    "type": "object",
    "title": "The Root Schema",
    "required": [
        "version",
        "statements",
        "variableMap"
    ],
    "properties": {
        "version": {
            "$id": "#/properties/version",
            "type": "string",
            "title": "The Version Schema",
            "default": "",
            "examples": [
                "2018-05-29"
            ],
            "enum": [
                "2018-05-29"
            ],
            "pattern": "^(.*)$"
        },
        "statements": {
            "$id": "#/properties/statements",
            "type": "array",
            "title": "The Statements Schema",
            "items": {
                "$id": "#/properties/statements/items",
                "type": "string",
                "title": "The Items Schema",
                "default": "",
                "examples": [
                    "SELECT * from BOOKS"
                ],
                "pattern": "^(.*)$"
            }
        },
        "variableMap": {
            "$id": "#/properties/variableMap",
            "type": "object",
            "title": "The Variablemap Schema"
        },
        "variableTypeHintMap": {
            "$id": "#/properties/variableTypeHintMap",
            "type": "object",
            "title": "The variableTypeHintMap Schema"
        }
    }
}
```

Berikut ini adalah contoh template pemetaan permintaan dengan query statis:

```
{
    "version": "2018-05-29",
    "statements": [
        "select title, isbn13 from BOOKS where author = 'Mark Twain'"
    ]
}
```

## Versi
<a name="version"></a>

Umum untuk semua template pemetaan permintaan, bidang versi mendefinisikan versi yang digunakan template. Bidang versi diperlukan. Nilai “2018-05-29" adalah satu-satunya versi yang didukung untuk templat pemetaan Amazon RDS.

```
"version": "2018-05-29"
```

## Pernyataan dan VariableMap
<a name="statements-variablemap"></a>

Array pernyataan adalah placeholder untuk kueri yang disediakan pengembang. Saat ini, hingga dua kueri per permintaan template pemetaan didukung. `variableMap`Ini adalah bidang opsional yang berisi alias yang dapat digunakan untuk membuat pernyataan SQL lebih pendek dan lebih mudah dibaca. Misalnya, hal berikut ini dimungkinkan:

```
{
"version": "2018-05-29",
    "statements": [
        "insert into BOOKS VALUES (:AUTHOR, :TITLE, :ISBN13)",
        "select * from BOOKS WHERE isbn13 = :ISBN13"
    ],
    "variableMap": {
        ":AUTHOR": $util.toJson($ctx.args.newBook.author),
        ":TITLE": $util.toJson($ctx.args.newBook.title),
        ":ISBN13": $util.toJson($ctx.args.newBook.isbn13)
    }
}
```

AWS AppSync akan menggunakan nilai peta variabel untuk membuat **[SqlParameterized](https://docs.aws.amazon.com/rdsdataservice/latest/APIReference/API_SqlParameter.html)**kueri yang akan dikirim ke API Data Tanpa Server Amazon Aurora. Pernyataan SQL dijalankan dengan parameter yang disediakan dalam peta variabel, yang menghilangkan risiko injeksi SQL. 

## VariableTypeHintMap
<a name="variabletypehintmap"></a>

`variableTypeHintMap`Ini adalah bidang opsional yang berisi tipe alias yang dapat digunakan untuk mengirim petunjuk tipe [parameter SQL](https://docs.aws.amazon.com/rdsdataservice/latest/APIReference/API_SqlParameter.html). Petunjuk jenis ini menghindari casting eksplisit dalam pernyataan SQL, membuatnya lebih pendek. Misalnya, hal berikut ini dimungkinkan:

```
{
    "version": "2018-05-29",
    "statements": [
        "insert into LOGINDATA VALUES (:ID, :TIME)",
        "select * from LOGINDATA WHERE id = :ID"
     ],
     "variableMap": {
        ":ID": $util.toJson($ctx.args.id),
        ":TIME": $util.toJson($ctx.args.time)
     },
     "variableTypeHintMap": {
        ":id": "UUID",
        ":time": "TIME"
     }
}
```

AWS AppSync akan menggunakan nilai peta variabel untuk membuat kueri yang dikirim ke API Data Tanpa Server Amazon Aurora. Ini juga menggunakan `variableTypeHintMap` data dan mengirimkan informasi tipe ke RDS. [Didukung RDS `typeHints` dapat ditemukan di sini.](https://docs.aws.amazon.com/rdsdataservice/latest/APIReference/API_SqlParameter.html)

# AWS AppSync referensi template pemetaan resolver untuk OpenSearch
<a name="resolver-mapping-template-reference-elasticsearch"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

 AWS AppSync Resolver untuk Amazon OpenSearch Service memungkinkan Anda menggunakan GraphQL untuk menyimpan dan mengambil data di domain Layanan yang ada di akun Anda. OpenSearch Penyelesai ini berfungsi dengan memungkinkan Anda memetakan permintaan GraphQL yang masuk ke dalam permintaan Layanan, lalu memetakan OpenSearch respons Layanan kembali ke GraphQL. OpenSearch Bagian ini menjelaskan template pemetaan untuk operasi OpenSearch Layanan yang didukung.

## Meminta template pemetaan
<a name="request-mapping-template"></a>

Sebagian besar templat pemetaan permintaan OpenSearch Layanan memiliki struktur umum di mana hanya beberapa bagian yang berubah. Contoh berikut menjalankan pencarian terhadap domain OpenSearch Layanan, di mana dokumen diatur di bawah indeks yang disebut`post`. Parameter pencarian didefinisikan di `body` bagian, dengan banyak klausa kueri umum yang didefinisikan di `query` bidang. Contoh ini akan mencari dokumen yang berisi `"Nadia"``"Bailey"`, atau, atau keduanya, di `author` bidang dokumen:

```
{
    "version":"2017-02-28",
    "operation":"GET",
    "path":"/post/_search",
    "params":{
        "headers":{},
        "queryString":{},
        "body":{
            "from":0,
            "size":50,
            "query" : {
                "bool" : {
                    "should" : [
                        {"match" : { "author" : "Nadia" }},
                        {"match" : { "author" : "Bailey" }}
                    ]
                }
            }
        }
    }
}
```

## Templat pemetaan respons
<a name="response-mapping-template"></a>

Seperti sumber data lainnya, OpenSearch Layanan mengirimkan respons AWS AppSync yang perlu dikonversi ke GraphQL.

Sebagian besar kueri GraphQL mencari bidang `_source` dari respons Layanan. OpenSearch Karena Anda dapat melakukan pencarian untuk mengembalikan dokumen individual atau daftar dokumen, ada dua templat pemetaan respons umum yang digunakan dalam OpenSearch Layanan:

 **Daftar Hasil** 

```
[
    #foreach($entry in $context.result.hits.hits)
      #if( $velocityCount > 1 ) , #end
        $utils.toJson($entry.get("_source"))
    #end
]
```

 **Barang Individu** 

```
$utils.toJson($context.result.get("_source"))
```

## `operation`lapangan
<a name="operation-field"></a>

**catatan**  
Ini hanya berlaku untuk template pemetaan Permintaan. 

Metode HTTP atau kata kerja (GET, POST, PUT, HEAD atau DELETE) yang AWS AppSync mengirim ke domain OpenSearch Layanan. Baik kunci dan nilainya harus berupa string.

```
"operation" : "PUT"
```

## `path`lapangan
<a name="path-field"></a>

**catatan**  
Ini hanya berlaku untuk template pemetaan Permintaan. 

Jalur pencarian untuk permintaan OpenSearch Layanan dari AWS AppSync. Ini membentuk URL untuk kata kerja HTTP operasi. Baik kunci dan nilainya harus berupa string.

```
"path" : "/<indexname>/_doc/<_id>"
"path" : "/<indexname>/_doc"
"path" : "/<indexname>/_search"
"path" : "/<indexname>/_update/<_id>
```

Ketika template pemetaan dievaluasi, jalur ini dikirim sebagai bagian dari permintaan HTTP, termasuk domain OpenSearch Layanan. Misalnya, contoh sebelumnya mungkin diterjemahkan ke:

```
GET https://opensearch-domain-name.REGION.es.amazonaws.com/indexname/type/_search
```

## `params`lapangan
<a name="params-field"></a>

**catatan**  
Ini hanya berlaku untuk template pemetaan Permintaan. 

Digunakan untuk menentukan tindakan apa yang dilakukan penelusuran Anda, paling umum dengan menetapkan nilai **kueri** di dalam **badan**. Namun, ada beberapa kemampuan lain yang dapat dikonfigurasi, seperti pemformatan respons.
+  **header** 

  Informasi header, sebagai pasangan kunci-nilai. Baik kunci dan nilainya harus berupa string. Contoh:

  ```
  "headers" : {
      "Content-Type" : "application/json"
  }
  ```
**catatan**  
AWS AppSync saat ini hanya mendukung JSON sebagai file. `Content-Type`
+  **QueryString** 

  Pasangan nilai kunci yang menentukan opsi umum, seperti pemformatan kode untuk respons JSON. Baik kunci dan nilainya harus berupa string. Misalnya, jika Anda ingin mendapatkan JSON yang diformat dengan cantik, Anda akan menggunakan:

  ```
  "queryString" : {
      "pretty" : "true"
  }
  ```
+  **tubuh** 

  Ini adalah bagian utama dari permintaan Anda, memungkinkan AWS AppSync untuk membuat permintaan pencarian yang terbentuk dengan baik ke domain OpenSearch Layanan Anda. Kuncinya harus berupa string yang terdiri dari sebuah objek. Beberapa demonstrasi ditunjukkan di bawah ini.

 **Contoh 1** 

Kembalikan semua dokumen dengan kota yang cocok dengan “seattle”:

```
"body":{
    "from":0,
    "size":50,
    "query" : {
        "match" : {
            "city" : "seattle"
        }
    }
}
```

 **Contoh 2** 

Kembalikan semua dokumen yang cocok dengan “washington” sebagai kota atau negara bagian:

```
"body":{
    "from":0,
    "size":50,
    "query" : {
        "multi_match" : {
            "query" : "washington",
            "fields" : ["city", "state"]
        }
    }
}
```

## Melewati variabel
<a name="passing-variables"></a>

**catatan**  
Ini hanya berlaku untuk template pemetaan Permintaan. 

Anda juga dapat meneruskan variabel sebagai bagian dari evaluasi dalam pernyataan VTL. Misalnya, Anda memiliki kueri GraphQL seperti berikut:

```
query {
    searchForState(state: "washington"){
        ...
    }
}
```

Template pemetaan dapat mengambil status sebagai argumen:

```
"body":{
    "from":0,
    "size":50,
    "query" : {
        "multi_match" : {
            "query" : "$context.arguments.state",
            "fields" : ["city", "state"]
        }
    }
}
```

Untuk daftar utilitas yang dapat Anda sertakan dalam VTL, lihat Header [Permintaan Akses](resolver-context-reference.md#aws-appsync-resolver-context-reference-util).

# AWS AppSync referensi template pemetaan resolver untuk Lambda
<a name="resolver-mapping-template-reference-lambda"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

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 menggunakan template pemetaan untuk memberikan petunjuk AWS AppSync tentang sifat operasi yang akan dipanggil. Bagian ini menjelaskan template pemetaan yang berbeda untuk operasi Lambda yang didukung.

## Meminta template pemetaan
<a name="request-mapping-template"></a>

Templat pemetaan permintaan Lambda menangani bidang yang terkait dengan fungsi Lambda Anda:

```
{
  "version": string,
  "operation": Invoke|BatchInvoke,
  "payload": any type,
  "invocationType": RequestResponse|Event
}
```

Ini adalah representasi skema JSON dari template pemetaan permintaan Lambda saat diselesaikan:

```
{
  "definitions": {},
  "$schema": "https://json-schema.org/draft-06/schema#",
  "$id": "https://aws.amazon.com/appsync/request-mapping-template.json",
  "type": "object",
  "properties": {
    "version": {
      "$id": "/properties/version",
      "type": "string",
      "enum": [
        "2018-05-29"
      ],
      "title": "The Mapping template version.",
      "default": "2018-05-29"
    },
    "operation": {
      "$id": "/properties/operation",
      "type": "string",
      "enum": [
        "Invoke",
        "BatchInvoke"
      ],
      "title": "The Mapping template operation.",
      "description": "What operation to execute.",
      "default": "Invoke"
    },
    "payload": {},
    "invocationType": {
      "$id": "/properties/invocationType",
      "type": "string",
      "enum": [
        "RequestResponse",
        "Event"
      ],
      "title": "The Mapping template invocation type.",
      "description": "What invocation type to execute.",
      "default": "RequestResponse"
    }
  },
  "required": [
    "version",
    "operation"
  ],
  "additionalProperties": false
}
```

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

```
{
  "version": "2018-05-29",
  "operation": "Invoke",
  "payload": {
    "field": "getPost",
    "arguments": $util.toJson($context.arguments)
  }
}
```

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

```
{
  "version": "2018-05-29",
  "operation": "Invoke",
  "payload": {
    "field": "getPost",
    "arguments": {
      "id": "postId1"
    }
  }
}
```

### Versi
<a name="version"></a>

Umum untuk semua template pemetaan permintaan, `version` mendefinisikan versi yang digunakan template. `version`Diperlukan dan merupakan nilai statis:

```
"version": "2018-05-29"
```

### Operasi
<a name="operation"></a>

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.

Untuk`Invoke`, template pemetaan permintaan yang diselesaikan cocok dengan muatan input fungsi Lambda. Mari kita memodifikasi contoh di atas:

```
{
  "version": "2018-05-29",
  "operation": "Invoke",
    "payload": {
      "arguments": $util.toJson($context.arguments)
    }
}
```

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

```
{
  "version": "2018-05-29",
  "operation": "Invoke",
    "payload": {
      "arguments": {
        "id": "postId1"
      }
    }
}
```

Untuk`BatchInvoke`, template pemetaan diterapkan ke setiap penyelesai bidang dalam batch. Untuk keringkasan, AWS AppSync gabungkan semua `payload` nilai template pemetaan yang diselesaikan ke dalam daftar di bawah satu objek yang cocok dengan templat pemetaan. Contoh template berikut menunjukkan penggabungan:

```
{
  "version": "2018-05-29",
  "operation": "BatchInvoke",
  "payload": $util.toJson($context)
}
```

Template ini diselesaikan ke dalam dokumen pemetaan berikut:

```
{
  "version": "2018-05-29",
  "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
<a name="payload"></a>

`payload`Bidang adalah wadah yang digunakan untuk meneruskan JSON yang terbentuk dengan baik ke fungsi Lambda. Jika `operation` bidang diatur ke`BatchInvoke`, AWS AppSync membungkus `payload` nilai yang ada ke dalam daftar. `payload`Bidang ini opsional.

### Jenis doa
<a name="async-invocation-type"></a>

Sumber data Lambda memungkinkan Anda menentukan dua jenis pemanggilan: dan. `RequestResponse` `Event` [Jenis pemanggilan identik dengan tipe pemanggilan yang ditentukan dalam API Lambda.](https://docs.aws.amazon.com//lambda/latest/api/API_Invoke.html) 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.](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html) `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 memodifikasi contoh di atas:

```
{
  "version": "2018-05-29",
  "operation": "Invoke",
  "invocationType": "Event"
  "payload": {
    "arguments": $util.toJson($context.arguments)
  }
}
```

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

```
{
  "version": "2018-05-29",
  "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` Kami menyarankan Anda menonaktifkan caching resolver untuk resolver tipe `Event` pemanggilan karena ini tidak akan dikirim ke Lambda jika ada cache hit.

## Templat pemetaan respons
<a name="response-mapping-template"></a>

Seperti sumber data lainnya, fungsi Lambda Anda mengirimkan respons AWS AppSync yang harus dikonversi ke tipe GraphQL.

Hasil dari fungsi Lambda diatur pada `context` objek yang tersedia melalui properti Velocity Template Language (VTL). `$context.result`

Jika bentuk respons fungsi Lambda Anda sama persis dengan bentuk tipe GraphQL, Anda dapat meneruskan respons menggunakan templat pemetaan respons berikut:

```
$util.toJson($context.result)
```

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

## Respons batch fungsi Lambda
<a name="aws-appsync-resolver-mapping-template-reference-lambda-batched-response"></a>

Jika `operation` bidang diatur ke`BatchInvoke`, 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.

## Resolver Lambda Langsung
<a name="direct-lambda-resolvers"></a>

Jika Anda ingin menghindari penggunaan template pemetaan sepenuhnya, AWS AppSync dapat memberikan payload default ke fungsi Lambda Anda dan respons fungsi Lambda default ke tipe GraphQL. Anda dapat memilih untuk menyediakan template permintaan, template respons, atau tidak, dan AWS AppSync menanganinya sesuai dengan itu.

### Templat pemetaan permintaan Lambda langsung
<a name="lambda-mapping-template-bypass-request"></a>

Ketika template pemetaan permintaan tidak disediakan, AWS AppSync akan mengirim `Context` objek langsung ke fungsi Lambda Anda sebagai `Invoke` operasi. Untuk informasi lebih lanjut tentang struktur objek `Context`, lihat [AWS AppSync referensi konteks template pemetaan resolver](resolver-context-reference.md).

### Templat pemetaan respons Lambda langsung
<a name="lambda-mapping-template-bypass-response"></a>

Ketika template pemetaan respons tidak disediakan, AWS AppSync lakukan salah satu dari dua hal setelah menerima respons fungsi Lambda Anda. Jika Anda tidak menyediakan template pemetaan permintaan atau jika Anda menyediakan template pemetaan permintaan dengan versi`2018-05-29`, responsnya akan setara dengan template pemetaan respons berikut:

```
#if($ctx.error)
     $util.error($ctx.error.message, $ctx.error.type, $ctx.result)
 #end
 $util.toJson($ctx.result)
```

Jika Anda menyediakan templat dengan versinya`2017-02-28`, logika respons berfungsi setara dengan templat pemetaan respons berikut:

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

Secara dangkal, bypass template pemetaan beroperasi mirip dengan menggunakan templat pemetaan tertentu seperti yang ditunjukkan pada contoh sebelumnya. Namun, di balik layar, evaluasi template pemetaan dielakkan sepenuhnya. Karena langkah evaluasi template dilewati, aplikasi mungkin mengalami lebih sedikit overhead dan latensi selama respons dalam beberapa skenario dibandingkan dengan fungsi Lambda dengan template pemetaan respons yang perlu dievaluasi. 

### Penanganan kesalahan khusus dalam respons Resolver Lambda Langsung
<a name="lambda-mapping-template-bypass-errors"></a>

Anda dapat menyesuaikan respons kesalahan dari fungsi Lambda yang dipanggil Direct Lambda Resolvers dengan memunculkan pengecualian khusus. Contoh berikut menunjukkan cara membuat pengecualian kustom menggunakan JavaScript:

```
class CustomException extends Error {
  constructor(message) {
    super(message);
    this.name = "CustomException";
  }
}
 
throw new CustomException("Custom message");
```

Ketika pengecualian dinaikkan, `errorType` dan `errorMessage` adalah `name` dan`message`, masing-masing, dari kesalahan khusus yang dilemparkan.

Jika `errorType` ada`UnauthorizedException`, AWS AppSync mengembalikan pesan default (`"You are not authorized to make this call."`) bukan pesan kustom.

Cuplikan berikut adalah contoh respons GraphQL yang menunjukkan kustom: `errorType`

```
{
  "data": {
    "query": null
  },
  "errors": [
    {
      "path": [
        "query"
      ],
      "data": null,
      "errorType": "CustomException",
      "errorInfo": null,
      "locations": [
        {
          "line": 5,
          "column": 10,
          "sourceName": null
        }
      ],
      "message": "Custom Message"
    }
  ]
}
```

### Resolver Lambda Langsung: Batching diaktifkan
<a name="lambda-resolvers-batching"></a>

Anda dapat mengaktifkan batching untuk Resolver Lambda Langsung Anda dengan mengonfigurasi `maxBatchSize` pada resolver Anda. Bila `maxBatchSize` disetel ke nilai yang lebih besar daripada `0` untuk penyelesai Lambda Langsung, AWS AppSync kirimkan permintaan dalam batch ke fungsi Lambda Anda dalam ukuran hingga. `maxBatchSize` 

Menyetel `maxBatchSize` ke `0` pada penyelesai Lambda Langsung mematikan batching.

Untuk informasi lebih lanjut tentang cara kerja batching dengan resolver Lambda, lihat. [Kasus penggunaan lanjutan: Batching](tutorial-lambda-resolvers.md#advanced-use-case-batching)

#### Meminta template pemetaan
<a name="lambda-resolvers-batching-request-template"></a>

Ketika batching diaktifkan dan template pemetaan permintaan tidak disediakan, AWS AppSync mengirimkan daftar `Context` objek sebagai `BatchInvoke` operasi langsung ke fungsi Lambda Anda.

#### Templat pemetaan respons
<a name="lambda-resolvers-batching-response-template"></a>

Saat batching diaktifkan dan templat pemetaan respons tidak disediakan, logika respons setara dengan templat pemetaan respons berikut:

```
#if( $context.result && $context.result.errorMessage )
      $utils.error($context.result.errorMessage, $context.result.errorType,
      $context.result.data)
#else
      $utils.toJson($context.result.data)
#end
```

Fungsi Lambda harus mengembalikan daftar hasil dalam urutan yang sama dengan daftar `Context` objek yang dikirim. Anda dapat mengembalikan kesalahan individu dengan memberikan `errorMessage` dan `errorType` untuk hasil tertentu. Setiap hasil dalam daftar memiliki format berikut:

```
{
   "data" : { ... }, // your data
   "errorMessage" : { ... }, // optional, if included an error entry is added to the "errors" object in the AppSync response 
   "errorType" : { ... } // optional, the error type
}
```

**catatan**  
Bidang lain dalam objek hasil saat ini diabaikan.

#### Menangani kesalahan dari Lambda
<a name="lambda-resolvers-batching-error-handling"></a>

Anda dapat mengembalikan kesalahan untuk semua hasil dengan melempar pengecualian atau kesalahan dalam fungsi Lambda Anda. Jika permintaan payload atau ukuran respons untuk permintaan batch Anda terlalu besar, Lambda mengembalikan kesalahan. Dalam hal ini, Anda harus mempertimbangkan untuk mengurangi `maxBatchSize` atau mengurangi ukuran muatan respons.

Untuk informasi tentang penanganan kesalahan individu, lihat[Mengembalikan kesalahan individu](tutorial-lambda-resolvers.md#returning-individual-errors).

#### Contoh fungsi Lambda
<a name="sample-lambda-function"></a>

Dengan menggunakan skema di bawah ini, Anda dapat membuat Resolver Lambda Langsung untuk penyelesai bidang dan mengaktifkan `Post.relatedPosts` pengelompokan dengan mengatur di atas: `maxBatchSize` `0`

```
schema {
    query: Query
    mutation: Mutation
}

type Query {
    getPost(id:ID!): Post
    allPosts: [Post]
}

type Mutation {
    addPost(id: ID!, author: String!, title: String, content: String, url: String): Post!
}

type Post {
    id: ID!
    author: String!
    title: String
    content: String
    url: String
    ups: Int
    downs: Int
    relatedPosts: [Post]
}
```

Dalam kueri berikut, fungsi Lambda akan dipanggil dengan kumpulan permintaan untuk diselesaikan: `relatedPosts`

```
query getAllPosts {
  allPosts {
    id
    relatedPosts {
      id
    }
  }
}
```

Implementasi sederhana dari fungsi Lambda disediakan di bawah ini:

```
const posts = {
  1: {
    id: '1',
    title: 'First book',
    author: 'Author1',
    url: 'https://amazon.com/',
    content:
      'SAMPLE TEXT AUTHOR 1 SAMPLE TEXT AUTHOR 1 SAMPLE TEXT AUTHOR 1 SAMPLE TEXT AUTHOR 1 SAMPLE TEXT AUTHOR 1 SAMPLE TEXT AUTHOR 1',
    ups: '100',
    downs: '10',
  },
  2: {
    id: '2',
    title: 'Second book',
    author: 'Author2',
    url: 'https://amazon.com',
    content: 'SAMPLE TEXT AUTHOR 2 SAMPLE TEXT AUTHOR 2 SAMPLE TEXT',
    ups: '100',
    downs: '10',
  },
  3: { id: '3', title: 'Third book', author: 'Author3', url: null, content: null, ups: null, downs: null },
  4: {
    id: '4',
    title: 'Fourth book',
    author: 'Author4',
    url: 'https://www.amazon.com/',
    content:
      'SAMPLE TEXT AUTHOR 4 SAMPLE TEXT AUTHOR 4 SAMPLE TEXT AUTHOR 4 SAMPLE TEXT AUTHOR 4 SAMPLE TEXT AUTHOR 4 SAMPLE TEXT AUTHOR 4 SAMPLE TEXT AUTHOR 4 SAMPLE TEXT AUTHOR 4',
    ups: '1000',
    downs: '0',
  },
  5: {
    id: '5',
    title: 'Fifth book',
    author: 'Author5',
    url: 'https://www.amazon.com/',
    content: 'SAMPLE TEXT AUTHOR 5 SAMPLE TEXT AUTHOR 5 SAMPLE TEXT AUTHOR 5 SAMPLE TEXT AUTHOR 5 SAMPLE TEXT',
    ups: '50',
    downs: '0',
  },
}

const relatedPosts = {
  1: [posts['4']],
  2: [posts['3'], posts['5']],
  3: [posts['2'], posts['1']],
  4: [posts['2'], posts['1']],
  5: [],
}
exports.handler = async (event) => {
  console.log('event ->', event)
  // retrieve the ID of each post
  const ids = event.map((context) => context.source.id)
  // fetch the related posts for each post id
  const related = ids.map((id) => relatedPosts[id])

  // return the related posts; or an error if none were found
  return related.map((r) => {
    if (r.length > 0) {
      return { data: r }
    } else {
      return { data: null, errorMessage: 'Not found', errorType: 'ERROR' }
    }
  })
}
```

# AWS AppSync referensi template pemetaan resolver untuk EventBridge
<a name="resolver-mapping-template-reference-eventbridge"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

Template pemetaan AWS AppSync resolver yang digunakan dengan sumber EventBridge data memungkinkan Anda mengirim acara khusus ke bus Amazon. EventBridge 

## Meminta template pemetaan
<a name="request-mapping-template"></a>

Templat pemetaan `PutEvents` permintaan memungkinkan Anda mengirim beberapa acara khusus ke bus EventBridge acara. Dokumen pemetaan memiliki struktur sebagai berikut:

```
{
    "version" : "2018-05-29", 
    "operation" : "PutEvents",
    "events" : [{}]
}
```

Berikut ini adalah contoh template pemetaan permintaan untuk EventBridge: 

```
{
    "version": "2018-05-29",
    "operation": "PutEvents",
    "events": [{
        "source": "com.mycompany.myapp",
        "detail": {
            "key1" : "value1",
            "key2" : "value2"
        },
        "detailType": "myDetailType1"
    },
    {
        "source": "com.mycompany.myapp",
        "detail": {
            "key3" : "value3",
            "key4" : "value4"
        },
        "detailType": "myDetailType2",
        "resources" : ["Resource1", "Resource2"],
        "time" : "2023-01-01T00:30:00.000Z"
    }
    
    ]
}
```

## Templat pemetaan respons
<a name="response-mapping-template"></a>

Jika `PutEvents` operasi berhasil, respons dari EventBridge termasuk dalam`$ctx.result`:

```
#if($ctx.error)
  $util.error($ctx.error.message, $ctx.error.type, $ctx.result)
#end
  $util.toJson($ctx.result)
```

Kesalahan yang terjadi saat melakukan `PutEvents` operasi seperti `InternalExceptions` atau `Timeouts` akan muncul di`$ctx.error`. Untuk daftar EventBridge kesalahan umum, lihat [referensi kesalahan EventBridge umum](https://docs.aws.amazon.com/eventbridge/latest/APIReference/CommonErrors.html).

`result`Akan dalam format berikut:

```
{
    "Entries" [
        {
            "ErrorCode" : String,
            "ErrorMessage" : String,
            "EventId" : String
        }
    ],
    "FailedEntryCount" : number
}
```
+ **Entri**

  Hasil acara yang dicerna, baik yang berhasil maupun yang tidak berhasil. Jika konsumsi berhasil, entri memiliki `EventID` di dalamnya. Jika tidak, Anda dapat menggunakan `ErrorCode` dan `ErrorMessage` untuk mengidentifikasi masalah dengan entri.

  Untuk setiap catatan, indeks elemen respons sama dengan indeks dalam array permintaan.
+ **FailedEntryCount**

  Jumlah entri yang gagal. Nilai ini direpresentasikan sebagai bilangan bulat.

Untuk informasi lebih lanjut tentang tanggapan`PutEvents`, lihat [PutEvents](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEvents.html#API_PutEvents_ResponseElements).

**Contoh respon sampel 1**

Contoh berikut adalah `PutEvents` operasi dengan dua peristiwa sukses:

```
{
    "Entries" : [ 
        {
            "EventId": "11710aed-b79e-4468-a20b-bb3c0c3b4860"
        }, 
        {
            "EventId": "d804d26a-88db-4b66-9eaf-9a11c708ae82"
        }
    ],
    "FailedEntryCount" : 0
}
```

**Contoh respon sampel 2**

Contoh berikut adalah `PutEvents` operasi dengan tiga peristiwa, dua keberhasilan dan satu gagal:

```
{
    "Entries" : [ 
        {
            "EventId": "11710aed-b79e-4468-a20b-bb3c0c3b4860"
        }, 
        {
            "EventId": "d804d26a-88db-4b66-9eaf-9a11c708ae82"
        },
        {
            "ErrorCode" : "SampleErrorCode",
            "ErrorMessage" : "Sample Error Message"
        }
    ],
    "FailedEntryCount" : 1
}
```

## `PutEvents`bidang
<a name="putevents-field"></a>

`PutEvents`berisi bidang template pemetaan berikut:
+ **Versi**

  Umum untuk semua template pemetaan permintaan, `version` bidang mendefinisikan versi yang digunakan template. Bidang ini wajib diisi. Nilai `2018-05-29` adalah satu-satunya versi yang didukung untuk template EventBridge pemetaan.
+ **Operasi**

  Satu-satunya operasi yang didukung adalah`PutEvents`. Operasi ini memungkinkan Anda untuk menambahkan acara khusus ke bus acara Anda.
+ **Peristiwa**

  Serangkaian acara yang akan ditambahkan ke bus acara. Array ini harus memiliki alokasi 1 - 10 item.

  `Event`Objek adalah objek JSON valid yang memiliki bidang berikut:
  + `"source"`: String yang mendefinisikan sumber acara.
  + `"detail"`: Objek JSON yang dapat Anda gunakan untuk melampirkan informasi tentang acara tersebut. Bidang ini bisa berupa peta kosong (`{ }`).
  + `"detailType`: Sebuah string yang mengidentifikasi jenis acara.
  + `"resources"`: Sebuah array JSON string yang mengidentifikasi sumber daya yang terlibat dalam acara tersebut. Bidang ini bisa berupa array kosong.
  + `"time"`: Stempel waktu acara disediakan sebagai string. Ini harus mengikuti format [RFC3339](https://www.rfc-editor.org/rfc/rfc3339.txt)stempel waktu.

Cuplikan di bawah ini adalah beberapa contoh objek yang valid`Event`:

**Contoh 1**

```
{
    "source" : "source1",
    "detail" : {
        "key1" : [1,2,3,4],
        "key2" : "strval"
    },
    "detailType" : "sampleDetailType",
    "resources" : ["Resouce1", "Resource2"],
    "time" : "2022-01-10T05:00:10Z"
}
```

**Contoh 2**

```
{
    "source" : "source1",
    "detail" : {},
    "detailType" : "sampleDetailType"
}
```

**Contoh 3**

```
{
    "source" : "source1",
    "detail" : {
        "key1" : 1200
    },
    "detailType" : "sampleDetailType",
    "resources" : []
}
```

# AWS AppSync referensi template pemetaan resolver untuk sumber data `None`
<a name="resolver-mapping-template-reference-none"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

Template pemetaan AWS AppSync resolver yang digunakan dengan sumber data tipe *None*, memungkinkan Anda untuk membentuk permintaan untuk AWS AppSync operasi lokal.

## Meminta template pemetaan
<a name="request-mapping-template"></a>

Template pemetaan sederhana dan memungkinkan Anda untuk meneruskan informasi konteks sebanyak mungkin melalui `payload` lapangan.

```
{
   "version": string,
   "payload": any type
}
```

Berikut adalah representasi skema JSON dari template pemetaan permintaan, setelah diselesaikan:

```
{
    "definitions": {},
    "$schema": "https://json-schema.org/draft-06/schema#",
    "$id": "https://aws.amazon.com/appsync/request-mapping-template.json",
    "type": "object",
    "properties": {
        "version": {
            "$id": "/properties/version",
            "type": "string",
            "enum": [
                "2018-05-29"
            ],
            "title": "The Mapping template version.",
            "default": "2018-05-29"
        },
        "payload": {}
    },
    "required": [
        "version"
    ],
    "additionalProperties": false
}
```

Berikut adalah contoh di mana argumen bidang diteruskan melalui properti konteks VTL: `$context.arguments`

```
{
    "version": "2018-05-29",
    "payload": $util.toJson($context.arguments)
}
```

Nilai `payload` bidang akan diteruskan ke template pemetaan respons dan tersedia di properti konteks VTL (). `$context.result`

Ini adalah contoh yang mewakili nilai interpolasi bidang: `payload`

```
{
    "id": "postId1"
}
```

## Versi
<a name="version"></a>

Umum untuk semua template pemetaan permintaan, `version` bidang mendefinisikan versi yang digunakan oleh template.

 Bidang `version` wajib diisi.

Contoh:

```
"version": "2018-05-29"
```

## Payload
<a name="payload"></a>

`payload`Bidang adalah wadah yang dapat digunakan untuk meneruskan JSON yang terbentuk dengan baik ke template pemetaan respons.

 `payload`Bidang ini opsional.

## Templat pemetaan respons
<a name="response-mapping-template"></a>

Karena tidak ada sumber data, nilai `payload` bidang akan diteruskan ke template pemetaan respons dan disetel pada `context` objek yang tersedia melalui properti VTL. `$context.result`

Jika bentuk nilai `payload` bidang sama persis dengan bentuk tipe GraphQL, Anda dapat meneruskan respons menggunakan templat pemetaan respons berikut:

```
$util.toJson($context.result)
```

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

# AWS AppSync referensi template pemetaan resolver untuk HTTP
<a name="resolver-mapping-template-reference-http"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

Templat pemetaan AWS AppSync HTTP resolver memungkinkan Anda mengirim permintaan dari titik akhir HTTP apa pun, dan tanggapan dari titik akhir HTTP Anda kembali AWS AppSync ke. AWS AppSync Dengan menggunakan template pemetaan, Anda dapat memberikan petunjuk AWS AppSync tentang sifat operasi yang akan dipanggil. Bagian ini menjelaskan template pemetaan yang berbeda untuk resolver HTTP yang didukung.

## Meminta template pemetaan
<a name="request-mapping-template"></a>

```
{
    "version": "2018-05-29",
    "method": "PUT|POST|GET|DELETE|PATCH",
    "params": {
        "query": Map,
        "headers": Map,
        "body": any
    },
    "resourcePath": string
}
```

Setelah template pemetaan permintaan HTTP diselesaikan, representasi skema JSON dari template pemetaan permintaan terlihat seperti berikut:

```
{
    "$id": "https://aws.amazon.com/appsync/request-mapping-template.json",
    "type": "object",
    "properties": {
        "version": {
        "$id": "/properties/version",
        "type": "string",
        "title": "The Version Schema ",
        "default": "",
        "examples": [
            "2018-05-29"
        ],
        "enum": [
            "2018-05-29"
        ]
        },
        "method": {
        "$id": "/properties/method",
        "type": "string",
        "title": "The Method Schema ",
        "default": "",
        "examples": [
            "PUT|POST|GET|DELETE|PATCH"
        ],
        "enum": [
            "PUT",
            "PATCH",
            "POST",
            "DELETE",
            "GET"
        ]
        },
        "params": {
        "$id": "/properties/params",
        "type": "object",
        "properties": {
            "query": {
            "$id": "/properties/params/properties/query",
            "type": "object"
            },
            "headers": {
            "$id": "/properties/params/properties/headers",
            "type": "object"
            },
            "body": {
            "$id": "/properties/params/properties/body",
            "type": "string",
            "title": "The Body Schema ",
            "default": "",
            "examples": [
                ""
            ]
            }
        }
        },
        "resourcePath": {
        "$id": "/properties/resourcePath",
        "type": "string",
        "title": "The Resourcepath Schema ",
        "default": "",
        "examples": [
            ""
        ]
        }
    },
    "required": [
        "version",
        "method",
        "resourcePath"
    ]
}
```

Berikut ini adalah contoh permintaan HTTP POST, dengan `text/plain` badan:

```
{
    "version": "2018-05-29",
    "method": "POST",
    "params": {
        "headers":{
        "Content-Type":"text/plain"
        },
        "body":"this is an example of text body"
    },
    "resourcePath": "/"
}
```

## Versi
<a name="version"></a>

**catatan**  
Ini hanya berlaku untuk template pemetaan Permintaan. 

Mendefinisikan versi yang digunakan template. `version`umum untuk semua templat pemetaan permintaan dan diperlukan.

```
"version": "2018-05-29"
```

## Metode
<a name="method"></a>

**catatan**  
Ini hanya berlaku untuk template pemetaan Permintaan. 

Metode HTTP atau kata kerja (GET, POST, PUT, PATCH, atau DELETE) yang AWS AppSync mengirim ke titik akhir HTTP.

```
"method": "PUT"
```

## ResourcePath
<a name="resourcepath"></a>

**catatan**  
Ini hanya berlaku untuk template pemetaan Permintaan. 

Jalur sumber daya yang ingin Anda akses. Seiring dengan titik akhir di sumber data HTTP, jalur sumber daya membentuk URL tempat AWS AppSync layanan membuat permintaan.

```
"resourcePath": "/v1/users"
```

Ketika template pemetaan dievaluasi, jalur ini dikirim sebagai bagian dari permintaan HTTP, termasuk titik akhir HTTP. Misalnya, contoh sebelumnya mungkin menerjemahkan ke yang berikut:

```
PUT <endpoint>/v1/users
```

## Bidang Params
<a name="params-field"></a>

**catatan**  
Ini hanya berlaku untuk template pemetaan Permintaan. 

Digunakan untuk menentukan tindakan apa yang dilakukan penelusuran Anda, paling sering dengan menetapkan nilai **kueri** di dalam **badan**. Namun, ada beberapa kemampuan lain yang dapat dikonfigurasi, seperti pemformatan respons.

** **header** **  
Informasi header, sebagai pasangan kunci-nilai. Baik kunci dan nilainya harus berupa string.  
Contoh:  

```
"headers" : {
    "Content-Type" : "application/json"
}
```
`Content-Type`Header yang didukung saat ini adalah:  

```
text/*
application/xml
application/json
application/soap+xml
application/x-amz-json-1.0
application/x-amz-json-1.1
application/vnd.api+json
application/x-ndjson
```
 **Catatan**: Anda tidak dapat mengatur header HTTP berikut:  

```
HOST
CONNECTION
USER-AGENT
EXPECTATION
TRANSFER_ENCODING
CONTENT_LENGTH
```

** **query** **  
Pasangan nilai kunci yang menentukan opsi umum, seperti pemformatan kode untuk respons JSON. Baik kunci dan nilainya harus berupa string. Contoh berikut menunjukkan bagaimana Anda dapat mengirim string query sebagai`?type=json`:  

```
"query" : {
    "type" : "json"
}
```

** **tubuh** **  
Tubuh berisi badan permintaan HTTP yang Anda pilih untuk disetel. Badan permintaan selalu berupa string yang dikodekan UTF-8 kecuali jenis konten menentukan charset.  

```
"body":"body string"
```

## Respons
<a name="response"></a>

Lihat contoh [di sini](https://docs.aws.amazon.com/appsync/latest/devguide/tutorial-http-resolvers.html).

# Otoritas Sertifikat (CA) Diakui oleh AWS AppSync untuk Titik Akhir HTTPS
<a name="http-cert-authorities"></a>

**catatan**  
*Let's Encrypt diterima melalui sertifikat *identrust* dan isrgrootx1.* Tidak ada tindakan dari pihak Anda yang diperlukan jika Anda menggunakan Let's Encrypt.

Pada saat ini, sertifikat yang ditandatangani sendiri tidak didukung oleh resolver HTTP saat menggunakan HTTPS. AWS AppSync mengakui Otoritas Sertifikat berikut saat menyelesaikan sertifikat SSL/TLS untuk HTTPS:


**Sertifikat root yang dikenal di AWS AppSync**  

| Nama | Tanggal | SHA1 Sidik Jari | 
| --- | --- | --- | 
| digicertassuredidrootca | 21 Apr 2018 | 05:63:B8:63:0D:62:D7:5A:BB:C8:AB:1E:4B:DF:B5:A8:99:B2:4D:43 | 
| trustcenterclass2caii | 21 Apr 2018 | AE:50:83:ED:7C:F4:5C:BC:8F:61:C6:21:FE:68:5D:79:42:21:15:6E | 
| thawtepremiumserverca | 21 Apr 2018 | E0:AB:05:94:20:72:54:93:05:60:62:02:36:70:F7:CD:2E:FC:66:66 | 
| cia-crt-g3-02-ca | Nov 23, 2016 | 96:4A:BB:A7:BD:DA:FC:97:34:C0:0A:2D:F0:05:98:F7:E6:C6:6F:09 | 
| swisssignplatinumg2ca | 21 Apr 2018 | 56:E0:FA:C0:3B:8F:18:23:55:18:E5:D3:11:CA:E8:C2:43:31:AB:66 | 
| swisssignsilverg2ca | 21 Apr 2018 | 9B:AA:E5:9F:56:EE:21:CB:43:5A:BE:25:93:DF:A7:F0:40:D1:1D:CB | 
| thawteserverca | 21 Apr 2018 | 9F:AD:91:A6:CE:6A:C6:C5:00:47:C4:4E:C9:D4:A5:0D:92:D8:49:79 | 
| equifaxsecureebusinessca1 | 21 Apr 2018 | AE:E6:3D:70:E3:76:FB:C7:3A:EB:B0:A1:C1:D4:C4:7A:A7:40:B3:F4 | 
| securetrustca | 21 Apr 2018 | 87:82:C6:C3:04:35:3B:CF:D2:96:92:D2:59:3E:7D:44:D9:34:FF:11 | 
| utnuserfirstclientauthemailca | 21 Apr 2018 | B1:72:B1:A5:6D:95:F9:1F:E5:02:87:E1:4D:37:EA:6A:44:63:76:8A | 
| thawtepersonalfreemailca | 21 Apr 2018 | E6:18:83:AE:84:CA:C1:C1:CD:52:AD:E8:E9:25:2B:45:A6:4F:B7:E2 | 
| affirmtrustnetworkingca | 21 Apr 2018 | 29:36:21:02:8B:20:ED:02:F5:66:C5:32:D1:D6:ED:90:9F:45:00:2F | 
| entrustevca | 21 Apr 2018 | B3:1E:B1:B7:40:E3:6C:84:02:DA:DC:37:D4:4D:F5:D4:67:49:52:F9 | 
| utnuserfirsthardwareca | 21 Apr 2018 | 04:83:ED:33:99:AC:36:08:05:87:22:ED:BC:5E:46:00:E3:BE:F9:D7 | 
| certumca | 21 Apr 2018 | 62:52:DC:40:F7:11:43:A2:2F:DE:9E:F7:34:8E:06:42:51:B1:81:18 | 
| addtrustclass1ca | 21 Apr 2018 | CC:AB:0E:A0:4C:23:01:D6:69:7B:DD:37:9F:CD:12:EB:24:E3:94:9D | 
| entrustrootcag2 | 21 Apr 2018 | 8C:F4:27:FD:79:0C:3A:D1:66:06:8D:E8:1E:57:EF:BB:93:22:72:D4 | 
| equifaxsecureca | 21 Apr 2018 | D2:32:09:AD:23:D3:14:23:21:74:E4:0D:7F:9D:62:13:97:86:63:3A | 
| quovadisrootca3 | 21 Apr 2018 | 1F:49:14:F7:D8:74:95:1D:DD:AE:02:C0:BE:FD:3A:2D:82:75:51:85 | 
| quovadisrootca2 | 21 Apr 2018 | CA:3A:FB:CF:12:40:36:4B:44:B2:16:20:88:80:48:39:19:93:7C:F7 | 
| digicertglobalrootg2 | 21 Apr 2018 | DF:3C:24:F9:BF:D6:66:76:1B:26:80:73:FE:06:D1:CC:8D:4F:82:A4 | 
| digicerthighassuranceevrootca | 21 Apr 2018 | 5F:B7:EE:06:33:E2:59:DB:AD:0C:4C:9A:E6:D3:8F:1A:61:C7:DC:25 | 
| secomvalicertclass1ca | 21 Apr 2018 | E5:DF:74:3C:B6:01:C4:9B:98:43:DC:AB:8C:E8:6A:81:10:9F:E4:8E | 
| equifaxsecureglobalebusinessca1 | 21 Apr 2018 | 3A:74:CB:7A:47:DB:70:DE:89:1F:24:35:98:64:B8:2D:82:BD:1A:36 | 
| geotrustuniversalca | 21 Apr 2018 | E6:21:F3:35:43:79:05:9A:4B:68:30:9D:8A:2F:74:22:15:87:EC:79 | 
| deprecateditsecca | 27 Jan 2012 | 12:12:0B:03:0E:15:14:54:F4:DD:B3:F5:DE:13:6E:83:5A:29:72:9D | 
| verisignclass3ca | 21 Apr 2018 | A1:DB:63:93:91:6F:17:E4:18:55:09:40:04:15:C7:02:40:B0:AE:6B | 
| thawteprimaryrootcag3 | 21 Apr 2018 | F1:8B:53:8D:1B:E9:03:B6:A6:F0:56:43:5B:17:15:89:CA:F3:6B:F2 | 
| thawteprimaryrootcag2 | 21 Apr 2018 | AA:DB:BC:22:23:8F:C4:01:A1:27:BB:38:DD:F4:1D:DB:08:9E:F0:12 | 
| deutschetelekomrootca2 | 21 Apr 2018 | 85:A4:08:C0:9C:19:3E:5D:51:58:7D:CD:D6:13:30:FD:8C:DE:37:BF | 
| buypassclass3ca | 21 Apr 2018 | DA:FA:F7:FA:66:84:EC:06:8F:14:50:BD:C7:C2:81:A5:BC:A9:64:57 | 
| utnuserfirstobjectca | 21 Apr 2018 | E1:2D:FB:4B:41:D7:D9:C3:2B:30:51:4B:AC:1D:81:D8:38:5E:2D:46 | 
| geotrustprimaryca | 21 Apr 2018 | 32:3C:11:8E:1B:F7:B8:B6:52:54:E2:E2:10:0D:D6:02:90:37:F0:96 | 
| buypassclass2ca | 21 Apr 2018 | 49:0A:75:74:DE:87:0A:47:FE:58:EE:F6:C7:6B:EB:C6:0B:12:40:99 | 
| baltimorecodesigningca | 21 Apr 2018 | 30:46:D8:C8:88:FF:69:30:C3:4A:FC:CD:49:27:08:7C:60:56:7B:0D | 
| verisignclass1ca | 21 Apr 2018 | CE:6A:64:A3:09:E4:2F:BB:D9:85:1C:45:3E:64:09:EA:E8:7D:60:F1 | 
| baltimorecybertrustca | 21 Apr 2018 | D4:DE:20:D0:5E:66:FC:53:FE:1A:50:88:2C:78:DB:28:52:CA:E4:74 | 
| starfieldclass2ca | 21 Apr 2018 | AD:7E:1C:28:B0:64:EF:8F:60:03:40:20:14:C3:D0:E3:37:0E:B5:8A | 
| camerfirmachamberscommerceca | 21 Apr 2018 | 6E:3A:55:A4:19:0C:19:5C:93:84:3C:C0:DB:72:2E:31:30:61:F0:B1 | 
| ttelesecglobalrootclass3ca | 21 Apr 2018 | 55:A6:72:3E:CB:F2:EC:CD:C3:23:74:70:19:9D:2A:BE:11:E3:81:D1 | 
| verisignclass3g5ca | 21 Apr 2018 | 4E:B6:D5:78:49:9B:1C:CF:5F:58:1E:AD:56:BE:3D:9B:67:44:A5:E5 | 
| ttelesecglobalrootclass2ca | 21 Apr 2018 | 59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF:17:D8:94:E9 | 
| trustcenteruniversalcai | 21 Apr 2018 | 6B:2F:34:AD:89:58:BE:62:FD:B0:6B:5C:CE:BB:9D:D9:4F:4E:39:F3 | 
| verisignclass3g4ca | 21 Apr 2018 | 22:D5:D8:DF:8F:02:31:D1:8D:F7:9D:B7:CF:8A:2D:64:C9:3F:6C:3A | 
| verisignclass3g3ca | 21 Apr 2018 | 13:2D:0D:45:53:4B:69:97:CD:B2:D5:C3:39:E2:55:76:60:9B:5C:C6 | 
| xrampglobalca | 21 Apr 2018 | B8:01:86:D1:EB:9C:86:A5:41:04:CF:30:54:F3:4C:52:B7:E5:58:C6 | 
| amzninternalrootca | 12 Desember 2008 | A7:B7:F6:15:8A:FF:1E:C8:85:13:38:BC:93:EB:A2:AB:A4:09:EF:06 | 
| certplusclass3pprimaryca | 21 Apr 2018 | 21:6B:2A:29:E6:2A:00:CE:82:01:46:D8:24:41:41:B9:25:11:B2:79 | 
| certumtrustednetworkca | 21 Apr 2018 | 07:E0:32:E0:20:B7:2C:3F:19:2F:06:28:A2:59:3A:19:A7:0F:06:9E | 
| verisignclass3g2ca | 21 Apr 2018 | 85:37:1C:A6:E5:50:14:3D:CE:28:03:47:1B:DE:3A:09:E8:F8:77:0F | 
| globalsignr3ca | 21 Apr 2018 | D6:9B:56:11:48:F0:1C:77:C5:45:78:C1:09:26:DF:5B:85:69:76:AD | 
| utndatacorpsgcca | 21 Apr 2018 | 58:11:9F:0E:12:82:87:EA:50:FD:D9:87:45:6F:4F:78:DC:FA:D6:D4 | 
| secomscrootca2 | 21 Apr 2018 | 5F:3B:8C:F2:F8:10:B3:7D:78:B4:CE:EC:19:19:C3:73:34:B9:C7:74 | 
| gtecybertrustglobalca | 21 Apr 2018 | 97:81:79:50:D8:1C:96:70:CC:34:D8:09:CF:79:44:31:36:7E:F4:74 | 
| secomscrootca1 | 21 Apr 2018 | 36:B1:2B:49:F9:81:9E:D7:4C:9E:BC:38:0F:C6:56:8F:5D:AC:B2:F7 | 
| affirmtrustcommercialca | 21 Apr 2018 | F9:B5:B6:32:45:5F:9C:BE:EC:57:5F:80:DC:E9:6E:2C:C7:B2:78:B7 | 
| trustcenterclass4caii | 21 Apr 2018 | A6:9A:91:FD:05:7F:13:6A:42:63:0B:B1:76:0D:2D:51:12:0C:16:50 | 
| verisignuniversalrootca | 21 Apr 2018 | 36:79:CA:35:66:87:72:30:4D:30:A5:FB:87:3B:0F:A7:7B:B7:0D:54 | 
| globalsignr2ca | 21 Apr 2018 | 75:E0:AB:B6:13:85:12:27:1C:04:F8:5F:DD:DE:38:E4:B7:24:2E:FE | 
| certplusclass2primaryca | 21 Apr 2018 | 74:20:74:41:72:9C:DD:92:EC:79:31:D8:23:10:8D:C2:81:92:E2:BB | 
| digicertglobalrootca | 21 Apr 2018 | A8:98:5D:3A:65:E5:E5:C4:B2:D7:D6:6D:40:C6:DD:2F:B1:9C:54:36 | 
| globalsignca | 21 Apr 2018 | B1:BC:96:8B:D4:F4:9D:62:2A:A8:9A:81:F2:15:01:52:A4:1D:82:9C | 
| thawteprimaryrootca | 21 Apr 2018 | 91:C6:D6:EE:3E:8A:C8:63:84:E5:48:C2:99:29:5C:75:6C:81:7B:81 | 
| starfieldrootg2ca | 21 Apr 2018 | B5:1C:06:7C:EE:2B:0C:3D:F8:55:AB:2D:92:F4:FE:39:D4:E7:0F:0E | 
| geotrustglobalca | 21 Apr 2018 | DE:28:F4:A4:FF:E5:B9:2F:A3:C5:03:D1:A3:49:A7:F9:96:2A:82:12 | 
| soneraclass2ca | 21 Apr 2018 | 37:F7:6D:E6:07:7C:90:C5:B1:3E:93:1A:B7:41:10:B4:F2:E4:9A:27 | 
| verisigntsaca | 21 Apr 2018 | 20:CE:B1:F0:F5:1C:0E:19:A9:F3:8D:B1:AA:8E:03:8C:AA:7A:C7:01 | 
| soneraclass1ca | 21 Apr 2018 | 07:47:22:01:99:CE:74:B9:7C:B0:3D:79:B2:64:A2:C8:55:E9:33:FF | 
| quovadisrootca | 21 Apr 2018 | DE:3F:40:BD:50:93:D3:9B:6C:60:F6:DA:BC:07:62:01:00:89:76:C9 | 
| affirmtrustpremiumeccca | 21 Apr 2018 | B8:23:6B:00:2F:1D:16:86:53:01:55:6C:11:A4:37:CA:EB:FF:C3:BB | 
| starfieldservicesrootg2ca | 21 Apr 2018 | 92:5A:8F:8D:2C:6D:04:E0:66:5F:59:6A:FF:22:D8:63:E8:25:6F:3F | 
| valicertclass2ca | 21 Apr 2018 | 31:7A:2A:D0:7F:2B:33:5E:F5:A1:C3:4E:4B:57:E8:B7:D8:F1:FC:A6 | 
| comodoaaaca | 21 Apr 2018 | D1:EB:23:A4:6D:17:D6:8F:D9:25:64:C2:F1:F1:60:17:64:D8:E3:49 | 
| aolrootca2 | 21 Apr 2018 | 85:B5:FF:67:9B:0C:79:96:1F:C8:6E:44:22:00:46:13:DB:17:92:84 | 
| keynectisrootca | 21 Apr 2018 | 9C:61:5C:4D:4D:85:10:3A:53:26:C2:4D:BA:EA:E4:A2:D2:D5:CC:97 | 
| addtrustqualifiedca | 21 Apr 2018 | 4D:23:78:EC:91:95:39:B5:00:7F:75:8F:03:3B:21:1E:C5:4D:8B:CF | 
| aolrootca1 | 21 Apr 2018 | 39:21:C1:15:C1:5D:0E:CA:5C:CB:5B:C4:F0:7D:21:D8:05:0B:56:6A | 
| verisignclass2g3ca | 21 Apr 2018 | 61:EF:43:D7:7F:CA:D4:61:51:BC:98:E0:C3:59:12:AF:9F:EB:63:11 | 
| addtrustexternalca | 21 Apr 2018 | 02:FA:F3:E2:91:43:54:68:60:78:57:69:4D:F5:E4:5B:68:85:18:68 | 
| verisignclass2g2ca | 21 Apr 2018 | B3:EA:C4:47:76:C9:C8:1C:EA:F2:9D:95:B6:CC:A0:08:1B:67:EC:9D | 
| geotrustprimarycag3 | 21 Apr 2018 | 03:9E:ED:B8:0B:E7:A0:3C:69:53:89:3B:20:D2:D9:32:3A:4C:2A:FD | 
| geotrustprimarycag2 | 21 Apr 2018 | 8D:17:84:D5:37:F3:03:7D:EC:70:FE:57:8B:51:9A:99:E6:10:D7:B0 | 
| swisssigngoldg2ca | 21 Apr 2018 | D8:C5:38:8A:B7:30:1B:1B:6E:D4:7A:E6:45:25:3A:6F:9F:1A:27:61 | 
| entrust2048ca | 21 Apr 2018 | 50:30:06:09:1D:97:D4:F5:AE:39:F7:CB:E7:92:7D:7D:65:2D:34:31 | 
| chunghwaepkirootca | 21 Apr 2018 | 67:65:0D:F1:7E:8E:7E:5B:82:40:A4:F4:56:4B:CF:E2:3D:69:C6:F0 | 
| camerfirmachambersignca | 21 Apr 2018 | 4A:BD:EE:EC:95:0D:35:9C:89:AE:C7:52:A1:2C:5B:29:F6:D6:AA:0C | 
| camerfirmachambersca | 21 Apr 2018 | 78:6A:74:AC:76:AB:14:7F:9C:6A:30:50:BA:9E:A8:7E:FE:9A:CE:3C | 
| godaddyclass2ca | 21 Apr 2018 | 27:96:BA:E6:3F:18:01:E2:77:26:1B:A0:D7:77:70:02:8F:20:EE:E4 | 
| affirmtrustpremiumca | 21 Apr 2018 | D8:A6:33:2C:E0:03:6F:B1:85:F6:63:4F:7D:6A:06:65:26:32:28:27 | 
| verisignclass1g3ca | 21 Apr 2018 | 20:42:85:DC:F7:EB:76:41:95:57:8E:13:6B:D4:B7:D1:E9:8E:46:A5 | 
| secomevrootca1 | 21 Apr 2018 | FE:B8:C4:32:DC:F9:76:9A:CE:AE:3D:D8:90:8F:FD:28:86:65:64:7D | 
| verisignclass1g2ca | 21 Apr 2018 | 27:3E:E1:24:57:FD:C4:F9:0C:55:E8:2B:56:16:7F:62:F5:32:E5:47 | 
| amzninternalinfoseccag3 | Februari 27, 2015 | B9:B1:CA:38:F7:BF:9C:D2:D4:95:E7:B6:5E:75:32:9B:A8:78:2E:F6 | 
| cia-crt-g3-01-ca | Nov 23, 2016 | 2B:EE:2C:BA:A3:1D:B5:FE:60:40:41:95:08:ED:46:82:39:4D:ED:E2 | 
| godaddyrootg2ca | 21 Apr 2018 | 47:BE:AB:C9:22:EA:E8:0E:78:78:34:62:A7:9F:45:C2:54:FD:E6:8B | 
| digicertassuredidrootca | 21 Apr 2018 | 05:63:B8:63:0D:62:D7:5A:BB:C8:AB:1E:4B:DF:B5:A8:99:B2:4D:43 | 
| microseceszignorootca2009 | 21 Apr 2018 | 89:DF:74:FE:5C:F4:0F:4A:80:F9:E3:37:7D:54:DA:91:E1:01:31:8E | 
| affirmtrustcommercial | 21 Apr 2018 | F9:B5:B6:32:45:5F:9C:BE:EC:57:5F:80:DC:E9:6E:2C:C7:B2:78:B7 | 
| comodoecccertificationauthority | 21 Apr 2018 | 9F:74:4E:9F:2B:4D:BA:EC:0F:31:2C:50:B6:56:3B:8E:2D:93:C3:11 | 
| cadisigrootr2 | 21 Apr 2018 | B5:61:EB:EA:A4:DE:E4:25:4B:69:1A:98:A5:57:47:C2:34:C7:D9:71 | 
| swisssignsilvercag2 | 21 Apr 2018 | 9B:AA:E5:9F:56:EE:21:CB:43:5A:BE:25:93:DF:A7:F0:40:D1:1D:CB | 
| securetrustca | 21 Apr 2018 | 87:82:C6:C3:04:35:3B:CF:D2:96:92:D2:59:3E:7D:44:D9:34:FF:11 | 
| cadisigrootr1 | 21 Apr 2018 | 8E:1C:74:F8:A6:20:B9:E5:8A:F4:61:FA:EC:2B:47:56:51:1A:52:C6 | 
| accvraiz1 | 21 Apr 2018 | 93:05:7A:88:15:C6:4F:CE:88:2F:FA:91:16:52:28:78:BC:53:64:17 | 
| entrustrootcertificationauthority | 21 Apr 2018 | B3:1E:B1:B7:40:E3:6C:84:02:DA:DC:37:D4:4D:F5:D4:67:49:52:F9 | 
| camerfirmaglobalchambersignroot | 21 Apr 2018 | 33:9B:6B:14:50:24:9B:55:7A:01:87:72:84:D9:E0:2F:C3:D2:D8:E9 | 
| dstacescax6 | 21 Apr 2018 | 40:54:DA:6F:1C:3F:40:74:AC:ED:0F:EC:CD:DB:79:D1:53:FB:90:1D | 
| identrustpublicsectorrootca1 | 21 Apr 2018 | BA:29:41:60:77:98:3F:F4:F3:EF:F2:31:05:3B:2E:EA:6D:4D:45:FD | 
| starfieldrootcertificateauthorityg2 | 21 Apr 2018 | B5:1C:06:7C:EE:2B:0C:3D:F8:55:AB:2D:92:F4:FE:39:D4:E7:0F:0E | 
| secureglobalca | 21 Apr 2018 | 3A:44:73:5A:E5:81:90:1F:24:86:61:46:1E:3B:9C:C4:5F:F5:3A:1B | 
| eecertificationcentrerootca | 21 Apr 2018 | C9:A8:B9:E7:55:80:5E:58:E3:53:77:A7:25:EB:AF:C3:7B:27:CC:D7 | 
| opentrustrootcag3 | 21 Apr 2018 | 6E:26:64:F3:56:BF:34:55:BF:D1:93:3F:7C:01:DE:D8:13:DA:8A:A6 | 
| teliasonerarootcav1 | 21 Apr 2018 | 43:13:BB:96:F1:D5:86:9B:C1:4E:6A:92:F6:CF:F6:34:69:87:82:37 | 
| autoridaddecertificacionfirmaprofesionalcifa62634068 | 21 Apr 2018 | AE:C5:FB:3F:C8:E1:BF:C4:E5:4F:03:07:5A:9A:E8:00:B7:F7:B6:FA | 
| opentrustrootcag2 | 21 Apr 2018 | 79:5F:88:60:C5:AB:7C:3D:92:E6:CB:F4:8D:E1:45:CD:11:EF:60:0B | 
| opentrustrootcag1 | 21 Apr 2018 | 79:91:E8:34:F7:E2:EE:DD:08:95:01:52:E9:55:2D:14:E9:58:D5:7E | 
| globalsigneccrootcar5 | 21 Apr 2018 | 1F:24:C6:30:CD:A4:18:EF:20:69:FF:AD:4F:DD:5F:46:3A:1B:69:AA | 
| globalsigneccrootcar4 | 21 Apr 2018 | 69:69:56:2E:40:80:F4:24:A1:E7:19:9F:14:BA:F3:EE:58:AB:6A:BB | 
| izenpecom | 21 Apr 2018 | 2F:78:3D:25:52:18:A7:4A:65:39:71:B5:2C:A2:9C:45:15:6F:E9:19 | 
| turktrustelektroniksertifikahizmetsaglayicisih5 | 21 Apr 2018 | C4:18:F6:4D:46:D1:DF:00:3D:27:30:13:72:43:A9:12:11:C6:75:FB | 
| gdcatrustauthr5root | 21 Apr 2018 | 0F:36:38:5B:81:1A:25:C3:9B:31:4E:83:CA:E9:34:66:70:CC:74:B4 | 
| dtrustrootclass3ca22009 | 21 Apr 2018 | 58:E8:AB:B0:36:15:33:FB:80:F7:9B:1B:6D:29:D3:FF:8D:5F:00:F0 | 
| quovadisrootca3 | 21 Apr 2018 | 1F:49:14:F7:D8:74:95:1D:DD:AE:02:C0:BE:FD:3A:2D:82:75:51:85 | 
| quovadisrootca2 | 21 Apr 2018 | CA:3A:FB:CF:12:40:36:4B:44:B2:16:20:88:80:48:39:19:93:7C:F7 | 
| geotrustprimarycertificationauthorityg3 | 21 Apr 2018 | 03:9E:ED:B8:0B:E7:A0:3C:69:53:89:3B:20:D2:D9:32:3A:4C:2A:FD | 
| geotrustprimarycertificationauthorityg2 | 21 Apr 2018 | 8D:17:84:D5:37:F3:03:7D:EC:70:FE:57:8B:51:9A:99:E6:10:D7:B0 | 
| oistewisekeyglobalrootgbca | 21 Apr 2018 | 0F:F9:40:76:18:D3:D7:6A:4B:98:F0:A8:35:9E:0C:FD:27:AC:CC:ED | 
| addtrustexternalroot | 21 Apr 2018 | 02:FA:F3:E2:91:43:54:68:60:78:57:69:4D:F5:E4:5B:68:85:18:68 | 
| chambersofcommerceroot2008 | 21 Apr 2018 | 78:6A:74:AC:76:AB:14:7F:9C:6A:30:50:BA:9E:A8:7E:FE:9A:CE:3C | 
| digicertglobalrootg3 | 21 Apr 2018 | 7E:04:DE:89:6A:3E:66:6D:00:E6:87:D3:3F:FA:D9:3B:E8:3D:34:9E | 
| comodoaaaservicesroot | 21 Apr 2018 | D1:EB:23:A4:6D:17:D6:8F:D9:25:64:C2:F1:F1:60:17:64:D8:E3:49 | 
| digicertglobalrootg2 | 21 Apr 2018 | DF:3C:24:F9:BF:D6:66:76:1B:26:80:73:FE:06:D1:CC:8D:4F:82:A4 | 
| certinomisrootca | 21 Apr 2018 | 9D:70:BB:01:A5:A4:A0:18:11:2E:F7:1C:01:B9:32:C5:34:E7:88:A8 | 
| oistewisekeyglobalrootgaca | 21 Apr 2018 | 59:22:A1:E1:5A:EA:16:35:21:F8:98:39:6A:46:46:B0:44:1B:0F:A9 | 
| dstrootcax3 | 21 Apr 2018 | DA:C9:02:4F:54:D8:F6:DF:94:93:5F:B1:73:26:38:CA:6A:D7:7C:13 | 
| certigna | 21 Apr 2018 | B1:2E:13:63:45:86:A4:6F:1A:B2:60:68:37:58:2D:C4:AC:FD:94:97 | 
| digicerthighassuranceevrootca | 21 Apr 2018 | 5F:B7:EE:06:33:E2:59:DB:AD:0C:4C:9A:E6:D3:8F:1A:61:C7:DC:25 | 
| soneraclass2rootca | 21 Apr 2018 | 37:F7:6D:E6:07:7C:90:C5:B1:3E:93:1A:B7:41:10:B4:F2:E4:9A:27 | 
| trustcorrootcertca2 | 21 Apr 2018 | B8:BE:6D:CB:56:F1:55:B9:63:D4:12:CA:4E:06:34:C7:94:B2:1C:C0 | 
| usertrustrsacertificationauthority | 21 Apr 2018 | 2B:8F:1B:57:33:0D:BB:A2:D0:7A:6C:51:F7:0E:E9:0D:DA:B9:AD:8E | 
| trustcorrootcertca1 | 21 Apr 2018 | FF:BD:CD:E7:82:C8:43:5E:3C:6F:26:86:5C:CA:A8:3A:45:5B:C3:0A | 
| geotrustuniversalca | 21 Apr 2018 | E6:21:F3:35:43:79:05:9A:4B:68:30:9D:8A:2F:74:22:15:87:EC:79 | 
| certsignrootca | 21 Apr 2018 | FA:B7:EE:36:97:26:62:FB:2D:B0:2A:F6:BF:03:FD:E8:7C:4B:2F:9B | 
| amazonrootca4 | 21 Apr 2018 | F6:10:84:07:D6:F8:BB:67:98:0C:C2:E2:44:C2:EB:AE:1C:EF:63:BE | 
| amazonrootca3 | 21 Apr 2018 | 0D:44:DD:8C:3C:8C:1A:1A:58:75:64:81:E9:0F:2E:2A:FF:B3:D2:6E | 
| amazonrootca2 | 21 Apr 2018 | 5A:8C:EF:45:D7:A6:98:59:76:7A:8C:8B:44:96:B5:78:CF:47:4B:1A | 
| verisignuniversalrootcertificationauthority | 21 Apr 2018 | 36:79:CA:35:66:87:72:30:4D:30:A5:FB:87:3B:0F:A7:7B:B7:0D:54 | 
| amazonrootca1 | 21 Apr 2018 | 8D:A7:F9:65:EC:5E:FC:37:91:0F:1C:6E:59:FD:C1:CC:6A:6E:DE:16 | 
| networksolutionscertificateauthority | 21 Apr 2018 | 74:F8:A3:C3:EF:E7:B3:90:06:4B:83:90:3C:21:64:60:20:E5:DF:CE | 
| thawteprimaryrootcag3 | 21 Apr 2018 | F1:8B:53:8D:1B:E9:03:B6:A6:F0:56:43:5B:17:15:89:CA:F3:6B:F2 | 
| affirmtrustnetworking | 21 Apr 2018 | 29:36:21:02:8B:20:ED:02:F5:66:C5:32:D1:D6:ED:90:9F:45:00:2F | 
| thawteprimaryrootcag2 | 21 Apr 2018 | AA:DB:BC:22:23:8F:C4:01:A1:27:BB:38:DD:F4:1D:DB:08:9E:F0:12 | 
| trustcoreca1 | 21 Apr 2018 | 58:D1:DF:95:95:67:6B:63:C0:F0:5B:1C:17:4D:8B:84:0B:C8:78:BD | 
| deutschetelekomrootca2 | 21 Apr 2018 | 85:A4:08:C0:9C:19:3E:5D:51:58:7D:CD:D6:13:30:FD:8C:DE:37:BF | 
| godaddyrootcertificateauthorityg2 | 21 Apr 2018 | 47:BE:AB:C9:22:EA:E8:0E:78:78:34:62:A7:9F:45:C2:54:FD:E6:8B | 
| entrustrootcertificationauthorityec1 | 21 Apr 2018 | 20:D8:06:40:DF:9B:25:F5:12:25:3A:11:EA:F7:59:8A:EB:14:B5:47 | 
| szafirrootca2 | 21 Apr 2018 | E2:52:FA:95:3F:ED:DB:24:60:BD:6E:28:F3:9C:CC:CF:5E:B3:3F:DE | 
| tubitakkamusmsslkoksertifikasisurum1 | 21 Apr 2018 | 31:43:64:9B:EC:CE:27:EC:ED:3A:3F:0B:8F:0D:E4:E8:91:DD:EE:CA | 
| buypassclass3rootca | 21 Apr 2018 | DA:FA:F7:FA:66:84:EC:06:8F:14:50:BD:C7:C2:81:A5:BC:A9:64:57 | 
| comodorsacertificationauthority | 21 Apr 2018 | AF:E5:D2:44:A8:D1:19:42:30:FF:47:9F:E2:F8:97:BB:CD:7A:8C:B4 | 
| netlockaranyclassgoldfotanusitvany | 21 Apr 2018 | 06:08:3F:59:3F:15:A1:04:A0:69:A4:6B:A9:03:D0:06:B7:97:09:91 | 
| securitycommunicationrootca2 | 21 Apr 2018 | 5F:3B:8C:F2:F8:10:B3:7D:78:B4:CE:EC:19:19:C3:73:34:B9:C7:74 | 
| dtrustrootclass3ca2ev2009 | 21 Apr 2018 | 96:C9:1B:0B:95:B4:10:98:42:FA:D0:D8:22:79:FE:60:FA:B9:16:83 | 
| starfieldclass2ca | 21 Apr 2018 | AD:7E:1C:28:B0:64:EF:8F:60:03:40:20:14:C3:D0:E3:37:0E:B5:8A | 
| pscprocert | 21 Apr 2018 | 70:C1:8D:74:B4:28:81:0A:E4:FD:A5:75:D7:01:9F:99:B0:3D:50:74 | 
| actalisauthenticationrootca | 21 Apr 2018 | F3:73:B3:87:06:5A:28:84:8A:F2:F3:4A:CE:19:2B:DD:C7:8E:9C:AC | 
| staatdernederlandenrootcag3 | 21 Apr 2018 | D8:EB:6B:41:51:92:59:E0:F3:E7:85:00:C0:3D:B6:88:97:C9:EE:FC | 
| cfcaevroot | 21 Apr 2018 | E2:B8:29:4B:55:84:AB:6B:58:C2:90:46:6C:AC:3F:B8:39:8F:84:83 | 
| digicerttrustedrootg4 | 21 Apr 2018 | DD:FB:16:CD:49:31:C9:73:A2:03:7D:3F:C8:3A:4D:7D:77:5D:05:E4 | 
| staatdernederlandenrootcag2 | 21 Apr 2018 | 59:AF:82:79:91:86:C7:B4:75:07:CB:CF:03:57:46:EB:04:DD:B7:16 | 
| securitycommunicationevrootca1 | 21 Apr 2018 | FE:B8:C4:32:DC:F9:76:9A:CE:AE:3D:D8:90:8F:FD:28:86:65:64:7D | 
| globalsignrootcar3 | 21 Apr 2018 | D6:9B:56:11:48:F0:1C:77:C5:45:78:C1:09:26:DF:5B:85:69:76:AD | 
| globalsignrootcar2 | 21 Apr 2018 | 75:E0:AB:B6:13:85:12:27:1C:04:F8:5F:DD:DE:38:E4:B7:24:2E:FE | 
| certumtrustednetworkca2 | 21 Apr 2018 | D3:DD:48:3E:2B:BF:4C:05:E8:AF:10:F5:FA:76:26:CF:D3:DC:30:92 | 
| acraizfnmtrcm | 21 Apr 2018 | EC:50:35:07:B2:15:C4:95:62:19:E2:A8:9A:5B:42:99:2C:4C:2C:20 | 
| hellenicacademicandresearchinstitutionseccrootca2015 | 21 Apr 2018 | 9F:F1:71:8D:92:D5:9A:F3:7D:74:97:B4:BC:6F:84:68:0B:BA:B6:66 | 
| certplusrootcag2 | 21 Apr 2018 | 4F:65:8E:1F:E9:06:D8:28:02:E9:54:47:41:C9:54:25:5D:69:CC:1A | 
| twcarootcertificationauthority | 21 Apr 2018 | CF:9E:87:6D:D3:EB:FC:42:26:97:A3:B5:A3:7A:A0:76:A9:06:23:48 | 
| twcaglobalrootca | 21 Apr 2018 | 9C:BB:48:53:F6:A4:F6:D3:52:A4:E8:32:52:55:60:13:F5:AD:AF:65 | 
| certplusrootcag1 | 21 Apr 2018 | 22:FD:D0:B7:FD:A2:4E:0D:AC:49:2C:A0:AC:A6:7B:6A:1F:E3:F7:66 | 
| geotrustuniversalca2 | 21 Apr 2018 | 37:9A:19:7B:41:85:45:35:0C:A6:03:69:F3:3C:2E:AF:47:4F:20:79 | 
| baltimorecybertrustroot | 21 Apr 2018 | D4:DE:20:D0:5E:66:FC:53:FE:1A:50:88:2C:78:DB:28:52:CA:E4:74 | 
| buypassclass2rootca | 21 Apr 2018 | 49:0A:75:74:DE:87:0A:47:FE:58:EE:F6:C7:6B:EB:C6:0B:12:40:99 | 
| certumtrustednetworkca | 21 Apr 2018 | 07:E0:32:E0:20:B7:2C:3F:19:2F:06:28:A2:59:3A:19:A7:0F:06:9E | 
| digicertassuredidrootg3 | 21 Apr 2018 | F5:17:A2:4F:9A:48:C6:C9:F8:A2:00:26:9F:DC:0F:48:2C:AB:30:89 | 
| digicertassuredidrootg2 | 21 Apr 2018 | A1:4B:48:D9:43:EE:0A:0E:40:90:4F:3C:E0:A4:C0:91:93:51:5D:3F | 
| isrgrootx1 | 21 Apr 2018 | CA:BD:2A:79:A1:07:6A:31:F2:1D:25:36:35:CB:03:9D:43:29:A5:E8 | 
| entrustnetpremium2048secureserverca | 21 Apr 2018 | 50:30:06:09:1D:97:D4:F5:AE:39:F7:CB:E7:92:7D:7D:65:2D:34:31 | 
| certplusclass2primaryca | 21 Apr 2018 | 74:20:74:41:72:9C:DD:92:EC:79:31:D8:23:10:8D:C2:81:92:E2:BB | 
| digicertglobalrootca | 21 Apr 2018 | A8:98:5D:3A:65:E5:E5:C4:B2:D7:D6:6D:40:C6:DD:2F:B1:9C:54:36 | 
| entrustrootcertificationauthorityg2 | 21 Apr 2018 | 8C:F4:27:FD:79:0C:3A:D1:66:06:8D:E8:1E:57:EF:BB:93:22:72:D4 | 
| starfieldservicesrootcertificateauthorityg2 | 21 Apr 2018 | 92:5A:8F:8D:2C:6D:04:E0:66:5F:59:6A:FF:22:D8:63:E8:25:6F:3F | 
| thawteprimaryrootca | 21 Apr 2018 | 91:C6:D6:EE:3E:8A:C8:63:84:E5:48:C2:99:29:5C:75:6C:81:7B:81 | 
| atostrustedroot2011 | 21 Apr 2018 | 2B:B1:F5:3E:55:0C:1D:C5:F1:D4:E6:B7:6A:46:4B:55:06:02:AC:21 | 
| geotrustglobalca | 21 Apr 2018 | DE:28:F4:A4:FF:E5:B9:2F:A3:C5:03:D1:A3:49:A7:F9:96:2A:82:12 | 
| luxtrustglobalroot2 | 21 Apr 2018 | 1E:0E:56:19:0A:D1:8B:25:98:B2:04:44:FF:66:8A:04:17:99:5F:3F | 
| etugracertificationauthority | 21 Apr 2018 | 51:C6:E7:08:49:06:6E:F3:92:D4:5C:A0:0D:6D:A3:62:8F:C3:52:39 | 
| visaecommerceroot | 21 Apr 2018 | 70:17:9B:86:8C:00:A4:FA:60:91:52:22:3F:9F:3E:32:BD:E0:05:62 | 
| quovadisrootca | 21 Apr 2018 | DE:3F:40:BD:50:93:D3:9B:6C:60:F6:DA:BC:07:62:01:00:89:76:C9 | 
| identrustcommercialrootca1 | 21 Apr 2018 | DF:71:7E:AA:4A:D9:4E:C9:55:84:99:60:2D:48:DE:5F:BC:F0:3A:25 | 
| staatdernederlandenevrootca | 21 Apr 2018 | 76:E2:7E:C1:4F:DB:82:C1:C0:A6:75:B5:05:BE:3D:29:B4:ED:DB:BB | 
| ttelesecglobalrootclass3 | 21 Apr 2018 | 55:A6:72:3E:CB:F2:EC:CD:C3:23:74:70:19:9D:2A:BE:11:E3:81:D1 | 
| ttelesecglobalrootclass2 | 21 Apr 2018 | 59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF:17:D8:94:E9 | 
| comodocertificationauthority | 21 Apr 2018 | 66:31:BF:9E:F7:4F:9E:B6:C9:D5:A6:0C:BA:6A:BE:D1:F7:BD:EF:7B | 
| securitycommunicationrootca | 21 Apr 2018 | 36:B1:2B:49:F9:81:9E:D7:4C:9E:BC:38:0F:C6:56:8F:5D:AC:B2:F7 | 
| quovadisrootca3g3 | 21 Apr 2018 | 48:12:BD:92:3C:A8:C4:39:06:E7:30:6D:27:96:E6:A4:CF:22:2E:7D | 
| xrampglobalcaroot | 21 Apr 2018 | B8:01:86:D1:EB:9C:86:A5:41:04:CF:30:54:F3:4C:52:B7:E5:58:C6 | 
| securesignrootca11 | 21 Apr 2018 | 3B:C4:9F:48:F8:F3:73:A0:9C:1E:BD:F8:5B:B1:C3:65:C7:D8:11:B3 | 
| affirmtrustpremium | 21 Apr 2018 | D8:A6:33:2C:E0:03:6F:B1:85:F6:63:4F:7D:6A:06:65:26:32:28:27 | 
| globalsignrootca | 21 Apr 2018 | B1:BC:96:8B:D4:F4:9D:62:2A:A8:9A:81:F2:15:01:52:A4:1D:82:9C | 
| swisssigngoldcag2 | 21 Apr 2018 | D8:C5:38:8A:B7:30:1B:1B:6E:D4:7A:E6:45:25:3A:6F:9F:1A:27:61 | 
| quovadisrootca2g3 | 21 Apr 2018 | 09:3C:61:F3:8B:8B:DC:7D:55:DF:75:38:02:05:00:E1:25:F5:C8:36 | 
| affirmtrustpremiumecc | 21 Apr 2018 | B8:23:6B:00:2F:1D:16:86:53:01:55:6C:11:A4:37:CA:EB:FF:C3:BB | 
| geotrustprimarycertificationauthority | 21 Apr 2018 | 32:3C:11:8E:1B:F7:B8:B6:52:54:E2:E2:10:0D:D6:02:90:37:F0:96 | 
| quovadisrootca1g3 | 21 Apr 2018 | 1B:8E:EA:57:96:29:1A:C9:39:EA:B8:0A:81:1A:73:73:C0:93:79:67 | 
| hongkongpostrootca1 | 21 Apr 2018 | D6:DA:A8:20:8D:09:D2:15:4D:24:B5:2F:CB:34:6E:B2:58:B2:8A:58 | 
| usertrustecccertificationauthority | 21 Apr 2018 | D1:CB:CA:5D:B2:D5:2A:7F:69:3B:67:4D:E5:F0:5A:1D:0C:95:7D:F0 | 
| cybertrustglobalroot | 21 Apr 2018 | 5F:43:E5:B1:BF:F8:78:8C:AC:1C:C7:CA:4A:9A:C6:22:2B:CC:34:C6 | 
| godaddyclass2ca | 21 Apr 2018 | 27:96:BA:E6:3F:18:01:E2:77:26:1B:A0:D7:77:70:02:8F:20:EE:E4 | 
| hellenicacademicandresearchinstitutionsrootca2015 | 21 Apr 2018 | 01:0C:06:95:A6:98:19:14:FF:BF:5F:C6:B0:B6:95:EA:29:E9:12:A6 | 
| ecacc | 21 Apr 2018 | 28:90:3A:63:5B:52:80:FA:E6:77:4C:0B:6D:A7:D6:BA:A6:4A:F2:E8 | 
| hellenicacademicandresearchinstitutionsrootca2011 | 21 Apr 2018 | FE:45:65:9B:79:03:5B:98:A1:61:B5:51:2E:AC:DA:58:09:48:22:4D | 
| verisignclass3publicprimarycertificationauthorityg5 | 21 Apr 2018 | 4E:B6:D5:78:49:9B:1C:CF:5F:58:1E:AD:56:BE:3D:9B:67:44:A5:E5 | 
| verisignclass3publicprimarycertificationauthorityg4 | 21 Apr 2018 | 22:D5:D8:DF:8F:02:31:D1:8D:F7:9D:B7:CF:8A:2D:64:C9:3F:6C:3A | 
| verisignclass3publicprimarycertificationauthorityg3 | 21 Apr 2018 | 13:2D:0D:45:53:4B:69:97:CD:B2:D5:C3:39:E2:55:76:60:9B:5C:C6 | 
| trustisfpsrootca | 21 Apr 2018 | 3B:C0:38:0B:33:C3:F6:A6:0C:86:15:22:93:D9:DF:F5:4B:81:C0:04 | 
| epkirootcertificationauthority | 21 Apr 2018 | 67:65:0D:F1:7E:8E:7E:5B:82:40:A4:F4:56:4B:CF:E2:3D:69:C6:F0 | 
| globalchambersignroot2008 | 21 Apr 2018 | 4A:BD:EE:EC:95:0D:35:9C:89:AE:C7:52:A1:2C:5B:29:F6:D6:AA:0C | 
| camerfirmachambersofcommerceroot | 21 Apr 2018 | 6E:3A:55:A4:19:0C:19:5C:93:84:3C:C0:DB:72:2E:31:30:61:F0:B1 | 
| mozillacert81.pem | Mar 13, 2014 | 07:E0:32:E0:20:B7:2C:3F:19:2F:06:28:A2:59:3A:19:A7:0F:06:9E | 
| mozillacert99.pem | Mar 13, 2014 | F1:7F:6F:B6:31:DC:99:E3:A3:C8:7F:FE:1C:F1:81:10:88:D9:60:33 | 
| mozillacert145.pem | Mar 13, 2014 | 10:1D:FA:3F:D5:0B:CB:BB:9B:B5:60:0C:19:55:A4:1A:F4:73:3A:04 | 
| mozillacert37.pem | Mar 13, 2014 | B1:2E:13:63:45:86:A4:6F:1A:B2:60:68:37:58:2D:C4:AC:FD:94:97 | 
| mozillacert4.pem | Mar 13, 2014 | E3:92:51:2F:0A:CF:F5:05:DF:F6:DE:06:7F:75:37:E1:65:EA:57:4B | 
| mozillacert70.pem | Mar 13, 2014 | 78:6A:74:AC:76:AB:14:7F:9C:6A:30:50:BA:9E:A8:7E:FE:9A:CE:3C | 
| mozillacert88.pem | Mar 13, 2014 | FE:45:65:9B:79:03:5B:98:A1:61:B5:51:2E:AC:DA:58:09:48:22:4D | 
| mozillacert134.pem | Mar 13, 2014 | 70:17:9B:86:8C:00:A4:FA:60:91:52:22:3F:9F:3E:32:BD:E0:05:62 | 
| mozillacert26.pem | Mar 13, 2014 | 87:82:C6:C3:04:35:3B:CF:D2:96:92:D2:59:3E:7D:44:D9:34:FF:11 | 
| mozillacert77.pem | Mar 13, 2014 | 13:2D:0D:45:53:4B:69:97:CD:B2:D5:C3:39:E2:55:76:60:9B:5C:C6 | 
| mozillacert123.pem | Mar 13, 2014 | 2A:B6:28:48:5E:78:FB:F3:AD:9E:79:10:DD:6B:DF:99:72:2C:96:E5 | 
| mozillacert15.pem | Mar 13, 2014 | 74:20:74:41:72:9C:DD:92:EC:79:31:D8:23:10:8D:C2:81:92:E2:BB | 
| mozillacert66.pem | Mar 13, 2014 | DD:E1:D2:A9:01:80:2E:1D:87:5E:84:B3:80:7E:4B:B1:FD:99:41:34 | 
| mozillacert112.pem | Mar 13, 2014 | 43:13:BB:96:F1:D5:86:9B:C1:4E:6A:92:F6:CF:F6:34:69:87:82:37 | 
| mozillacert55.pem | Mar 13, 2014 | AA:DB:BC:22:23:8F:C4:01:A1:27:BB:38:DD:F4:1D:DB:08:9E:F0:12 | 
| mozillacert101.pem | Mar 13, 2014 | 99:A6:9B:E6:1A:FE:88:6B:4D:2B:82:00:7C:B8:54:FC:31:7E:15:39 | 
| mozillacert119.pem | Mar 13, 2014 | 75:E0:AB:B6:13:85:12:27:1C:04:F8:5F:DD:DE:38:E4:B7:24:2E:FE | 
| mozillacert44.pem | Mar 13, 2014 | 5F:43:E5:B1:BF:F8:78:8C:AC:1C:C7:CA:4A:9A:C6:22:2B:CC:34:C6 | 
| mozillacert108.pem | Mar 13, 2014 | B1:BC:96:8B:D4:F4:9D:62:2A:A8:9A:81:F2:15:01:52:A4:1D:82:9C | 
| mozillacert95.pem | Mar 13, 2014 | DA:FA:F7:FA:66:84:EC:06:8F:14:50:BD:C7:C2:81:A5:BC:A9:64:57 | 
| mozillacert141.pem | Mar 13, 2014 | 31:7A:2A:D0:7F:2B:33:5E:F5:A1:C3:4E:4B:57:E8:B7:D8:F1:FC:A6 | 
| mozillacert33.pem | Mar 13, 2014 | FE:B8:C4:32:DC:F9:76:9A:CE:AE:3D:D8:90:8F:FD:28:86:65:64:7D | 
| mozillacert0.pem | Mar 13, 2014 | 97:81:79:50:D8:1C:96:70:CC:34:D8:09:CF:79:44:31:36:7E:F4:74 | 
| mozillacert84.pem | Mar 13, 2014 | D3:C0:63:F2:19:ED:07:3E:34:AD:5D:75:0B:32:76:29:FF:D5:9A:F2 | 
| mozillacert130.pem | Mar 13, 2014 | E5:DF:74:3C:B6:01:C4:9B:98:43:DC:AB:8C:E8:6A:81:10:9F:E4:8E | 
| mozillacert148.pem | Mar 13, 2014 | 04:83:ED:33:99:AC:36:08:05:87:22:ED:BC:5E:46:00:E3:BE:F9:D7 | 
| mozillacert22.pem | Mar 13, 2014 | 32:3C:11:8E:1B:F7:B8:B6:52:54:E2:E2:10:0D:D6:02:90:37:F0:96 | 
| mozillacert7.pem | Mar 13, 2014 | AD:7E:1C:28:B0:64:EF:8F:60:03:40:20:14:C3:D0:E3:37:0E:B5:8A | 
| mozillacert73.pem | Mar 13, 2014 | B5:1C:06:7C:EE:2B:0C:3D:F8:55:AB:2D:92:F4:FE:39:D4:E7:0F:0E | 
| mozillacert137.pem | Mar 13, 2014 | 4A:65:D5:F4:1D:EF:39:B8:B8:90:4A:4A:D3:64:81:33:CF:C7:A1:D1 | 
| mozillacert11.pem | Mar 13, 2014 | 05:63:B8:63:0D:62:D7:5A:BB:C8:AB:1E:4B:DF:B5:A8:99:B2:4D:43 | 
| mozillacert29.pem | Mar 13, 2014 | 74:F8:A3:C3:EF:E7:B3:90:06:4B:83:90:3C:21:64:60:20:E5:DF:CE | 
| mozillacert62.pem | Mar 13, 2014 | A1:DB:63:93:91:6F:17:E4:18:55:09:40:04:15:C7:02:40:B0:AE:6B | 
| mozillacert126.pem | Mar 13, 2014 | 25:01:90:19:CF:FB:D9:99:1C:B7:68:25:74:8D:94:5F:30:93:95:42 | 
| mozillacert18.pem | Mar 13, 2014 | 79:98:A3:08:E1:4D:65:85:E6:C2:1E:15:3A:71:9F:BA:5A:D3:4A:D9 | 
| mozillacert51.pem | Mar 13, 2014 | FA:B7:EE:36:97:26:62:FB:2D:B0:2A:F6:BF:03:FD:E8:7C:4B:2F:9B | 
| mozillacert69.pem | Mar 13, 2014 | 2F:78:3D:25:52:18:A7:4A:65:39:71:B5:2C:A2:9C:45:15:6F:E9:19 | 
| mozillacert115.pem | Mar 13, 2014 | 59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF:17:D8:94:E9 | 
| mozillacert40.pem | Mar 13, 2014 | 80:25:EF:F4:6E:70:C8:D4:72:24:65:84:FE:40:3B:8A:8D:6A:DB:F5 | 
| mozillacert58.pem | Mar 13, 2014 | 8D:17:84:D5:37:F3:03:7D:EC:70:FE:57:8B:51:9A:99:E6:10:D7:B0 | 
| mozillacert104.pem | Mar 13, 2014 | 4F:99:AA:93:FB:2B:D1:37:26:A1:99:4A:CE:7F:F0:05:F2:93:5D:1E | 
| mozillacert91.pem | Mar 13, 2014 | 3B:C0:38:0B:33:C3:F6:A6:0C:86:15:22:93:D9:DF:F5:4B:81:C0:04 | 
| mozillacert47.pem | Mar 13, 2014 | 1B:4B:39:61:26:27:6B:64:91:A2:68:6D:D7:02:43:21:2D:1F:1D:96 | 
| mozillacert80.pem | Mar 13, 2014 | B8:23:6B:00:2F:1D:16:86:53:01:55:6C:11:A4:37:CA:EB:FF:C3:BB | 
| mozillacert98.pem | Mar 13, 2014 | C9:A8:B9:E7:55:80:5E:58:E3:53:77:A7:25:EB:AF:C3:7B:27:CC:D7 | 
| mozillacert144.pem | Mar 13, 2014 | 37:F7:6D:E6:07:7C:90:C5:B1:3E:93:1A:B7:41:10:B4:F2:E4:9A:27 | 
| mozillacert36.pem | Mar 13, 2014 | 23:88:C9:D3:71:CC:9E:96:3D:FF:7D:3C:A7:CE:FC:D6:25:EC:19:0D | 
| mozillacert3.pem | Mar 13, 2014 | 87:9F:4B:EE:05:DF:98:58:3B:E3:60:D6:33:E7:0D:3F:FE:98:71:AF | 
| mozillacert87.pem | Mar 13, 2014 | 5F:3B:8C:F2:F8:10:B3:7D:78:B4:CE:EC:19:19:C3:73:34:B9:C7:74 | 
| mozillacert133.pem | Mar 13, 2014 | 85:B5:FF:67:9B:0C:79:96:1F:C8:6E:44:22:00:46:13:DB:17:92:84 | 
| mozillacert25.pem | Mar 13, 2014 | 4E:B6:D5:78:49:9B:1C:CF:5F:58:1E:AD:56:BE:3D:9B:67:44:A5:E5 | 
| mozillacert76.pem | Mar 13, 2014 | F9:B5:B6:32:45:5F:9C:BE:EC:57:5F:80:DC:E9:6E:2C:C7:B2:78:B7 | 
| mozillacert122.pem | Mar 13, 2014 | 02:FA:F3:E2:91:43:54:68:60:78:57:69:4D:F5:E4:5B:68:85:18:68 | 
| mozillacert14.pem | Mar 13, 2014 | 5F:B7:EE:06:33:E2:59:DB:AD:0C:4C:9A:E6:D3:8F:1A:61:C7:DC:25 | 
| mozillacert65.pem | Mar 13, 2014 | 69:BD:8C:F4:9C:D3:00:FB:59:2E:17:93:CA:55:6A:F3:EC:AA:35:FB | 
| mozillacert111.pem | Mar 13, 2014 | 9C:BB:48:53:F6:A4:F6:D3:52:A4:E8:32:52:55:60:13:F5:AD:AF:65 | 
| mozillacert129.pem | Mar 13, 2014 | E6:21:F3:35:43:79:05:9A:4B:68:30:9D:8A:2F:74:22:15:87:EC:79 | 
| mozillacert54.pem | Mar 13, 2014 | 03:9E:ED:B8:0B:E7:A0:3C:69:53:89:3B:20:D2:D9:32:3A:4C:2A:FD | 
| mozillacert100.pem | Mar 13, 2014 | 58:E8:AB:B0:36:15:33:FB:80:F7:9B:1B:6D:29:D3:FF:8D:5F:00:F0 | 
| mozillacert118.pem | Mar 13, 2014 | 7E:78:4A:10:1C:82:65:CC:2D:E1:F1:6D:47:B4:40:CA:D9:0A:19:45 | 
| mozillacert151.pem | Mar 13, 2014 | AC:ED:5F:65:53:FD:25:CE:01:5F:1F:7A:48:3B:6A:74:9F:61:78:C6 | 
| mozillacert43.pem | Mar 13, 2014 | F9:CD:0E:2C:DA:76:24:C1:8F:BD:F0:F0:AB:B6:45:B8:F7:FE:D5:7A | 
| mozillacert107.pem | Mar 13, 2014 | 8E:1C:74:F8:A6:20:B9:E5:8A:F4:61:FA:EC:2B:47:56:51:1A:52:C6 | 
| mozillacert94.pem | Mar 13, 2014 | 49:0A:75:74:DE:87:0A:47:FE:58:EE:F6:C7:6B:EB:C6:0B:12:40:99 | 
| mozillacert140.pem | Mar 13, 2014 | CA:3A:FB:CF:12:40:36:4B:44:B2:16:20:88:80:48:39:19:93:7C:F7 | 
| mozillacert32.pem | Mar 13, 2014 | 60:D6:89:74:B5:C2:65:9E:8A:0F:C1:88:7C:88:D2:46:69:1B:18:2C | 
| mozillacert83.pem | Mar 13, 2014 | A0:73:E5:C5:BD:43:61:0D:86:4C:21:13:0A:85:58:57:CC:9C:EA:46 | 
| mozillacert147.pem | Mar 13, 2014 | 58:11:9F:0E:12:82:87:EA:50:FD:D9:87:45:6F:4F:78:DC:FA:D6:D4 | 
| mozillacert21.pem | Mar 13, 2014 | 9B:AA:E5:9F:56:EE:21:CB:43:5A:BE:25:93:DF:A7:F0:40:D1:1D:CB | 
| mozillacert39.pem | Mar 13, 2014 | AE:50:83:ED:7C:F4:5C:BC:8F:61:C6:21:FE:68:5D:79:42:21:15:6E | 
| mozillacert6.pem | Mar 13, 2014 | 27:96:BA:E6:3F:18:01:E2:77:26:1B:A0:D7:77:70:02:8F:20:EE:E4 | 
| mozillacert72.pem | Mar 13, 2014 | 47:BE:AB:C9:22:EA:E8:0E:78:78:34:62:A7:9F:45:C2:54:FD:E6:8B | 
| mozillacert136.pem | Mar 13, 2014 | D1:EB:23:A4:6D:17:D6:8F:D9:25:64:C2:F1:F1:60:17:64:D8:E3:49 | 
| mozillacert10.pem | Mar 13, 2014 | 5F:3A:FC:0A:8B:64:F6:86:67:34:74:DF:7E:A9:A2:FE:F9:FA:7A:51 | 
| mozillacert28.pem | Mar 13, 2014 | 66:31:BF:9E:F7:4F:9E:B6:C9:D5:A6:0C:BA:6A:BE:D1:F7:BD:EF:7B | 
| mozillacert61.pem | Mar 13, 2014 | E0:B4:32:2E:B2:F6:A5:68:B6:54:53:84:48:18:4A:50:36:87:43:84 | 
| mozillacert79.pem | Mar 13, 2014 | D8:A6:33:2C:E0:03:6F:B1:85:F6:63:4F:7D:6A:06:65:26:32:28:27 | 
| mozillacert125.pem | Mar 13, 2014 | B3:1E:B1:B7:40:E3:6C:84:02:DA:DC:37:D4:4D:F5:D4:67:49:52:F9 | 
| mozillacert17.pem | Mar 13, 2014 | 40:54:DA:6F:1C:3F:40:74:AC:ED:0F:EC:CD:DB:79:D1:53:FB:90:1D | 
| mozillacert50.pem | Mar 13, 2014 | 8C:96:BA:EB:DD:2B:07:07:48:EE:30:32:66:A0:F3:98:6E:7C:AE:58 | 
| mozillacert68.pem | Mar 13, 2014 | AE:C5:FB:3F:C8:E1:BF:C4:E5:4F:03:07:5A:9A:E8:00:B7:F7:B6:FA | 
| mozillacert114.pem | Mar 13, 2014 | 51:C6:E7:08:49:06:6E:F3:92:D4:5C:A0:0D:6D:A3:62:8F:C3:52:39 | 
| mozillacert57.pem | Mar 13, 2014 | D6:DA:A8:20:8D:09:D2:15:4D:24:B5:2F:CB:34:6E:B2:58:B2:8A:58 | 
| mozillacert103.pem | Mar 13, 2014 | 70:C1:8D:74:B4:28:81:0A:E4:FD:A5:75:D7:01:9F:99:B0:3D:50:74 | 
| mozillacert90.pem | Mar 13, 2014 | F3:73:B3:87:06:5A:28:84:8A:F2:F3:4A:CE:19:2B:DD:C7:8E:9C:AC | 
| mozillacert46.pem | Mar 13, 2014 | 40:9D:4B:D9:17:B5:5C:27:B6:9B:64:CB:98:22:44:0D:CD:09:B8:89 | 
| mozillacert97.pem | Mar 13, 2014 | 85:37:1C:A6:E5:50:14:3D:CE:28:03:47:1B:DE:3A:09:E8:F8:77:0F | 
| mozillacert143.pem | Mar 13, 2014 | 36:B1:2B:49:F9:81:9E:D7:4C:9E:BC:38:0F:C6:56:8F:5D:AC:B2:F7 | 
| mozillacert35.pem | Mar 13, 2014 | 2A:C8:D5:8B:57:CE:BF:2F:49:AF:F2:FC:76:8F:51:14:62:90:7A:41 | 
| mozillacert2.pem | Mar 13, 2014 | 22:D5:D8:DF:8F:02:31:D1:8D:F7:9D:B7:CF:8A:2D:64:C9:3F:6C:3A | 
| mozillacert86.pem | Mar 13, 2014 | 74:2C:31:92:E6:07:E4:24:EB:45:49:54:2B:E1:BB:C5:3E:61:74:E2 | 
| mozillacert132.pem | Mar 13, 2014 | 39:21:C1:15:C1:5D:0E:CA:5C:CB:5B:C4:F0:7D:21:D8:05:0B:56:6A | 
| mozillacert24.pem | Mar 13, 2014 | 59:AF:82:79:91:86:C7:B4:75:07:CB:CF:03:57:46:EB:04:DD:B7:16 | 
| mozillacert9.pem | Mar 13, 2014 | F4:8B:11:BF:DE:AB:BE:94:54:20:71:E6:41:DE:6B:BE:88:2B:40:B9 | 
| mozillacert75.pem | Mar 13, 2014 | D2:32:09:AD:23:D3:14:23:21:74:E4:0D:7F:9D:62:13:97:86:63:3A | 
| mozillacert121.pem | Mar 13, 2014 | CC:AB:0E:A0:4C:23:01:D6:69:7B:DD:37:9F:CD:12:EB:24:E3:94:9D | 
| mozillacert139.pem | Mar 13, 2014 | DE:3F:40:BD:50:93:D3:9B:6C:60:F6:DA:BC:07:62:01:00:89:76:C9 | 
| mozillacert13.pem | Mar 13, 2014 | 06:08:3F:59:3F:15:A1:04:A0:69:A4:6B:A9:03:D0:06:B7:97:09:91 | 
| mozillacert64.pem | Mar 13, 2014 | 62:7F:8D:78:27:65:63:99:D2:7D:7F:90:44:C9:FE:B3:F3:3E:FA:9A | 
| mozillacert110.pem | Mar 13, 2014 | 93:05:7A:88:15:C6:4F:CE:88:2F:FA:91:16:52:28:78:BC:53:64:17 | 
| mozillacert128.pem | Mar 13, 2014 | A9:E9:78:08:14:37:58:88:F2:05:19:B0:6D:2B:0D:2B:60:16:90:7D | 
| mozillacert53.pem | Mar 13, 2014 | 7F:8A:B0:CF:D0:51:87:6A:66:F3:36:0F:47:C8:8D:8C:D3:35:FC:74 | 
| mozillacert117.pem | Mar 13, 2014 | D4:DE:20:D0:5E:66:FC:53:FE:1A:50:88:2C:78:DB:28:52:CA:E4:74 | 
| mozillacert150.pem | Mar 13, 2014 | 33:9B:6B:14:50:24:9B:55:7A:01:87:72:84:D9:E0:2F:C3:D2:D8:E9 | 
| mozillacert42.pem | Mar 13, 2014 | 85:A4:08:C0:9C:19:3E:5D:51:58:7D:CD:D6:13:30:FD:8C:DE:37:BF | 
| mozillacert106.pem | Mar 13, 2014 | E7:A1:90:29:D3:D5:52:DC:0D:0F:C6:92:D3:EA:88:0D:15:2E:1A:6B | 
| mozillacert93.pem | Mar 13, 2014 | 31:F1:FD:68:22:63:20:EE:C6:3B:3F:9D:EA:4A:3E:53:7C:7C:39:17 | 
| mozillacert31.pem | Mar 13, 2014 | 9F:74:4E:9F:2B:4D:BA:EC:0F:31:2C:50:B6:56:3B:8E:2D:93:C3:11 | 
| mozillacert49.pem | Mar 13, 2014 | 61:57:3A:11:DF:0E:D8:7E:D5:92:65:22:EA:D0:56:D7:44:B3:23:71 | 
| mozillacert82.pem | Mar 13, 2014 | 2E:14:DA:EC:28:F0:FA:1E:8E:38:9A:4E:AB:EB:26:C0:0A:D3:83:C3 | 
| mozillacert146.pem | Mar 13, 2014 | 21:FC:BD:8E:7F:6C:AF:05:1B:D1:B3:43:EC:A8:E7:61:47:F2:0F:8A | 
| mozillacert20.pem | Mar 13, 2014 | D8:C5:38:8A:B7:30:1B:1B:6E:D4:7A:E6:45:25:3A:6F:9F:1A:27:61 | 
| mozillacert38.pem | Mar 13, 2014 | CB:A1:C5:F8:B0:E3:5E:B8:B9:45:12:D3:F9:34:A2:E9:06:10:D3:36 | 
| mozillacert5.pem | Mar 13, 2014 | B8:01:86:D1:EB:9C:86:A5:41:04:CF:30:54:F3:4C:52:B7:E5:58:C6 | 
| mozillacert71.pem | Mar 13, 2014 | 4A:BD:EE:EC:95:0D:35:9C:89:AE:C7:52:A1:2C:5B:29:F6:D6:AA:0C | 
| mozillacert89.pem | Mar 13, 2014 | C8:EC:8C:87:92:69:CB:4B:AB:39:E9:8D:7E:57:67:F3:14:95:73:9D | 
| mozillacert135.pem | Mar 13, 2014 | 62:52:DC:40:F7:11:43:A2:2F:DE:9E:F7:34:8E:06:42:51:B1:81:18 | 
| mozillacert27.pem | Mar 13, 2014 | 3A:44:73:5A:E5:81:90:1F:24:86:61:46:1E:3B:9C:C4:5F:F5:3A:1B | 
| mozillacert60.pem | Mar 13, 2014 | 3B:C4:9F:48:F8:F3:73:A0:9C:1E:BD:F8:5B:B1:C3:65:C7:D8:11:B3 | 
| mozillacert78.pem | Mar 13, 2014 | 29:36:21:02:8B:20:ED:02:F5:66:C5:32:D1:D6:ED:90:9F:45:00:2F | 
| mozillacert124.pem | Mar 13, 2014 | 4D:23:78:EC:91:95:39:B5:00:7F:75:8F:03:3B:21:1E:C5:4D:8B:CF | 
| mozillacert16.pem | Mar 13, 2014 | DA:C9:02:4F:54:D8:F6:DF:94:93:5F:B1:73:26:38:CA:6A:D7:7C:13 | 
| mozillacert67.pem | Mar 13, 2014 | D6:9B:56:11:48:F0:1C:77:C5:45:78:C1:09:26:DF:5B:85:69:76:AD | 
| mozillacert113.pem | Mar 13, 2014 | 50:30:06:09:1D:97:D4:F5:AE:39:F7:CB:E7:92:7D:7D:65:2D:34:31 | 
| mozillacert56.pem | Mar 13, 2014 | F1:8B:53:8D:1B:E9:03:B6:A6:F0:56:43:5B:17:15:89:CA:F3:6B:F2 | 
| mozillacert102.pem | Mar 13, 2014 | 96:C9:1B:0B:95:B4:10:98:42:FA:D0:D8:22:79:FE:60:FA:B9:16:83 | 
| mozillacert45.pem | Mar 13, 2014 | 67:65:0D:F1:7E:8E:7E:5B:82:40:A4:F4:56:4B:CF:E2:3D:69:C6:F0 | 
| mozillacert109.pem | Mar 13, 2014 | B5:61:EB:EA:A4:DE:E4:25:4B:69:1A:98:A5:57:47:C2:34:C7:D9:71 | 
| mozillacert96.pem | Mar 13, 2014 | 55:A6:72:3E:CB:F2:EC:CD:C3:23:74:70:19:9D:2A:BE:11:E3:81:D1 | 
| mozillacert142.pem | Mar 13, 2014 | 1F:49:14:F7:D8:74:95:1D:DD:AE:02:C0:BE:FD:3A:2D:82:75:51:85 | 
| mozillacert34.pem | Mar 13, 2014 | 59:22:A1:E1:5A:EA:16:35:21:F8:98:39:6A:46:46:B0:44:1B:0F:A9 | 
| mozillacert1.pem | Mar 13, 2014 | 23:E5:94:94:51:95:F2:41:48:03:B4:D5:64:D2:A3:A3:F5:D8:8B:8C | 
| mozillacert85.pem | Mar 13, 2014 | CF:9E:87:6D:D3:EB:FC:42:26:97:A3:B5:A3:7A:A0:76:A9:06:23:48 | 
| mozillacert131.pem | Mar 13, 2014 | 37:9A:19:7B:41:85:45:35:0C:A6:03:69:F3:3C:2E:AF:47:4F:20:79 | 
| mozillacert149.pem | Mar 13, 2014 | 6E:3A:55:A4:19:0C:19:5C:93:84:3C:C0:DB:72:2E:31:30:61:F0:B1 | 
| mozillacert23.pem | Mar 13, 2014 | 91:C6:D6:EE:3E:8A:C8:63:84:E5:48:C2:99:29:5C:75:6C:81:7B:81 | 
| mozillacert8.pem | Mar 13, 2014 | 3E:2B:F7:F2:03:1B:96:F3:8C:E6:C4:D8:A8:5D:3E:2D:58:47:6A:0F | 
| mozillacert74.pem | Mar 13, 2014 | 92:5A:8F:8D:2C:6D:04:E0:66:5F:59:6A:FF:22:D8:63:E8:25:6F:3F | 
| mozillacert120.pem | Mar 13, 2014 | DA:40:18:8B:91:89:A3:ED:EE:AE:DA:97:FE:2F:9D:F5:B7:D1:8A:41 | 
| mozillacert138.pem | Mar 13, 2014 | E1:9F:E3:0E:8B:84:60:9E:80:9B:17:0D:72:A8:C5:BA:6E:14:09:BD | 
| mozillacert12.pem | Mar 13, 2014 | A8:98:5D:3A:65:E5:E5:C4:B2:D7:D6:6D:40:C6:DD:2F:B1:9C:54:36 | 
| mozillacert63.pem | Mar 13, 2014 | 89:DF:74:FE:5C:F4:0F:4A:80:F9:E3:37:7D:54:DA:91:E1:01:31:8E | 
| mozillacert127.pem | Mar 13, 2014 | DE:28:F4:A4:FF:E5:B9:2F:A3:C5:03:D1:A3:49:A7:F9:96:2A:82:12 | 
| mozillacert19.pem | Mar 13, 2014 | B4:35:D4:E1:11:9D:1C:66:90:A7:49:EB:B3:94:BD:63:7B:A7:82:B7 | 
| mozillacert52.pem | Mar 13, 2014 | 8B:AF:4C:9B:1D:F0:2A:92:F7:DA:12:8E:B9:1B:AC:F4:98:60:4B:6F | 
| mozillacert116.pem | Mar 13, 2014 | 2B:B1:F5:3E:55:0C:1D:C5:F1:D4:E6:B7:6A:46:4B:55:06:02:AC:21 | 
| mozillacert41.pem | Mar 13, 2014 | 6B:2F:34:AD:89:58:BE:62:FD:B0:6B:5C:CE:BB:9D:D9:4F:4E:39:F3 | 
| mozillacert59.pem | Mar 13, 2014 | 36:79:CA:35:66:87:72:30:4D:30:A5:FB:87:3B:0F:A7:7B:B7:0D:54 | 
| mozillacert105.pem | Mar 13, 2014 | 77:47:4F:C6:30:E4:0F:4C:47:64:3F:84:BA:B8:C6:95:4A:8A:41:EC | 
| mozillacert92.pem | Mar 13, 2014 | A3:F1:33:3F:E2:42:BF:CF:C5:D1:4E:8F:39:42:98:40:68:10:D1:A0 | 
| mozillacert30.pem | Mar 13, 2014 | E7:B4:F6:9D:61:EC:90:69:DB:7E:90:A7:40:1A:3C:F4:7D:4F:E8:EE | 
| mozillacert48.pem | Mar 13, 2014 | A0:A1:AB:90:C9:FC:84:7B:3B:12:61:E8:97:7D:5F:D3:22:61:D3:CC | 
| verisignc4g2.pem | Mar 20, 2014 | 0B:77:BE:BB:CB:7A:A2:47:05:DE:CC:0F:BD:6A:02:FC:7A:BD:9B:52 | 
| verisignc2g3.pem | Mar 20, 2014 | 61:EF:43:D7:7F:CA:D4:61:51:BC:98:E0:C3:59:12:AF:9F:EB:63:11 | 
| verisignc1g6.pem | 31 Desember 2014 | 51:7F:61:1E:29:91:6B:53:82:FB:72:E7:44:D9:8D:C3:CC:53:6D:64 | 
| verisignc2g2.pem | Mar 20, 2014 | B3:EA:C4:47:76:C9:C8:1C:EA:F2:9D:95:B6:CC:A0:08:1B:67:EC:9D | 
| verisignroot.pem | Mar 20, 2014 | 36:79:CA:35:66:87:72:30:4D:30:A5:FB:87:3B:0F:A7:7B:B7:0D:54 | 
| verisignc2g1.pem | Mar 20, 2014 | 67:82:AA:E0:ED:EE:E2:1A:58:39:D3:C0:CD:14:68:0A:4F:60:14:2A | 
| verisignc3g5.pem | Mar 20, 2014 | 4E:B6:D5:78:49:9B:1C:CF:5F:58:1E:AD:56:BE:3D:9B:67:44:A5:E5 | 
| verisignc1g3.pem | Mar 20, 2014 | 20:42:85:DC:F7:EB:76:41:95:57:8E:13:6B:D4:B7:D1:E9:8E:46:A5 | 
| verisignc3g4.pem | Mar 20, 2014 | 22:D5:D8:DF:8F:02:31:D1:8D:F7:9D:B7:CF:8A:2D:64:C9:3F:6C:3A | 
| verisignc1g2.pem | Mar 20, 2014 | 27:3E:E1:24:57:FD:C4:F9:0C:55:E8:2B:56:16:7F:62:F5:32:E5:47 | 
| verisignc3g3.pem | Mar 20, 2014 | 13:2D:0D:45:53:4B:69:97:CD:B2:D5:C3:39:E2:55:76:60:9B:5C:C6 | 
| verisignc1g1.pem | Mar 20, 2014 | 90:AE:A2:69:85:FF:14:80:4C:43:49:52:EC:E9:60:84:77:AF:55:6F | 
| verisignc3g2.pem | Mar 20, 2014 | 85:37:1C:A6:E5:50:14:3D:CE:28:03:47:1B:DE:3A:09:E8:F8:77:0F | 
| verisignc3g1.pem | Mar 20, 2014 | A1:DB:63:93:91:6F:17:E4:18:55:09:40:04:15:C7:02:40:B0:AE:6B | 
| verisignc2g6.pem | 31 Desember 2014 | 40:B3:31:A0:E9:BF:E8:55:BC:39:93:CA:70:4F:4E:C2:51:D4:1D:8F | 
| verisignc4g3.pem | Mar 20, 2014 | C8:EC:8C:87:92:69:CB:4B:AB:39:E9:8D:7E:57:67:F3:14:95:73:9D | 
| gdroot-g2.pem | 31 Desember 2014 | 47:BE:AB:C9:22:EA:E8:0E:78:78:34:62:A7:9F:45:C2:54:FD:E6:8B | 
| gd-class2-root.pem | 31 Desember 2014 | 27:96:BA:E6:3F:18:01:E2:77:26:1B:A0:D7:77:70:02:8F:20:EE:E4 | 
| gd\$1bundle-g2.pem | 31 Desember 2014 | 27:AC:93:69:FA:F2:52:07:BB:26:27:CE:FA:CC:BE:4E:F9:C3:19:B8 | 
| dstacescax6 | 18 Jun 2018 | 40:54:DA:6F:1C:3F:40:74:AC:ED:0F:EC:CD:DB:79:D1:53:FB:90:1D | 
| gd\$1bundle-g2.pem | 18 Jun 2018 | 27:AC:93:69:FA:F2:52:07:BB:26:27:CE:FA:CC:BE:4E:F9:C3:19:B8 | 
| verisignc4g3.pem | 18 Jun 2018 | C8:EC:8C:87:92:69:CB:4B:AB:39:E9:8D:7E:57:67:F3:14:95:73:9D | 
| swisssignplatinumg2ca | 21 Apr 2018 | 56:E0:FA:C0:3B:8F:18:23:55:18:E5:D3:11:CA:E8:C2:43:31:AB:66 | 
| geotrustprimarycertificationauthorityg3 | 18 Jun 2018 | 03:9E:ED:B8:0B:E7:A0:3C:69:53:89:3B:20:D2:D9:32:3A:4C:2A:FD | 
| geotrustprimarycertificationauthorityg2 | 18 Jun 2018 | 8D:17:84:D5:37:F3:03:7D:EC:70:FE:57:8B:51:9A:99:E6:10:D7:B0 | 
| buypassclass2rootca | 18 Jun 2018 | 49:0A:75:74:DE:87:0A:47:FE:58:EE:F6:C7:6B:EB:C6:0B:12:40:99 | 
| camerfirmachambersofcommerceroot | 18 Jun 2018 | 6E:3A:55:A4:19:0C:19:5C:93:84:3C:C0:DB:72:2E:31:30:61:F0:B1 | 
| mozillacert20.pem | 18 Jun 2018 | D8:C5:38:8A:B7:30:1B:1B:6E:D4:7A:E6:45:25:3A:6F:9F:1A:27:61 | 
| mozillacert12.pem | 18 Jun 2018 | A8:98:5D:3A:65:E5:E5:C4:B2:D7:D6:6D:40:C6:DD:2F:B1:9C:54:36 | 
| mozillacert90.pem | 18 Jun 2018 | F3:73:B3:87:06:5A:28:84:8A:F2:F3:4A:CE:19:2B:DD:C7:8E:9C:AC | 
| mozillacert82.pem | 18 Jun 2018 | 2E:14:DA:EC:28:F0:FA:1E:8E:38:9A:4E:AB:EB:26:C0:0A:D3:83:C3 | 
| mozillacert140.pem | 18 Jun 2018 | CA:3A:FB:CF:12:40:36:4B:44:B2:16:20:88:80:48:39:19:93:7C:F7 | 
| mozillacert74.pem | 18 Jun 2018 | 92:5A:8F:8D:2C:6D:04:E0:66:5F:59:6A:FF:22:D8:63:E8:25:6F:3F | 
| mozillacert132.pem | 18 Jun 2018 | 39:21:C1:15:C1:5D:0E:CA:5C:CB:5B:C4:F0:7D:21:D8:05:0B:56:6A | 
| mozillacert66.pem | 18 Jun 2018 | DD:E1:D2:A9:01:80:2E:1D:87:5E:84:B3:80:7E:4B:B1:FD:99:41:34 | 
| mozillacert124.pem | 18 Jun 2018 | 4D:23:78:EC:91:95:39:B5:00:7F:75:8F:03:3B:21:1E:C5:4D:8B:CF | 
| mozillacert58.pem | 18 Jun 2018 | 8D:17:84:D5:37:F3:03:7D:EC:70:FE:57:8B:51:9A:99:E6:10:D7:B0 | 
| securitycommunicationrootca2 | 18 Jun 2018 | 5F:3B:8C:F2:F8:10:B3:7D:78:B4:CE:EC:19:19:C3:73:34:B9:C7:74 | 
| mozillacert116.pem | 18 Jun 2018 | 2B:B1:F5:3E:55:0C:1D:C5:F1:D4:E6:B7:6A:46:4B:55:06:02:AC:21 | 
| mozillacert108.pem | 18 Jun 2018 | B1:BC:96:8B:D4:F4:9D:62:2A:A8:9A:81:F2:15:01:52:A4:1D:82:9C | 
| certigna | 18 Jun 2018 | B1:2E:13:63:45:86:A4:6F:1A:B2:60:68:37:58:2D:C4:AC:FD:94:97 | 
| mozillacert3.pem | 18 Jun 2018 | 87:9F:4B:EE:05:DF:98:58:3B:E3:60:D6:33:E7:0D:3F:FE:98:71:AF | 
| verisignc1g1.pem | 18 Jun 2018 | 90:AE:A2:69:85:FF:14:80:4C:43:49:52:EC:E9:60:84:77:AF:55:6F | 
| verisignc4g2.pem | 18 Jun 2018 | 0B:77:BE:BB:CB:7A:A2:47:05:DE:CC:0F:BD:6A:02:FC:7A:BD:9B:52 | 
| deutschetelekomrootca2 | 18 Jun 2018 | 85:A4:08:C0:9C:19:3E:5D:51:58:7D:CD:D6:13:30:FD:8C:DE:37:BF | 
| starfieldrootg2ca | 21 Apr 2018 | B5:1C:06:7C:EE:2B:0C:3D:F8:55:AB:2D:92:F4:FE:39:D4:E7:0F:0E | 
| comodoecccertificationauthority | 18 Jun 2018 | 9F:74:4E:9F:2B:4D:BA:EC:0F:31:2C:50:B6:56:3B:8E:2D:93:C3:11 | 
| digicertglobalrootg3 | 18 Jun 2018 | 7E:04:DE:89:6A:3E:66:6D:00:E6:87:D3:3F:FA:D9:3B:E8:3D:34:9E | 
| digicertglobalrootg2 | 18 Jun 2018 | DF:3C:24:F9:BF:D6:66:76:1B:26:80:73:FE:06:D1:CC:8D:4F:82:A4 | 
| mozillacert11.pem | 18 Jun 2018 | 05:63:B8:63:0D:62:D7:5A:BB:C8:AB:1E:4B:DF:B5:A8:99:B2:4D:43 | 
| mozillacert81.pem | 18 Jun 2018 | 07:E0:32:E0:20:B7:2C:3F:19:2F:06:28:A2:59:3A:19:A7:0F:06:9E | 
| mozillacert73.pem | 18 Jun 2018 | B5:1C:06:7C:EE:2B:0C:3D:F8:55:AB:2D:92:F4:FE:39:D4:E7:0F:0E | 
| szafirrootca2 | 18 Jun 2018 | E2:52:FA:95:3F:ED:DB:24:60:BD:6E:28:F3:9C:CC:CF:5E:B3:3F:DE | 
| mozillacert131.pem | 18 Jun 2018 | 37:9A:19:7B:41:85:45:35:0C:A6:03:69:F3:3C:2E:AF:47:4F:20:79 | 
| ecacc | 18 Jun 2018 | 28:90:3A:63:5B:52:80:FA:E6:77:4C:0B:6D:A7:D6:BA:A6:4A:F2:E8 | 
| mozillacert65.pem | 18 Jun 2018 | 69:BD:8C:F4:9C:D3:00:FB:59:2E:17:93:CA:55:6A:F3:EC:AA:35:FB | 
| turktrustelektroniksertifikahizmetsaglayicisih5 | 18 Jun 2018 | C4:18:F6:4D:46:D1:DF:00:3D:27:30:13:72:43:A9:12:11:C6:75:FB | 
| mozillacert123.pem | 18 Jun 2018 | 2A:B6:28:48:5E:78:FB:F3:AD:9E:79:10:DD:6B:DF:99:72:2C:96:E5 | 
| mozillacert57.pem | 18 Jun 2018 | D6:DA:A8:20:8D:09:D2:15:4D:24:B5:2F:CB:34:6E:B2:58:B2:8A:58 | 
| mozillacert115.pem | 18 Jun 2018 | 59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF:17:D8:94:E9 | 
| mozillacert49.pem | 18 Jun 2018 | 61:57:3A:11:DF:0E:D8:7E:D5:92:65:22:EA:D0:56:D7:44:B3:23:71 | 
| mozillacert107.pem | 18 Jun 2018 | 8E:1C:74:F8:A6:20:B9:E5:8A:F4:61:FA:EC:2B:47:56:51:1A:52:C6 | 
| verisignclass3g4ca | 21 Apr 2018 | 22:D5:D8:DF:8F:02:31:D1:8D:F7:9D:B7:CF:8A:2D:64:C9:3F:6C:3A | 
| securetrustca | 18 Jun 2018 | 87:82:C6:C3:04:35:3B:CF:D2:96:92:D2:59:3E:7D:44:D9:34:FF:11 | 
| mozillacert2.pem | 18 Jun 2018 | 22:D5:D8:DF:8F:02:31:D1:8D:F7:9D:B7:CF:8A:2D:64:C9:3F:6C:3A | 
| buypassclass2ca | 21 Apr 2018 | 49:0A:75:74:DE:87:0A:47:FE:58:EE:F6:C7:6B:EB:C6:0B:12:40:99 | 
| secomscrootca2 | 21 Apr 2018 | 5F:3B:8C:F2:F8:10:B3:7D:78:B4:CE:EC:19:19:C3:73:34:B9:C7:74 | 
| secomscrootca1 | 21 Apr 2018 | 36:B1:2B:49:F9:81:9E:D7:4C:9E:BC:38:0F:C6:56:8F:5D:AC:B2:F7 | 
| trustisfpsrootca | 18 Jun 2018 | 3B:C0:38:0B:33:C3:F6:A6:0C:86:15:22:93:D9:DF:F5:4B:81:C0:04 | 
| hongkongpostrootca1 | 18 Jun 2018 | D6:DA:A8:20:8D:09:D2:15:4D:24:B5:2F:CB:34:6E:B2:58:B2:8A:58 | 
| certsignrootca | 18 Jun 2018 | FA:B7:EE:36:97:26:62:FB:2D:B0:2A:F6:BF:03:FD:E8:7C:4B:2F:9B | 
| geotrustprimaryca | 21 Apr 2018 | 32:3C:11:8E:1B:F7:B8:B6:52:54:E2:E2:10:0D:D6:02:90:37:F0:96 | 
| twcaglobalrootca | 18 Jun 2018 | 9C:BB:48:53:F6:A4:F6:D3:52:A4:E8:32:52:55:60:13:F5:AD:AF:65 | 
| camerfirmachambersca | 21 Apr 2018 | 78:6A:74:AC:76:AB:14:7F:9C:6A:30:50:BA:9E:A8:7E:FE:9A:CE:3C | 
| mozillacert10.pem | 18 Jun 2018 | 5F:3A:FC:0A:8B:64:F6:86:67:34:74:DF:7E:A9:A2:FE:F9:FA:7A:51 | 
| mozillacert80.pem | 18 Jun 2018 | B8:23:6B:00:2F:1D:16:86:53:01:55:6C:11:A4:37:CA:EB:FF:C3:BB | 
| mozillacert72.pem | 18 Jun 2018 | 47:BE:AB:C9:22:EA:E8:0E:78:78:34:62:A7:9F:45:C2:54:FD:E6:8B | 
| comodoaaaca | 21 Apr 2018 | D1:EB:23:A4:6D:17:D6:8F:D9:25:64:C2:F1:F1:60:17:64:D8:E3:49 | 
| mozillacert130.pem | 18 Jun 2018 | E5:DF:74:3C:B6:01:C4:9B:98:43:DC:AB:8C:E8:6A:81:10:9F:E4:8E | 
| mozillacert64.pem | 18 Jun 2018 | 62:7F:8D:78:27:65:63:99:D2:7D:7F:90:44:C9:FE:B3:F3:3E:FA:9A | 
| mozillacert122.pem | 18 Jun 2018 | 02:FA:F3:E2:91:43:54:68:60:78:57:69:4D:F5:E4:5B:68:85:18:68 | 
| mozillacert56.pem | 18 Jun 2018 | F1:8B:53:8D:1B:E9:03:B6:A6:F0:56:43:5B:17:15:89:CA:F3:6B:F2 | 
| equifaxsecureebusinessca1 | 21 Apr 2018 | AE:E6:3D:70:E3:76:FB:C7:3A:EB:B0:A1:C1:D4:C4:7A:A7:40:B3:F4 | 
| camerfirmachambersignca | 21 Apr 2018 | 4A:BD:EE:EC:95:0D:35:9C:89:AE:C7:52:A1:2C:5B:29:F6:D6:AA:0C | 
| mozillacert114.pem | 18 Jun 2018 | 51:C6:E7:08:49:06:6E:F3:92:D4:5C:A0:0D:6D:A3:62:8F:C3:52:39 | 
| mozillacert48.pem | 18 Jun 2018 | A0:A1:AB:90:C9:FC:84:7B:3B:12:61:E8:97:7D:5F:D3:22:61:D3:CC | 
| pscprocert | 18 Jun 2018 | 70:C1:8D:74:B4:28:81:0A:E4:FD:A5:75:D7:01:9F:99:B0:3D:50:74 | 
| mozillacert106.pem | 18 Jun 2018 | E7:A1:90:29:D3:D5:52:DC:0D:0F:C6:92:D3:EA:88:0D:15:2E:1A:6B | 
| mozillacert1.pem | 18 Jun 2018 | 23:E5:94:94:51:95:F2:41:48:03:B4:D5:64:D2:A3:A3:F5:D8:8B:8C | 
| eecertificationcentrerootca | 18 Jun 2018 | C9:A8:B9:E7:55:80:5E:58:E3:53:77:A7:25:EB:AF:C3:7B:27:CC:D7 | 
| digicertglobalrootca | 18 Jun 2018 | A8:98:5D:3A:65:E5:E5:C4:B2:D7:D6:6D:40:C6:DD:2F:B1:9C:54:36 | 
| thawteprimaryrootcag3 | 18 Jun 2018 | F1:8B:53:8D:1B:E9:03:B6:A6:F0:56:43:5B:17:15:89:CA:F3:6B:F2 | 
| thawteprimaryrootcag2 | 18 Jun 2018 | AA:DB:BC:22:23:8F:C4:01:A1:27:BB:38:DD:F4:1D:DB:08:9E:F0:12 | 
| entrustrootcertificationauthorityec1 | 18 Jun 2018 | 20:D8:06:40:DF:9B:25:F5:12:25:3A:11:EA:F7:59:8A:EB:14:B5:47 | 
| valicertclass2ca | 21 Apr 2018 | 31:7A:2A:D0:7F:2B:33:5E:F5:A1:C3:4E:4B:57:E8:B7:D8:F1:FC:A6 | 
| globalchambersignroot2008 | 18 Jun 2018 | 4A:BD:EE:EC:95:0D:35:9C:89:AE:C7:52:A1:2C:5B:29:F6:D6:AA:0C | 
| amazonrootca4 | 18 Jun 2018 | F6:10:84:07:D6:F8:BB:67:98:0C:C2:E2:44:C2:EB:AE:1C:EF:63:BE | 
| gd-class2-root.pem | 18 Jun 2018 | 27:96:BA:E6:3F:18:01:E2:77:26:1B:A0:D7:77:70:02:8F:20:EE:E4 | 
| amazonrootca3 | 18 Jun 2018 | 0D:44:DD:8C:3C:8C:1A:1A:58:75:64:81:E9:0F:2E:2A:FF:B3:D2:6E | 
| amazonrootca2 | 18 Jun 2018 | 5A:8C:EF:45:D7:A6:98:59:76:7A:8C:8B:44:96:B5:78:CF:47:4B:1A | 
| securitycommunicationrootca | 18 Jun 2018 | 36:B1:2B:49:F9:81:9E:D7:4C:9E:BC:38:0F:C6:56:8F:5D:AC:B2:F7 | 
| amazonrootca1 | 18 Jun 2018 | 8D:A7:F9:65:EC:5E:FC:37:91:0F:1C:6E:59:FD:C1:CC:6A:6E:DE:16 | 
| acraizfnmtrcm | 18 Jun 2018 | EC:50:35:07:B2:15:C4:95:62:19:E2:A8:9A:5B:42:99:2C:4C:2C:20 | 
| quovadisrootca3g3 | 18 Jun 2018 | 48:12:BD:92:3C:A8:C4:39:06:E7:30:6D:27:96:E6:A4:CF:22:2E:7D | 
| certplusrootcag2 | 18 Jun 2018 | 4F:65:8E:1F:E9:06:D8:28:02:E9:54:47:41:C9:54:25:5D:69:CC:1A | 
| certplusrootcag1 | 18 Jun 2018 | 22:FD:D0:B7:FD:A2:4E:0D:AC:49:2C:A0:AC:A6:7B:6A:1F:E3:F7:66 | 
| mozillacert71.pem | 18 Jun 2018 | 4A:BD:EE:EC:95:0D:35:9C:89:AE:C7:52:A1:2C:5B:29:F6:D6:AA:0C | 
| mozillacert63.pem | 18 Jun 2018 | 89:DF:74:FE:5C:F4:0F:4A:80:F9:E3:37:7D:54:DA:91:E1:01:31:8E | 
| mozillacert121.pem | 18 Jun 2018 | CC:AB:0E:A0:4C:23:01:D6:69:7B:DD:37:9F:CD:12:EB:24:E3:94:9D | 
| ttelesecglobalrootclass3ca | 21 Apr 2018 | 55:A6:72:3E:CB:F2:EC:CD:C3:23:74:70:19:9D:2A:BE:11:E3:81:D1 | 
| mozillacert55.pem | 18 Jun 2018 | AA:DB:BC:22:23:8F:C4:01:A1:27:BB:38:DD:F4:1D:DB:08:9E:F0:12 | 
| mozillacert113.pem | 18 Jun 2018 | 50:30:06:09:1D:97:D4:F5:AE:39:F7:CB:E7:92:7D:7D:65:2D:34:31 | 
| baltimorecybertrustca | 21 Apr 2018 | D4:DE:20:D0:5E:66:FC:53:FE:1A:50:88:2C:78:DB:28:52:CA:E4:74 | 
| mozillacert47.pem | 18 Jun 2018 | 1B:4B:39:61:26:27:6B:64:91:A2:68:6D:D7:02:43:21:2D:1F:1D:96 | 
| mozillacert105.pem | 18 Jun 2018 | 77:47:4F:C6:30:E4:0F:4C:47:64:3F:84:BA:B8:C6:95:4A:8A:41:EC | 
| mozillacert39.pem | 18 Jun 2018 | AE:50:83:ED:7C:F4:5C:BC:8F:61:C6:21:FE:68:5D:79:42:21:15:6E | 
| usertrustecccertificationauthority | 18 Jun 2018 | D1:CB:CA:5D:B2:D5:2A:7F:69:3B:67:4D:E5:F0:5A:1D:0C:95:7D:F0 | 
| mozillacert0.pem | 18 Jun 2018 | 97:81:79:50:D8:1C:96:70:CC:34:D8:09:CF:79:44:31:36:7E:F4:74 | 
| securitycommunicationevrootca1 | 18 Jun 2018 | FE:B8:C4:32:DC:F9:76:9A:CE:AE:3D:D8:90:8F:FD:28:86:65:64:7D | 
| verisignc3g5.pem | 18 Jun 2018 | 4E:B6:D5:78:49:9B:1C:CF:5F:58:1E:AD:56:BE:3D:9B:67:44:A5:E5 | 
| globalsignr3ca | 21 Apr 2018 | D6:9B:56:11:48:F0:1C:77:C5:45:78:C1:09:26:DF:5B:85:69:76:AD | 
| trustcoreca1 | 18 Jun 2018 | 58:D1:DF:95:95:67:6B:63:C0:F0:5B:1C:17:4D:8B:84:0B:C8:78:BD | 
| equifaxsecureglobalebusinessca1 | 21 Apr 2018 | 3A:74:CB:7A:47:DB:70:DE:89:1F:24:35:98:64:B8:2D:82:BD:1A:36 | 
| geotrustuniversalca | 18 Jun 2018 | E6:21:F3:35:43:79:05:9A:4B:68:30:9D:8A:2F:74:22:15:87:EC:79 | 
| affirmtrustpremiumca | 21 Apr 2018 | D8:A6:33:2C:E0:03:6F:B1:85:F6:63:4F:7D:6A:06:65:26:32:28:27 | 
| staatdernederlandenrootcag3 | 18 Jun 2018 | D8:EB:6B:41:51:92:59:E0:F3:E7:85:00:C0:3D:B6:88:97:C9:EE:FC | 
| staatdernederlandenrootcag2 | 18 Jun 2018 | 59:AF:82:79:91:86:C7:B4:75:07:CB:CF:03:57:46:EB:04:DD:B7:16 | 
| mozillacert70.pem | 18 Jun 2018 | 78:6A:74:AC:76:AB:14:7F:9C:6A:30:50:BA:9E:A8:7E:FE:9A:CE:3C | 
| secomevrootca1 | 21 Apr 2018 | FE:B8:C4:32:DC:F9:76:9A:CE:AE:3D:D8:90:8F:FD:28:86:65:64:7D | 
| geotrustglobalca | 18 Jun 2018 | DE:28:F4:A4:FF:E5:B9:2F:A3:C5:03:D1:A3:49:A7:F9:96:2A:82:12 | 
| mozillacert62.pem | 18 Jun 2018 | A1:DB:63:93:91:6F:17:E4:18:55:09:40:04:15:C7:02:40:B0:AE:6B | 
| mozillacert120.pem | 18 Jun 2018 | DA:40:18:8B:91:89:A3:ED:EE:AE:DA:97:FE:2F:9D:F5:B7:D1:8A:41 | 
| mozillacert54.pem | 18 Jun 2018 | 03:9E:ED:B8:0B:E7:A0:3C:69:53:89:3B:20:D2:D9:32:3A:4C:2A:FD | 
| mozillacert112.pem | 18 Jun 2018 | 43:13:BB:96:F1:D5:86:9B:C1:4E:6A:92:F6:CF:F6:34:69:87:82:37 | 
| mozillacert46.pem | 18 Jun 2018 | 40:9D:4B:D9:17:B5:5C:27:B6:9B:64:CB:98:22:44:0D:CD:09:B8:89 | 
| swisssigngoldcag2 | 18 Jun 2018 | D8:C5:38:8A:B7:30:1B:1B:6E:D4:7A:E6:45:25:3A:6F:9F:1A:27:61 | 
| mozillacert104.pem | 18 Jun 2018 | 4F:99:AA:93:FB:2B:D1:37:26:A1:99:4A:CE:7F:F0:05:F2:93:5D:1E | 
| mozillacert38.pem | 18 Jun 2018 | CB:A1:C5:F8:B0:E3:5E:B8:B9:45:12:D3:F9:34:A2:E9:06:10:D3:36 | 
| certplusclass3pprimaryca | 21 Apr 2018 | 21:6B:2A:29:E6:2A:00:CE:82:01:46:D8:24:41:41:B9:25:11:B2:79 | 
| entrustrootcertificationauthorityg2 | 18 Jun 2018 | 8C:F4:27:FD:79:0C:3A:D1:66:06:8D:E8:1E:57:EF:BB:93:22:72:D4 | 
| godaddyrootg2ca | 21 Apr 2018 | 47:BE:AB:C9:22:EA:E8:0E:78:78:34:62:A7:9F:45:C2:54:FD:E6:8B | 
| cfcaevroot | 18 Jun 2018 | E2:B8:29:4B:55:84:AB:6B:58:C2:90:46:6C:AC:3F:B8:39:8F:84:83 | 
| verisignc3g4.pem | 18 Jun 2018 | 22:D5:D8:DF:8F:02:31:D1:8D:F7:9D:B7:CF:8A:2D:64:C9:3F:6C:3A | 
| geotrustuniversalca2 | 18 Jun 2018 | 37:9A:19:7B:41:85:45:35:0C:A6:03:69:F3:3C:2E:AF:47:4F:20:79 | 
| starfieldservicesrootg2ca | 21 Apr 2018 | 92:5A:8F:8D:2C:6D:04:E0:66:5F:59:6A:FF:22:D8:63:E8:25:6F:3F | 
| digicerthighassuranceevrootca | 18 Jun 2018 | 5F:B7:EE:06:33:E2:59:DB:AD:0C:4C:9A:E6:D3:8F:1A:61:C7:DC:25 | 
| entrustnetpremium2048secureserverca | 18 Jun 2018 | 50:30:06:09:1D:97:D4:F5:AE:39:F7:CB:E7:92:7D:7D:65:2D:34:31 | 
| camerfirmaglobalchambersignroot | 18 Jun 2018 | 33:9B:6B:14:50:24:9B:55:7A:01:87:72:84:D9:E0:2F:C3:D2:D8:E9 | 
| verisignclass3g3ca | 21 Apr 2018 | 13:2D:0D:45:53:4B:69:97:CD:B2:D5:C3:39:E2:55:76:60:9B:5C:C6 | 
| godaddyclass2ca | 18 Jun 2018 | 27:96:BA:E6:3F:18:01:E2:77:26:1B:A0:D7:77:70:02:8F:20:EE:E4 | 
| mozillacert61.pem | 18 Jun 2018 | E0:B4:32:2E:B2:F6:A5:68:B6:54:53:84:48:18:4A:50:36:87:43:84 | 
| mozillacert53.pem | 18 Jun 2018 | 7F:8A:B0:CF:D0:51:87:6A:66:F3:36:0F:47:C8:8D:8C:D3:35:FC:74 | 
| atostrustedroot2011 | 18 Jun 2018 | 2B:B1:F5:3E:55:0C:1D:C5:F1:D4:E6:B7:6A:46:4B:55:06:02:AC:21 | 
| mozillacert111.pem | 18 Jun 2018 | 9C:BB:48:53:F6:A4:F6:D3:52:A4:E8:32:52:55:60:13:F5:AD:AF:65 | 
| staatdernederlandenevrootca | 18 Jun 2018 | 76:E2:7E:C1:4F:DB:82:C1:C0:A6:75:B5:05:BE:3D:29:B4:ED:DB:BB | 
| mozillacert45.pem | 18 Jun 2018 | 67:65:0D:F1:7E:8E:7E:5B:82:40:A4:F4:56:4B:CF:E2:3D:69:C6:F0 | 
| mozillacert103.pem | 18 Jun 2018 | 70:C1:8D:74:B4:28:81:0A:E4:FD:A5:75:D7:01:9F:99:B0:3D:50:74 | 
| mozillacert37.pem | 18 Jun 2018 | B1:2E:13:63:45:86:A4:6F:1A:B2:60:68:37:58:2D:C4:AC:FD:94:97 | 
| mozillacert29.pem | 18 Jun 2018 | 74:F8:A3:C3:EF:E7:B3:90:06:4B:83:90:3C:21:64:60:20:E5:DF:CE | 
| izenpecom | 18 Jun 2018 | 2F:78:3D:25:52:18:A7:4A:65:39:71:B5:2C:A2:9C:45:15:6F:E9:19 | 
| comodorsacertificationauthority | 18 Jun 2018 | AF:E5:D2:44:A8:D1:19:42:30:FF:47:9F:E2:F8:97:BB:CD:7A:8C:B4 | 
| mozillacert99.pem | 18 Jun 2018 | F1:7F:6F:B6:31:DC:99:E3:A3:C8:7F:FE:1C:F1:81:10:88:D9:60:33 | 
| mozillacert149.pem | 18 Jun 2018 | 6E:3A:55:A4:19:0C:19:5C:93:84:3C:C0:DB:72:2E:31:30:61:F0:B1 | 
| utnuserfirstobjectca | 21 Apr 2018 | E1:2D:FB:4B:41:D7:D9:C3:2B:30:51:4B:AC:1D:81:D8:38:5E:2D:46 | 
| verisignc3g3.pem | 18 Jun 2018 | 13:2D:0D:45:53:4B:69:97:CD:B2:D5:C3:39:E2:55:76:60:9B:5C:C6 | 
| dstrootcax3 | 18 Jun 2018 | DA:C9:02:4F:54:D8:F6:DF:94:93:5F:B1:73:26:38:CA:6A:D7:7C:13 | 
| addtrustexternalroot | 18 Jun 2018 | 02:FA:F3:E2:91:43:54:68:60:78:57:69:4D:F5:E4:5B:68:85:18:68 | 
| certumtrustednetworkca | 18 Jun 2018 | 07:E0:32:E0:20:B7:2C:3F:19:2F:06:28:A2:59:3A:19:A7:0F:06:9E | 
| affirmtrustpremiumecc | 18 Jun 2018 | B8:23:6B:00:2F:1D:16:86:53:01:55:6C:11:A4:37:CA:EB:FF:C3:BB | 
| starfieldclass2ca | 18 Jun 2018 | AD:7E:1C:28:B0:64:EF:8F:60:03:40:20:14:C3:D0:E3:37:0E:B5:8A | 
| actalisauthenticationrootca | 18 Jun 2018 | F3:73:B3:87:06:5A:28:84:8A:F2:F3:4A:CE:19:2B:DD:C7:8E:9C:AC | 
| verisignclass2g3ca | 21 Apr 2018 | 61:EF:43:D7:7F:CA:D4:61:51:BC:98:E0:C3:59:12:AF:9F:EB:63:11 | 
| isrgrootx1 | 18 Jun 2018 | CA:BD:2A:79:A1:07:6A:31:F2:1D:25:36:35:CB:03:9D:43:29:A5:E8 | 
| godaddyrootcertificateauthorityg2 | 18 Jun 2018 | 47:BE:AB:C9:22:EA:E8:0E:78:78:34:62:A7:9F:45:C2:54:FD:E6:8B | 
| mozillacert60.pem | 18 Jun 2018 | 3B:C4:9F:48:F8:F3:73:A0:9C:1E:BD:F8:5B:B1:C3:65:C7:D8:11:B3 | 
| chunghwaepkirootca | 21 Apr 2018 | 67:65:0D:F1:7E:8E:7E:5B:82:40:A4:F4:56:4B:CF:E2:3D:69:C6:F0 | 
| mozillacert52.pem | 18 Jun 2018 | 8B:AF:4C:9B:1D:F0:2A:92:F7:DA:12:8E:B9:1B:AC:F4:98:60:4B:6F | 
| microseceszignorootca2009 | 18 Jun 2018 | 89:DF:74:FE:5C:F4:0F:4A:80:F9:E3:37:7D:54:DA:91:E1:01:31:8E | 
| securesignrootca11 | 18 Jun 2018 | 3B:C4:9F:48:F8:F3:73:A0:9C:1E:BD:F8:5B:B1:C3:65:C7:D8:11:B3 | 
| mozillacert110.pem | 18 Jun 2018 | 93:05:7A:88:15:C6:4F:CE:88:2F:FA:91:16:52:28:78:BC:53:64:17 | 
| mozillacert44.pem | 18 Jun 2018 | 5F:43:E5:B1:BF:F8:78:8C:AC:1C:C7:CA:4A:9A:C6:22:2B:CC:34:C6 | 
| mozillacert102.pem | 18 Jun 2018 | 96:C9:1B:0B:95:B4:10:98:42:FA:D0:D8:22:79:FE:60:FA:B9:16:83 | 
| mozillacert36.pem | 18 Jun 2018 | 23:88:C9:D3:71:CC:9E:96:3D:FF:7D:3C:A7:CE:FC:D6:25:EC:19:0D | 
| mozillacert28.pem | 18 Jun 2018 | 66:31:BF:9E:F7:4F:9E:B6:C9:D5:A6:0C:BA:6A:BE:D1:F7:BD:EF:7B | 
| baltimorecybertrustroot | 18 Jun 2018 | D4:DE:20:D0:5E:66:FC:53:FE:1A:50:88:2C:78:DB:28:52:CA:E4:74 | 
| amzninternalrootca | 12 Desember 2008 | A7:B7:F6:15:8A:FF:1E:C8:85:13:38:BC:93:EB:A2:AB:A4:09:EF:06 | 
| mozillacert98.pem | 18 Jun 2018 | C9:A8:B9:E7:55:80:5E:58:E3:53:77:A7:25:EB:AF:C3:7B:27:CC:D7 | 
| mozillacert148.pem | 18 Jun 2018 | 04:83:ED:33:99:AC:36:08:05:87:22:ED:BC:5E:46:00:E3:BE:F9:D7 | 
| verisignc3g2.pem | 18 Jun 2018 | 85:37:1C:A6:E5:50:14:3D:CE:28:03:47:1B:DE:3A:09:E8:F8:77:0F | 
| quovadisrootca2g3 | 18 Jun 2018 | 09:3C:61:F3:8B:8B:DC:7D:55:DF:75:38:02:05:00:E1:25:F5:C8:36 | 
| geotrustprimarycertificationauthority | 18 Jun 2018 | 32:3C:11:8E:1B:F7:B8:B6:52:54:E2:E2:10:0D:D6:02:90:37:F0:96 | 
| opentrustrootcag3 | 18 Jun 2018 | 6E:26:64:F3:56:BF:34:55:BF:D1:93:3F:7C:01:DE:D8:13:DA:8A:A6 | 
| opentrustrootcag2 | 18 Jun 2018 | 79:5F:88:60:C5:AB:7C:3D:92:E6:CB:F4:8D:E1:45:CD:11:EF:60:0B | 
| opentrustrootcag1 | 18 Jun 2018 | 79:91:E8:34:F7:E2:EE:DD:08:95:01:52:E9:55:2D:14:E9:58:D5:7E | 
| verisignclass3ca | 21 Apr 2018 | A1:DB:63:93:91:6F:17:E4:18:55:09:40:04:15:C7:02:40:B0:AE:6B | 
| globalsignca | 21 Apr 2018 | B1:BC:96:8B:D4:F4:9D:62:2A:A8:9A:81:F2:15:01:52:A4:1D:82:9C | 
| ttelesecglobalrootclass2ca | 21 Apr 2018 | 59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF:17:D8:94:E9 | 
| verisignclass1g3ca | 21 Apr 2018 | 20:42:85:DC:F7:EB:76:41:95:57:8E:13:6B:D4:B7:D1:E9:8E:46:A5 | 
| verisignuniversalrootca | 21 Apr 2018 | 36:79:CA:35:66:87:72:30:4D:30:A5:FB:87:3B:0F:A7:7B:B7:0D:54 | 
| soneraclass2ca | 21 Apr 2018 | 37:F7:6D:E6:07:7C:90:C5:B1:3E:93:1A:B7:41:10:B4:F2:E4:9A:27 | 
| starfieldservicesrootcertificateauthorityg2 | 18 Jun 2018 | 92:5A:8F:8D:2C:6D:04:E0:66:5F:59:6A:FF:22:D8:63:E8:25:6F:3F | 
| mozillacert51.pem | 18 Jun 2018 | FA:B7:EE:36:97:26:62:FB:2D:B0:2A:F6:BF:03:FD:E8:7C:4B:2F:9B | 
| mozillacert43.pem | 18 Jun 2018 | F9:CD:0E:2C:DA:76:24:C1:8F:BD:F0:F0:AB:B6:45:B8:F7:FE:D5:7A | 
| mozillacert101.pem | 18 Jun 2018 | 99:A6:9B:E6:1A:FE:88:6B:4D:2B:82:00:7C:B8:54:FC:31:7E:15:39 | 
| mozillacert35.pem | 18 Jun 2018 | 2A:C8:D5:8B:57:CE:BF:2F:49:AF:F2:FC:76:8F:51:14:62:90:7A:41 | 
| globalsignr2ca | 21 Apr 2018 | 75:E0:AB:B6:13:85:12:27:1C:04:F8:5F:DD:DE:38:E4:B7:24:2E:FE | 
| mozillacert27.pem | 18 Jun 2018 | 3A:44:73:5A:E5:81:90:1F:24:86:61:46:1E:3B:9C:C4:5F:F5:3A:1B | 
| affirmtrustpremium | 18 Jun 2018 | D8:A6:33:2C:E0:03:6F:B1:85:F6:63:4F:7D:6A:06:65:26:32:28:27 | 
| mozillacert19.pem | 18 Jun 2018 | B4:35:D4:E1:11:9D:1C:66:90:A7:49:EB:B3:94:BD:63:7B:A7:82:B7 | 
| mozillacert97.pem | 18 Jun 2018 | 85:37:1C:A6:E5:50:14:3D:CE:28:03:47:1B:DE:3A:09:E8:F8:77:0F | 
| netlockaranyclassgoldfotanusitvany | 18 Jun 2018 | 06:08:3F:59:3F:15:A1:04:A0:69:A4:6B:A9:03:D0:06:B7:97:09:91 | 
| mozillacert89.pem | 18 Jun 2018 | C8:EC:8C:87:92:69:CB:4B:AB:39:E9:8D:7E:57:67:F3:14:95:73:9D | 
| verisignroot.pem | 18 Jun 2018 | 36:79:CA:35:66:87:72:30:4D:30:A5:FB:87:3B:0F:A7:7B:B7:0D:54 | 
| mozillacert147.pem | 18 Jun 2018 | 58:11:9F:0E:12:82:87:EA:50:FD:D9:87:45:6F:4F:78:DC:FA:D6:D4 | 
| aolrootca2 | 21 Apr 2018 | 85:B5:FF:67:9B:0C:79:96:1F:C8:6E:44:22:00:46:13:DB:17:92:84 | 
| cia-crt-g3-01-ca | Nov 23, 2016 | 2B:EE:2C:BA:A3:1D:B5:FE:60:40:41:95:08:ED:46:82:39:4D:ED:E2 | 
| aolrootca1 | 21 Apr 2018 | 39:21:C1:15:C1:5D:0E:CA:5C:CB:5B:C4:F0:7D:21:D8:05:0B:56:6A | 
| verisignc3g1.pem | 18 Jun 2018 | A1:DB:63:93:91:6F:17:E4:18:55:09:40:04:15:C7:02:40:B0:AE:6B | 
| mozillacert139.pem | 18 Jun 2018 | DE:3F:40:BD:50:93:D3:9B:6C:60:F6:DA:BC:07:62:01:00:89:76:C9 | 
| soneraclass2rootca | 18 Jun 2018 | 37:F7:6D:E6:07:7C:90:C5:B1:3E:93:1A:B7:41:10:B4:F2:E4:9A:27 | 
| swisssignsilverg2ca | 21 Apr 2018 | 9B:AA:E5:9F:56:EE:21:CB:43:5A:BE:25:93:DF:A7:F0:40:D1:1D:CB | 
| thawteprimaryrootca | 18 Jun 2018 | 91:C6:D6:EE:3E:8A:C8:63:84:E5:48:C2:99:29:5C:75:6C:81:7B:81 | 
| gdcatrustauthr5root | 18 Jun 2018 | 0F:36:38:5B:81:1A:25:C3:9B:31:4E:83:CA:E9:34:66:70:CC:74:B4 | 
| trustcenterclass4caii | 21 Apr 2018 | A6:9A:91:FD:05:7F:13:6A:42:63:0B:B1:76:0D:2D:51:12:0C:16:50 | 
| usertrustrsacertificationauthority | 18 Jun 2018 | 2B:8F:1B:57:33:0D:BB:A2:D0:7A:6C:51:F7:0E:E9:0D:DA:B9:AD:8E | 
| digicertassuredidrootg3 | 18 Jun 2018 | F5:17:A2:4F:9A:48:C6:C9:F8:A2:00:26:9F:DC:0F:48:2C:AB:30:89 | 
| digicertassuredidrootg2 | 18 Jun 2018 | A1:4B:48:D9:43:EE:0A:0E:40:90:4F:3C:E0:A4:C0:91:93:51:5D:3F | 
| mozillacert50.pem | 18 Jun 2018 | 8C:96:BA:EB:DD:2B:07:07:48:EE:30:32:66:A0:F3:98:6E:7C:AE:58 | 
| mozillacert42.pem | 18 Jun 2018 | 85:A4:08:C0:9C:19:3E:5D:51:58:7D:CD:D6:13:30:FD:8C:DE:37:BF | 
| mozillacert100.pem | 18 Jun 2018 | 58:E8:AB:B0:36:15:33:FB:80:F7:9B:1B:6D:29:D3:FF:8D:5F:00:F0 | 
| mozillacert34.pem | 18 Jun 2018 | 59:22:A1:E1:5A:EA:16:35:21:F8:98:39:6A:46:46:B0:44:1B:0F:A9 | 
| affirmtrustcommercialca | 21 Apr 2018 | F9:B5:B6:32:45:5F:9C:BE:EC:57:5F:80:DC:E9:6E:2C:C7:B2:78:B7 | 
| mozillacert26.pem | 18 Jun 2018 | 87:82:C6:C3:04:35:3B:CF:D2:96:92:D2:59:3E:7D:44:D9:34:FF:11 | 
| globalsigneccrootcar5 | 18 Jun 2018 | 1F:24:C6:30:CD:A4:18:EF:20:69:FF:AD:4F:DD:5F:46:3A:1B:69:AA | 
| globalsigneccrootcar4 | 18 Jun 2018 | 69:69:56:2E:40:80:F4:24:A1:E7:19:9F:14:BA:F3:EE:58:AB:6A:BB | 
| buypassclass3rootca | 18 Jun 2018 | DA:FA:F7:FA:66:84:EC:06:8F:14:50:BD:C7:C2:81:A5:BC:A9:64:57 | 
| mozillacert18.pem | 18 Jun 2018 | 79:98:A3:08:E1:4D:65:85:E6:C2:1E:15:3A:71:9F:BA:5A:D3:4A:D9 | 
| mozillacert96.pem | 18 Jun 2018 | 55:A6:72:3E:CB:F2:EC:CD:C3:23:74:70:19:9D:2A:BE:11:E3:81:D1 | 
| verisignc2g6.pem | 18 Jun 2018 | 40:B3:31:A0:E9:BF:E8:55:BC:39:93:CA:70:4F:4E:C2:51:D4:1D:8F | 
| secomvalicertclass1ca | 21 Apr 2018 | E5:DF:74:3C:B6:01:C4:9B:98:43:DC:AB:8C:E8:6A:81:10:9F:E4:8E | 
| mozillacert88.pem | 18 Jun 2018 | FE:45:65:9B:79:03:5B:98:A1:61:B5:51:2E:AC:DA:58:09:48:22:4D | 
| accvraiz1 | 18 Jun 2018 | 93:05:7A:88:15:C6:4F:CE:88:2F:FA:91:16:52:28:78:BC:53:64:17 | 
| mozillacert146.pem | 18 Jun 2018 | 21:FC:BD:8E:7F:6C:AF:05:1B:D1:B3:43:EC:A8:E7:61:47:F2:0F:8A | 
| mozillacert138.pem | 18 Jun 2018 | E1:9F:E3:0E:8B:84:60:9E:80:9B:17:0D:72:A8:C5:BA:6E:14:09:BD | 
| verisignclass3g2ca | 21 Apr 2018 | 85:37:1C:A6:E5:50:14:3D:CE:28:03:47:1B:DE:3A:09:E8:F8:77:0F | 
| dtrustrootclass3ca2ev2009 | 18 Jun 2018 | 96:C9:1B:0B:95:B4:10:98:42:FA:D0:D8:22:79:FE:60:FA:B9:16:83 | 
| xrampglobalca | 21 Apr 2018 | B8:01:86:D1:EB:9C:86:A5:41:04:CF:30:54:F3:4C:52:B7:E5:58:C6 | 
| mozillacert9.pem | 18 Jun 2018 | F4:8B:11:BF:DE:AB:BE:94:54:20:71:E6:41:DE:6B:BE:88:2B:40:B9 | 
| verisignuniversalrootcertificationauthority | 18 Jun 2018 | 36:79:CA:35:66:87:72:30:4D:30:A5:FB:87:3B:0F:A7:7B:B7:0D:54 | 
| tubitakkamusmsslkoksertifikasisurum1 | 18 Jun 2018 | 31:43:64:9B:EC:CE:27:EC:ED:3A:3F:0B:8F:0D:E4:E8:91:DD:EE:CA | 
| mozillacert41.pem | 18 Jun 2018 | 6B:2F:34:AD:89:58:BE:62:FD:B0:6B:5C:CE:BB:9D:D9:4F:4E:39:F3 | 
| mozillacert33.pem | 18 Jun 2018 | FE:B8:C4:32:DC:F9:76:9A:CE:AE:3D:D8:90:8F:FD:28:86:65:64:7D | 
| mozillacert25.pem | 18 Jun 2018 | 4E:B6:D5:78:49:9B:1C:CF:5F:58:1E:AD:56:BE:3D:9B:67:44:A5:E5 | 
| mozillacert17.pem | 18 Jun 2018 | 40:54:DA:6F:1C:3F:40:74:AC:ED:0F:EC:CD:DB:79:D1:53:FB:90:1D | 
| mozillacert95.pem | 18 Jun 2018 | DA:FA:F7:FA:66:84:EC:06:8F:14:50:BD:C7:C2:81:A5:BC:A9:64:57 | 
| affirmtrustpremiumeccca | 21 Apr 2018 | B8:23:6B:00:2F:1D:16:86:53:01:55:6C:11:A4:37:CA:EB:FF:C3:BB | 
| mozillacert87.pem | 18 Jun 2018 | 5F:3B:8C:F2:F8:10:B3:7D:78:B4:CE:EC:19:19:C3:73:34:B9:C7:74 | 
| mozillacert145.pem | 18 Jun 2018 | 10:1D:FA:3F:D5:0B:CB:BB:9B:B5:60:0C:19:55:A4:1A:F4:73:3A:04 | 
| mozillacert79.pem | 18 Jun 2018 | D8:A6:33:2C:E0:03:6F:B1:85:F6:63:4F:7D:6A:06:65:26:32:28:27 | 
| mozillacert137.pem | 18 Jun 2018 | 4A:65:D5:F4:1D:EF:39:B8:B8:90:4A:4A:D3:64:81:33:CF:C7:A1:D1 | 
| digicertassuredidrootca | 18 Jun 2018 | 05:63:B8:63:0D:62:D7:5A:BB:C8:AB:1E:4B:DF:B5:A8:99:B2:4D:43 | 
| addtrustqualifiedca | 21 Apr 2018 | 4D:23:78:EC:91:95:39:B5:00:7F:75:8F:03:3B:21:1E:C5:4D:8B:CF | 
| mozillacert129.pem | 18 Jun 2018 | E6:21:F3:35:43:79:05:9A:4B:68:30:9D:8A:2F:74:22:15:87:EC:79 | 
| verisignclass2g2ca | 21 Apr 2018 | B3:EA:C4:47:76:C9:C8:1C:EA:F2:9D:95:B6:CC:A0:08:1B:67:EC:9D | 
| baltimorecodesigningca | 21 Apr 2018 | 30:46:D8:C8:88:FF:69:30:C3:4A:FC:CD:49:27:08:7C:60:56:7B:0D | 
| luxtrustglobalroot2 | 18 Jun 2018 | 1E:0E:56:19:0A:D1:8B:25:98:B2:04:44:FF:66:8A:04:17:99:5F:3F | 
| visaecommerceroot | 18 Jun 2018 | 70:17:9B:86:8C:00:A4:FA:60:91:52:22:3F:9F:3E:32:BD:E0:05:62 | 
| oistewisekeyglobalrootgbca | 18 Jun 2018 | 0F:F9:40:76:18:D3:D7:6A:4B:98:F0:A8:35:9E:0C:FD:27:AC:CC:ED | 
| mozillacert8.pem | 18 Jun 2018 | 3E:2B:F7:F2:03:1B:96:F3:8C:E6:C4:D8:A8:5D:3E:2D:58:47:6A:0F | 
| comodocertificationauthority | 18 Jun 2018 | 66:31:BF:9E:F7:4F:9E:B6:C9:D5:A6:0C:BA:6A:BE:D1:F7:BD:EF:7B | 
| cia-crt-g3-02-ca | Nov 23, 2016 | 96:4A:BB:A7:BD:DA:FC:97:34:C0:0A:2D:F0:05:98:F7:E6:C6:6F:09 | 
| verisignc1g6.pem | 18 Jun 2018 | 51:7F:61:1E:29:91:6B:53:82:FB:72:E7:44:D9:8D:C3:CC:53:6D:64 | 
| trustcenterclass2caii | 21 Apr 2018 | AE:50:83:ED:7C:F4:5C:BC:8F:61:C6:21:FE:68:5D:79:42:21:15:6E | 
| quovadisrootca1g3 | 18 Jun 2018 | 1B:8E:EA:57:96:29:1A:C9:39:EA:B8:0A:81:1A:73:73:C0:93:79:67 | 
| mozillacert40.pem | 18 Jun 2018 | 80:25:EF:F4:6E:70:C8:D4:72:24:65:84:FE:40:3B:8A:8D:6A:DB:F5 | 
| cadisigrootr2 | 18 Jun 2018 | B5:61:EB:EA:A4:DE:E4:25:4B:69:1A:98:A5:57:47:C2:34:C7:D9:71 | 
| cadisigrootr1 | 18 Jun 2018 | 8E:1C:74:F8:A6:20:B9:E5:8A:F4:61:FA:EC:2B:47:56:51:1A:52:C6 | 
| mozillacert32.pem | 18 Jun 2018 | 60:D6:89:74:B5:C2:65:9E:8A:0F:C1:88:7C:88:D2:46:69:1B:18:2C | 
| utndatacorpsgcca | 21 Apr 2018 | 58:11:9F:0E:12:82:87:EA:50:FD:D9:87:45:6F:4F:78:DC:FA:D6:D4 | 
| mozillacert24.pem | 18 Jun 2018 | 59:AF:82:79:91:86:C7:B4:75:07:CB:CF:03:57:46:EB:04:DD:B7:16 | 
| addtrustclass1ca | 21 Apr 2018 | CC:AB:0E:A0:4C:23:01:D6:69:7B:DD:37:9F:CD:12:EB:24:E3:94:9D | 
| mozillacert16.pem | 18 Jun 2018 | DA:C9:02:4F:54:D8:F6:DF:94:93:5F:B1:73:26:38:CA:6A:D7:7C:13 | 
| affirmtrustnetworkingca | 21 Apr 2018 | 29:36:21:02:8B:20:ED:02:F5:66:C5:32:D1:D6:ED:90:9F:45:00:2F | 
| mozillacert94.pem | 18 Jun 2018 | 49:0A:75:74:DE:87:0A:47:FE:58:EE:F6:C7:6B:EB:C6:0B:12:40:99 | 
| mozillacert86.pem | 18 Jun 2018 | 74:2C:31:92:E6:07:E4:24:EB:45:49:54:2B:E1:BB:C5:3E:61:74:E2 | 
| mozillacert144.pem | 18 Jun 2018 | 37:F7:6D:E6:07:7C:90:C5:B1:3E:93:1A:B7:41:10:B4:F2:E4:9A:27 | 
| mozillacert78.pem | 18 Jun 2018 | 29:36:21:02:8B:20:ED:02:F5:66:C5:32:D1:D6:ED:90:9F:45:00:2F | 
| mozillacert136.pem | 18 Jun 2018 | D1:EB:23:A4:6D:17:D6:8F:D9:25:64:C2:F1:F1:60:17:64:D8:E3:49 | 
| mozillacert128.pem | 18 Jun 2018 | A9:E9:78:08:14:37:58:88:F2:05:19:B0:6D:2B:0D:2B:60:16:90:7D | 
| verisignclass1g2ca | 21 Apr 2018 | 27:3E:E1:24:57:FD:C4:F9:0C:55:E8:2B:56:16:7F:62:F5:32:E5:47 | 
| hellenicacademicandresearchinstitutionsrootca2015 | 18 Jun 2018 | 01:0C:06:95:A6:98:19:14:FF:BF:5F:C6:B0:B6:95:EA:29:E9:12:A6 | 
| soneraclass1ca | 21 Apr 2018 | 07:47:22:01:99:CE:74:B9:7C:B0:3D:79:B2:64:A2:C8:55:E9:33:FF | 
| hellenicacademicandresearchinstitutionsrootca2011 | 18 Jun 2018 | FE:45:65:9B:79:03:5B:98:A1:61:B5:51:2E:AC:DA:58:09:48:22:4D | 
| certumtrustednetworkca2 | 18 Jun 2018 | D3:DD:48:3E:2B:BF:4C:05:E8:AF:10:F5:FA:76:26:CF:D3:DC:30:92 | 
| equifaxsecureca | 21 Apr 2018 | D2:32:09:AD:23:D3:14:23:21:74:E4:0D:7F:9D:62:13:97:86:63:3A | 
| thawteserverca | 21 Apr 2018 | 9F:AD:91:A6:CE:6A:C6:C5:00:47:C4:4E:C9:D4:A5:0D:92:D8:49:79 | 
| mozillacert7.pem | 18 Jun 2018 | AD:7E:1C:28:B0:64:EF:8F:60:03:40:20:14:C3:D0:E3:37:0E:B5:8A | 
| affirmtrustnetworking | 18 Jun 2018 | 29:36:21:02:8B:20:ED:02:F5:66:C5:32:D1:D6:ED:90:9F:45:00:2F | 
| deprecateditsecca | 27 Jan 2012 | 12:12:0B:03:0E:15:14:54:F4:DD:B3:F5:DE:13:6E:83:5A:29:72:9D | 
| globalsignrootcar3 | 18 Jun 2018 | D6:9B:56:11:48:F0:1C:77:C5:45:78:C1:09:26:DF:5B:85:69:76:AD | 
| globalsignrootcar2 | 18 Jun 2018 | 75:E0:AB:B6:13:85:12:27:1C:04:F8:5F:DD:DE:38:E4:B7:24:2E:FE | 
| quovadisrootca | 18 Jun 2018 | DE:3F:40:BD:50:93:D3:9B:6C:60:F6:DA:BC:07:62:01:00:89:76:C9 | 
| mozillacert31.pem | 18 Jun 2018 | 9F:74:4E:9F:2B:4D:BA:EC:0F:31:2C:50:B6:56:3B:8E:2D:93:C3:11 | 
| entrustrootcertificationauthority | 18 Jun 2018 | B3:1E:B1:B7:40:E3:6C:84:02:DA:DC:37:D4:4D:F5:D4:67:49:52:F9 | 
| mozillacert23.pem | 18 Jun 2018 | 91:C6:D6:EE:3E:8A:C8:63:84:E5:48:C2:99:29:5C:75:6C:81:7B:81 | 
| mozillacert15.pem | 18 Jun 2018 | 74:20:74:41:72:9C:DD:92:EC:79:31:D8:23:10:8D:C2:81:92:E2:BB | 
| verisignc2g3.pem | 18 Jun 2018 | 61:EF:43:D7:7F:CA:D4:61:51:BC:98:E0:C3:59:12:AF:9F:EB:63:11 | 
| mozillacert93.pem | 18 Jun 2018 | 31:F1:FD:68:22:63:20:EE:C6:3B:3F:9D:EA:4A:3E:53:7C:7C:39:17 | 
| mozillacert151.pem | 18 Jun 2018 | AC:ED:5F:65:53:FD:25:CE:01:5F:1F:7A:48:3B:6A:74:9F:61:78:C6 | 
| mozillacert85.pem | 18 Jun 2018 | CF:9E:87:6D:D3:EB:FC:42:26:97:A3:B5:A3:7A:A0:76:A9:06:23:48 | 
| certplusclass2primaryca | 18 Jun 2018 | 74:20:74:41:72:9C:DD:92:EC:79:31:D8:23:10:8D:C2:81:92:E2:BB | 
| mozillacert143.pem | 18 Jun 2018 | 36:B1:2B:49:F9:81:9E:D7:4C:9E:BC:38:0F:C6:56:8F:5D:AC:B2:F7 | 
| mozillacert77.pem | 18 Jun 2018 | 13:2D:0D:45:53:4B:69:97:CD:B2:D5:C3:39:E2:55:76:60:9B:5C:C6 | 
| mozillacert135.pem | 18 Jun 2018 | 62:52:DC:40:F7:11:43:A2:2F:DE:9E:F7:34:8E:06:42:51:B1:81:18 | 
| mozillacert69.pem | 18 Jun 2018 | 2F:78:3D:25:52:18:A7:4A:65:39:71:B5:2C:A2:9C:45:15:6F:E9:19 | 
| mozillacert127.pem | 18 Jun 2018 | DE:28:F4:A4:FF:E5:B9:2F:A3:C5:03:D1:A3:49:A7:F9:96:2A:82:12 | 
| mozillacert119.pem | 18 Jun 2018 | 75:E0:AB:B6:13:85:12:27:1C:04:F8:5F:DD:DE:38:E4:B7:24:2E:FE | 
| geotrustprimarycag3 | 21 Apr 2018 | 03:9E:ED:B8:0B:E7:A0:3C:69:53:89:3B:20:D2:D9:32:3A:4C:2A:FD | 
| identrustpublicsectorrootca1 | 18 Jun 2018 | BA:29:41:60:77:98:3F:F4:F3:EF:F2:31:05:3B:2E:EA:6D:4D:45:FD | 
| geotrustprimarycag2 | 21 Apr 2018 | 8D:17:84:D5:37:F3:03:7D:EC:70:FE:57:8B:51:9A:99:E6:10:D7:B0 | 
| trustcorrootcertca2 | 18 Jun 2018 | B8:BE:6D:CB:56:F1:55:B9:63:D4:12:CA:4E:06:34:C7:94:B2:1C:C0 | 
| mozillacert6.pem | 18 Jun 2018 | 27:96:BA:E6:3F:18:01:E2:77:26:1B:A0:D7:77:70:02:8F:20:EE:E4 | 
| trustcorrootcertca1 | 18 Jun 2018 | FF:BD:CD:E7:82:C8:43:5E:3C:6F:26:86:5C:CA:A8:3A:45:5B:C3:0A | 
| networksolutionscertificateauthority | 18 Jun 2018 | 74:F8:A3:C3:EF:E7:B3:90:06:4B:83:90:3C:21:64:60:20:E5:DF:CE | 
| twcarootcertificationauthority | 18 Jun 2018 | CF:9E:87:6D:D3:EB:FC:42:26:97:A3:B5:A3:7A:A0:76:A9:06:23:48 | 
| addtrustexternalca | 21 Apr 2018 | 02:FA:F3:E2:91:43:54:68:60:78:57:69:4D:F5:E4:5B:68:85:18:68 | 
| verisignclass3g5ca | 21 Apr 2018 | 4E:B6:D5:78:49:9B:1C:CF:5F:58:1E:AD:56:BE:3D:9B:67:44:A5:E5 | 
| autoridaddecertificacionfirmaprofesionalcifa62634068 | 18 Jun 2018 | AE:C5:FB:3F:C8:E1:BF:C4:E5:4F:03:07:5A:9A:E8:00:B7:F7:B6:FA | 
| hellenicacademicandresearchinstitutionseccrootca2015 | 18 Jun 2018 | 9F:F1:71:8D:92:D5:9A:F3:7D:74:97:B4:BC:6F:84:68:0B:BA:B6:66 | 
| verisigntsaca | 21 Apr 2018 | 20:CE:B1:F0:F5:1C:0E:19:A9:F3:8D:B1:AA:8E:03:8C:AA:7A:C7:01 | 
| utnuserfirsthardwareca | 21 Apr 2018 | 04:83:ED:33:99:AC:36:08:05:87:22:ED:BC:5E:46:00:E3:BE:F9:D7 | 
| identrustcommercialrootca1 | 18 Jun 2018 | DF:71:7E:AA:4A:D9:4E:C9:55:84:99:60:2D:48:DE:5F:BC:F0:3A:25 | 
| dtrustrootclass3ca22009 | 18 Jun 2018 | 58:E8:AB:B0:36:15:33:FB:80:F7:9B:1B:6D:29:D3:FF:8D:5F:00:F0 | 
| epkirootcertificationauthority | 18 Jun 2018 | 67:65:0D:F1:7E:8E:7E:5B:82:40:A4:F4:56:4B:CF:E2:3D:69:C6:F0 | 
| mozillacert30.pem | 18 Jun 2018 | E7:B4:F6:9D:61:EC:90:69:DB:7E:90:A7:40:1A:3C:F4:7D:4F:E8:EE | 
| teliasonerarootcav1 | 18 Jun 2018 | 43:13:BB:96:F1:D5:86:9B:C1:4E:6A:92:F6:CF:F6:34:69:87:82:37 | 
| buypassclass3ca | 21 Apr 2018 | DA:FA:F7:FA:66:84:EC:06:8F:14:50:BD:C7:C2:81:A5:BC:A9:64:57 | 
| mozillacert22.pem | 18 Jun 2018 | 32:3C:11:8E:1B:F7:B8:B6:52:54:E2:E2:10:0D:D6:02:90:37:F0:96 | 
| mozillacert14.pem | 18 Jun 2018 | 5F:B7:EE:06:33:E2:59:DB:AD:0C:4C:9A:E6:D3:8F:1A:61:C7:DC:25 | 
| verisignc2g2.pem | 18 Jun 2018 | B3:EA:C4:47:76:C9:C8:1C:EA:F2:9D:95:B6:CC:A0:08:1B:67:EC:9D | 
| certumca | 21 Apr 2018 | 62:52:DC:40:F7:11:43:A2:2F:DE:9E:F7:34:8E:06:42:51:B1:81:18 | 
| mozillacert92.pem | 18 Jun 2018 | A3:F1:33:3F:E2:42:BF:CF:C5:D1:4E:8F:39:42:98:40:68:10:D1:A0 | 
| mozillacert150.pem | 18 Jun 2018 | 33:9B:6B:14:50:24:9B:55:7A:01:87:72:84:D9:E0:2F:C3:D2:D8:E9 | 
| mozillacert84.pem | 18 Jun 2018 | D3:C0:63:F2:19:ED:07:3E:34:AD:5D:75:0B:32:76:29:FF:D5:9A:F2 | 
| ttelesecglobalrootclass3 | 18 Jun 2018 | 55:A6:72:3E:CB:F2:EC:CD:C3:23:74:70:19:9D:2A:BE:11:E3:81:D1 | 
| globalsignrootca | 18 Jun 2018 | B1:BC:96:8B:D4:F4:9D:62:2A:A8:9A:81:F2:15:01:52:A4:1D:82:9C | 
| ttelesecglobalrootclass2 | 18 Jun 2018 | 59:0D:2D:7D:88:4F:40:2E:61:7E:A5:62:32:17:65:CF:17:D8:94:E9 | 
| mozillacert142.pem | 18 Jun 2018 | 1F:49:14:F7:D8:74:95:1D:DD:AE:02:C0:BE:FD:3A:2D:82:75:51:85 | 
| mozillacert76.pem | 18 Jun 2018 | F9:B5:B6:32:45:5F:9C:BE:EC:57:5F:80:DC:E9:6E:2C:C7:B2:78:B7 | 
| mozillacert134.pem | 18 Jun 2018 | 70:17:9B:86:8C:00:A4:FA:60:91:52:22:3F:9F:3E:32:BD:E0:05:62 | 
| mozillacert68.pem | 18 Jun 2018 | AE:C5:FB:3F:C8:E1:BF:C4:E5:4F:03:07:5A:9A:E8:00:B7:F7:B6:FA | 
| etugracertificationauthority | 18 Jun 2018 | 51:C6:E7:08:49:06:6E:F3:92:D4:5C:A0:0D:6D:A3:62:8F:C3:52:39 | 
| mozillacert126.pem | 18 Jun 2018 | 25:01:90:19:CF:FB:D9:99:1C:B7:68:25:74:8D:94:5F:30:93:95:42 | 
| keynectisrootca | 21 Apr 2018 | 9C:61:5C:4D:4D:85:10:3A:53:26:C2:4D:BA:EA:E4:A2:D2:D5:CC:97 | 
| mozillacert118.pem | 18 Jun 2018 | 7E:78:4A:10:1C:82:65:CC:2D:E1:F1:6D:47:B4:40:CA:D9:0A:19:45 | 
| quovadisrootca3 | 18 Jun 2018 | 1F:49:14:F7:D8:74:95:1D:DD:AE:02:C0:BE:FD:3A:2D:82:75:51:85 | 
| quovadisrootca2 | 18 Jun 2018 | CA:3A:FB:CF:12:40:36:4B:44:B2:16:20:88:80:48:39:19:93:7C:F7 | 
| mozillacert5.pem | 18 Jun 2018 | B8:01:86:D1:EB:9C:86:A5:41:04:CF:30:54:F3:4C:52:B7:E5:58:C6 | 
| verisignc1g3.pem | 18 Jun 2018 | 20:42:85:DC:F7:EB:76:41:95:57:8E:13:6B:D4:B7:D1:E9:8E:46:A5 | 
| cybertrustglobalroot | 18 Jun 2018 | 5F:43:E5:B1:BF:F8:78:8C:AC:1C:C7:CA:4A:9A:C6:22:2B:CC:34:C6 | 
| amzninternalinfoseccag3 | Februari 27, 2015 | B9:B1:CA:38:F7:BF:9C:D2:D4:95:E7:B6:5E:75:32:9B:A8:78:2E:F6 | 
| starfieldrootcertificateauthorityg2 | 18 Jun 2018 | B5:1C:06:7C:EE:2B:0C:3D:F8:55:AB:2D:92:F4:FE:39:D4:E7:0F:0E | 
| entrust2048ca | 21 Apr 2018 | 50:30:06:09:1D:97:D4:F5:AE:39:F7:CB:E7:92:7D:7D:65:2D:34:31 | 
| swisssignsilvercag2 | 18 Jun 2018 | 9B:AA:E5:9F:56:EE:21:CB:43:5A:BE:25:93:DF:A7:F0:40:D1:1D:CB | 
| affirmtrustcommercial | 18 Jun 2018 | F9:B5:B6:32:45:5F:9C:BE:EC:57:5F:80:DC:E9:6E:2C:C7:B2:78:B7 | 
| certinomisrootca | 18 Jun 2018 | 9D:70:BB:01:A5:A4:A0:18:11:2E:F7:1C:01:B9:32:C5:34:E7:88:A8 | 
| xrampglobalcaroot | 18 Jun 2018 | B8:01:86:D1:EB:9C:86:A5:41:04:CF:30:54:F3:4C:52:B7:E5:58:C6 | 
| secureglobalca | 18 Jun 2018 | 3A:44:73:5A:E5:81:90:1F:24:86:61:46:1E:3B:9C:C4:5F:F5:3A:1B | 
| swisssigngoldg2ca | 21 Apr 2018 | D8:C5:38:8A:B7:30:1B:1B:6E:D4:7A:E6:45:25:3A:6F:9F:1A:27:61 | 
| mozillacert21.pem | 18 Jun 2018 | 9B:AA:E5:9F:56:EE:21:CB:43:5A:BE:25:93:DF:A7:F0:40:D1:1D:CB | 
| mozillacert13.pem | 18 Jun 2018 | 06:08:3F:59:3F:15:A1:04:A0:69:A4:6B:A9:03:D0:06:B7:97:09:91 | 
| verisignc2g1.pem | 18 Jun 2018 | 67:82:AA:E0:ED:EE:E2:1A:58:39:D3:C0:CD:14:68:0A:4F:60:14:2A | 
| mozillacert91.pem | 18 Jun 2018 | 3B:C0:38:0B:33:C3:F6:A6:0C:86:15:22:93:D9:DF:F5:4B:81:C0:04 | 
| oistewisekeyglobalrootgaca | 18 Jun 2018 | 59:22:A1:E1:5A:EA:16:35:21:F8:98:39:6A:46:46:B0:44:1B:0F:A9 | 
| mozillacert83.pem | 18 Jun 2018 | A0:73:E5:C5:BD:43:61:0D:86:4C:21:13:0A:85:58:57:CC:9C:EA:46 | 
| entrustevca | 21 Apr 2018 | B3:1E:B1:B7:40:E3:6C:84:02:DA:DC:37:D4:4D:F5:D4:67:49:52:F9 | 
| mozillacert141.pem | 18 Jun 2018 | 31:7A:2A:D0:7F:2B:33:5E:F5:A1:C3:4E:4B:57:E8:B7:D8:F1:FC:A6 | 
| mozillacert75.pem | 18 Jun 2018 | D2:32:09:AD:23:D3:14:23:21:74:E4:0D:7F:9D:62:13:97:86:63:3A | 
| mozillacert133.pem | 18 Jun 2018 | 85:B5:FF:67:9B:0C:79:96:1F:C8:6E:44:22:00:46:13:DB:17:92:84 | 
| mozillacert67.pem | 18 Jun 2018 | D6:9B:56:11:48:F0:1C:77:C5:45:78:C1:09:26:DF:5B:85:69:76:AD | 
| mozillacert125.pem | 18 Jun 2018 | B3:1E:B1:B7:40:E3:6C:84:02:DA:DC:37:D4:4D:F5:D4:67:49:52:F9 | 
| mozillacert59.pem | 18 Jun 2018 | 36:79:CA:35:66:87:72:30:4D:30:A5:FB:87:3B:0F:A7:7B:B7:0D:54 | 
| thawtepremiumserverca | 21 Apr 2018 | E0:AB:05:94:20:72:54:93:05:60:62:02:36:70:F7:CD:2E:FC:66:66 | 
| mozillacert117.pem | 18 Jun 2018 | D4:DE:20:D0:5E:66:FC:53:FE:1A:50:88:2C:78:DB:28:52:CA:E4:74 | 
| utnuserfirstclientauthemailca | 21 Apr 2018 | B1:72:B1:A5:6D:95:F9:1F:E5:02:87:E1:4D:37:EA:6A:44:63:76:8A | 
| entrustrootcag2 | 21 Apr 2018 | 8C:F4:27:FD:79:0C:3A:D1:66:06:8D:E8:1E:57:EF:BB:93:22:72:D4 | 
| mozillacert109.pem | 18 Jun 2018 | B5:61:EB:EA:A4:DE:E4:25:4B:69:1A:98:A5:57:47:C2:34:C7:D9:71 | 
| digicerttrustedrootg4 | 18 Jun 2018 | DD:FB:16:CD:49:31:C9:73:A2:03:7D:3F:C8:3A:4D:7D:77:5D:05:E4 | 
| gdroot-g2.pem | 18 Jun 2018 | 47:BE:AB:C9:22:EA:E8:0E:78:78:34:62:A7:9F:45:C2:54:FD:E6:8B | 
| comodoaaaservicesroot | 18 Jun 2018 | D1:EB:23:A4:6D:17:D6:8F:D9:25:64:C2:F1:F1:60:17:64:D8:E3:49 | 
| mozillacert4.pem | 18 Jun 2018 | E3:92:51:2F:0A:CF:F5:05:DF:F6:DE:06:7F:75:37:E1:65:EA:57:4B | 
| verisignclass3publicprimarycertificationauthorityg5 | 18 Jun 2018 | 4E:B6:D5:78:49:9B:1C:CF:5F:58:1E:AD:56:BE:3D:9B:67:44:A5:E5 | 
| chambersofcommerceroot2008 | 18 Jun 2018 | 78:6A:74:AC:76:AB:14:7F:9C:6A:30:50:BA:9E:A8:7E:FE:9A:CE:3C | 
| verisignclass3publicprimarycertificationauthorityg4 | 18 Jun 2018 | 22:D5:D8:DF:8F:02:31:D1:8D:F7:9D:B7:CF:8A:2D:64:C9:3F:6C:3A | 
| verisignclass3publicprimarycertificationauthorityg3 | 18 Jun 2018 | 13:2D:0D:45:53:4B:69:97:CD:B2:D5:C3:39:E2:55:76:60:9B:5C:C6 | 
| thawtepersonalfreemailca | 21 Apr 2018 | E6:18:83:AE:84:CA:C1:C1:CD:52:AD:E8:E9:25:2B:45:A6:4F:B7:E2 | 
| verisignc1g2.pem | 18 Jun 2018 | 27:3E:E1:24:57:FD:C4:F9:0C:55:E8:2B:56:16:7F:62:F5:32:E5:47 | 
| gtecybertrustglobalca | 21 Apr 2018 | 97:81:79:50:D8:1C:96:70:CC:34:D8:09:CF:79:44:31:36:7E:F4:74 | 
| trustcenteruniversalcai | 21 Apr 2018 | 6B:2F:34:AD:89:58:BE:62:FD:B0:6B:5C:CE:BB:9D:D9:4F:4E:39:F3 | 
| camerfirmachamberscommerceca | 21 Apr 2018 | 6E:3A:55:A4:19:0C:19:5C:93:84:3C:C0:DB:72:2E:31:30:61:F0:B1 | 
| verisignclass1ca | 21 Apr 2018 | CE:6A:64:A3:09:E4:2F:BB:D9:85:1C:45:3E:64:09:EA:E8:7D:60:F1 | 

# AWS AppSync changelog template pemetaan resolver
<a name="resolver-mapping-template-changelog"></a>

**catatan**  
Kami sekarang terutama mendukung runtime APPSYNC\$1JS dan dokumentasinya. [Harap pertimbangkan untuk menggunakan runtime APPSYNC\$1JS dan panduannya di sini.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

Templat pemecah dan pemetaan fungsi diberi versi. Versi template pemetaan, seperti`2018-05-29`) menentukan hal berikut:
+ Bentuk yang diharapkan dari konfigurasi permintaan sumber data yang disediakan oleh template permintaan
+ Perilaku eksekusi template pemetaan permintaan dan template pemetaan respons

Versi diwakili menggunakan YYYY-MM-DD format, tanggal kemudian sesuai dengan versi yang lebih baru. Halaman ini mencantumkan perbedaan antara versi templat pemetaan yang saat ini didukung. AWS AppSync

**Topics**
+ [

## Ketersediaan Operasi Sumber Data Per Versi Matriks
](#aws-appsync-resolver-mapping-template-operation-availability-per-version)
+ [

## Mengubah Versi pada Templat Pemetaan Unit Resolver
](#changing-the-version-on-a-unit-resolver-mapping-template)
+ [

## Mengubah Versi pada Fungsi
](#changing-the-version-on-a-function)
+ [

## 2018-05-29
](#aws-appsync-resolver-mapping-template-version-2018-05-29)
+ [

## 2017-02-28
](#aws-appsync-resolver-mapping-template-version-2017-02-28)

## Ketersediaan Operasi Sumber Data Per Versi Matriks
<a name="aws-appsync-resolver-mapping-template-operation-availability-per-version"></a>


| Operasi/Versi yang Didukung | 2017-02-28 | 2018-05-29 | 
| --- | --- | --- | 
|  AWS Lambda Memohon  |  Ya  |  Ya  | 
|  AWS Lambda BatchInvoke  |  Ya  |  Ya  | 
|  Tidak ada Datasource  |  Ya  |  Ya  | 
|  Amazon OpenSearch DAPATKAN  |  Ya  |  Ya  | 
|  Amazon OpenSearch POST  |  Ya  |  Ya  | 
|  Amazon OpenSearch PUT  |  Ya  |  Ya  | 
|  Amazon OpenSearch HAPUS  |  Ya  |  Ya  | 
|  Amazon OpenSearch DAPATKAN  |  Ya  |  Ya  | 
|  DynamoDB GetItem  |  Ya  |  Ya  | 
|  Pemindaian DynamoDB  |  Ya  |  Ya  | 
|  Query DynamoDB  |  Ya  |  Ya  | 
|  DynamoDB DeleteItem  |  Ya  |  Ya  | 
|  DynamoDB PutItem  |  Ya  |  Ya  | 
|  DynamoDB BatchGetItem  |  Tidak  |  Ya  | 
|  DynamoDB BatchPutItem  |  Tidak  |  Ya  | 
|  DynamoDB BatchDeleteItem  |  Tidak  |  Ya  | 
|  HTTP  |  Tidak  |  Ya  | 
|  Amazon RDS  |  Tidak  |  Ya  | 

 **Catatan**: Hanya versi **2018-05-29** yang saat ini didukung dalam fungsi.

## Mengubah Versi pada Templat Pemetaan Unit Resolver
<a name="changing-the-version-on-a-unit-resolver-mapping-template"></a>

Untuk Resolver Unit, versi ditentukan sebagai bagian dari isi template pemetaan permintaan. Untuk memperbarui versi, cukup perbarui `version` bidang ke versi baru.

Misalnya, untuk memperbarui versi pada AWS Lambda template:

```
{
    "version": "2017-02-28",
    "operation": "Invoke",
    "payload": {
        "field": "getPost",
        "arguments": $utils.toJson($context.arguments)
    }
}
```

Anda perlu memperbarui bidang versi dari `2017-02-28` menjadi `2018-05-29` sebagai berikut:

```
{
    "version": "2018-05-29", ## Note the version
    "operation": "Invoke",
    "payload": {
        "field": "getPost",
        "arguments": $utils.toJson($context.arguments)
    }
}
```

## Mengubah Versi pada Fungsi
<a name="changing-the-version-on-a-function"></a>

Untuk fungsi, versi ditentukan sebagai `functionVersion` bidang pada objek fungsi. Untuk memperbarui versi, cukup perbarui`functionVersion`. *Catatan:* Saat ini, `2018-05-29` hanya didukung untuk fungsi.

Berikut ini adalah contoh perintah CLI untuk memperbarui versi fungsi yang ada:

```
aws appsync update-function \
--api-id REPLACE_WITH_API_ID \
--function-id REPLACE_WITH_FUNCTION_ID \
--data-source-name "PostTable" \
--function-version "2018-05-29" \
--request-mapping-template "{...}" \
--response-mapping-template "\$util.toJson(\$ctx.result)"
```

 **Catatan:** Disarankan untuk menghilangkan bidang versi dari template pemetaan permintaan fungsi karena tidak akan dihormati. Jika Anda menentukan versi di dalam template pemetaan permintaan fungsi, nilai versi akan diganti dengan nilai bidang. `functionVersion`

## 2018-05-29
<a name="aws-appsync-resolver-mapping-template-version-2018-05-29"></a>

### Perubahan Perilaku
<a name="behavior-change"></a>
+ Jika hasil pemanggilan sumber data`null`, template pemetaan respons dijalankan.
+ Jika pemanggilan sumber data menghasilkan kesalahan, sekarang terserah Anda untuk menangani kesalahan, hasil evaluasi template pemetaan respons **akan** selalu ditempatkan di dalam blok respons GraphQL. `data`

### Penalaran
<a name="reasoning"></a>
+ Hasil `null` pemanggilan memiliki arti, dan dalam beberapa kasus penggunaan aplikasi kami mungkin ingin menangani `null` hasil dengan cara khusus. Misalnya, aplikasi mungkin memeriksa apakah catatan ada di tabel Amazon DynamoDB untuk melakukan beberapa pemeriksaan otorisasi. Dalam hal ini, hasil `null` pemanggilan berarti pengguna mungkin tidak diotorisasi. Menjalankan template pemetaan respons sekarang menyediakan kemampuan untuk memunculkan kesalahan yang tidak sah. Perilaku ini memberikan kontrol yang lebih besar kepada perancang API.

Diberikan template pemetaan respons berikut:

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

Sebelumnya dengan`2017-02-28`, jika `$ctx.result` kembali null, template pemetaan respons tidak dijalankan. Dengan`2018-05-29`, kita sekarang dapat menangani skenario ini. Misalnya, kita dapat memilih untuk memunculkan kesalahan otorisasi sebagai berikut:

```
# throw an unauthorized error if the result is null
#if ( $util.isNull($ctx.result) )
    $util.unauthorized()
#end
$util.toJson($ctx.result)
```

 **Catatan:** Kesalahan yang kembali dari sumber data terkadang tidak fatal atau bahkan diharapkan, itulah sebabnya template pemetaan respons harus diberi fleksibilitas untuk menangani kesalahan pemanggilan dan memutuskan apakah akan mengabaikannya, menaikkannya kembali, atau membuang kesalahan yang berbeda.

Diberikan template pemetaan respons berikut:

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

Sebelumnya, dengan`2017-02-28`, jika terjadi kesalahan pemanggilan, template pemetaan respons dievaluasi dan hasilnya ditempatkan secara otomatis di blok respons `errors` GraphQL. Dengan`2018-05-29`, kita sekarang dapat memilih apa yang harus dilakukan dengan kesalahan, menaikkannya kembali, memunculkan kesalahan yang berbeda, atau menambahkan kesalahan saat mengembalikan data.

### Naikkan kembali Kesalahan Pemanggilan
<a name="re-raise-an-invocation-error"></a>

Dalam template respons berikut, kami memunculkan kesalahan yang sama yang kembali dari sumber data.

```
#if ( $ctx.error )
    $util.error($ctx.error.message, $ctx.error.type)
#end
$util.toJson($ctx.result)
```

Jika terjadi kesalahan pemanggilan (misalnya, `$ctx.error` ada) responsnya terlihat seperti berikut:

```
{
    "data": {
        "getPost": null
    },
    "errors": [
        {
            "path": [
                "getPost"
            ],
            "errorType": "DynamoDB:ConditionalCheckFailedException",
            "message": "Conditional check failed exception...",
            "locations": [
                {
                    "line": 5,
                    "column": 5
                }
            ]
        }
    ]
}
```

### Naikkan Kesalahan yang Berbeda
<a name="raise-a-different-error"></a>

Dalam template respons berikut, kami memunculkan kesalahan kustom kami sendiri setelah memproses kesalahan yang kembali dari sumber data.

```
#if ( $ctx.error )
    #if ( $ctx.error.type.equals("ConditionalCheckFailedException") )
        ## we choose here to change the type and message of the error for ConditionalCheckFailedExceptions
        $util.error("Error while updating the post, try again. Error: $ctx.error.message", "UpdateError")
    #else
        $util.error($ctx.error.message, $ctx.error.type)
    #end
#end
$util.toJson($ctx.result)
```

Jika terjadi kesalahan pemanggilan (misalnya, `$ctx.error` ada) responsnya terlihat seperti berikut:

```
{
    "data": {
        "getPost": null
    },
    "errors": [
        {
            "path": [
                "getPost"
            ],
            "errorType": "UpdateError",
            "message": "Error while updating the post, try again. Error: Conditional check failed exception...",
            "locations": [
                {
                    "line": 5,
                    "column": 5
                }
            ]
        }
    ]
}
```

### Tambahkan Kesalahan untuk Mengembalikan Data
<a name="append-an-error-to-return-data"></a>

Dalam template respons berikut, kami menambahkan kesalahan yang sama yang kembali dari sumber data saat mengembalikan data kembali ke dalam respons. Ini juga dikenal sebagai respons parsial.

```
#if ( $ctx.error )
    $util.appendError($ctx.error.message, $ctx.error.type)
    #set($defaultPost = {id: "1", title: 'default post'})
    $util.toJson($defaultPost)
#else
    $util.toJson($ctx.result)
#end
```

Jika terjadi kesalahan pemanggilan (misalnya, `$ctx.error` ada) responsnya terlihat seperti berikut:

```
{
    "data": {
        "getPost": {
            "id": "1",
            "title: "A post"
        }
    },
    "errors": [
        {
            "path": [
                "getPost"
            ],
            "errorType": "ConditionalCheckFailedException",
            "message": "Conditional check failed exception...",
            "locations": [
                {
                    "line": 5,
                    "column": 5
                }
            ]
        }
    ]
}
```

#### *Bermigrasi dari *2017-02-28 ke 2018-05-29**
<a name="migrating-from-2017-02-28-to-2018-05-29"></a>

**Migrasi dari **2017-02-28 ke 2018-05-29** sangat mudah.** Ubah bidang versi pada template pemetaan permintaan resolver atau pada objek versi fungsi. [Namun, perhatikan bahwa eksekusi **2018-05-29** berperilaku berbeda dari **2017-02-28**, perubahan diuraikan di sini.](#aws-appsync-resolver-mapping-template-version-2018-05-29)

#### *Mempertahankan perilaku eksekusi yang sama dari *2017-02-28 hingga 2018-05-29**
<a name="preserving-the-same-execution-behavior-from-2017-02-28-to-2018-05-29"></a>

**Dalam beberapa kasus, dimungkinkan untuk mempertahankan perilaku eksekusi yang sama dengan versi **2017-02-28 saat menjalankan template berversi 2018-05-29**.**

### Contoh: DynamoDB PutItem
<a name="example-dynamodb-putitem"></a>

Diberikan sebagai berikut **2017-02-28** PutItem DynamoDB permintaan template:

```
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "foo" : ... typed value,
        "bar" : ... typed value
    },
    "attributeValues" : {
        "baz" : ... typed value
    },
    "condition" : {
       ...
    }
}
```

Dan template respons berikut:

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

Migrasi ke **2018-05-29** mengubah template ini sebagai berikut:

```
{
    "version" : "2018-05-29", ## Note the new 2018-05-29 version
    "operation" : "PutItem",
    "key": {
        "foo" : ... typed value,
        "bar" : ... typed value
    },
    "attributeValues" : {
        "baz" : ... typed value
    },
    "condition" : {
       ...
    }
}
```

Dan mengubah template respons sebagai berikut:

```
## If there is a datasource invocation error, we choose to raise the same error
## the field data will be set to null.
#if($ctx.error)
  $util.error($ctx.error.message, $ctx.error.type, $ctx.result)
#end

## If the data source invocation is null, we return null.
#if($util.isNull($ctx.result))
  #return
#end

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

Sekarang tanggung jawab Anda untuk menangani kesalahan, kami memilih untuk memunculkan kesalahan yang sama menggunakan `$util.error()` yang dikembalikan dari DynamoDB. Anda dapat menyesuaikan cuplikan ini untuk mengonversi templat pemetaan Anda ke **2018-05-29**, perhatikan bahwa jika templat respons Anda berbeda, Anda harus memperhitungkan perubahan perilaku eksekusi.

### Contoh: DynamoDB GetItem
<a name="example-dynamodb-getitem"></a>

Diberikan sebagai berikut **2017-02-28** GetItem DynamoDB permintaan template:

```
{
    "version" : "2017-02-28",
    "operation" : "GetItem",
    "key" : {
        "foo" : ... typed value,
        "bar" : ... typed value
    },
    "consistentRead" : true
}
```

Dan template respons berikut:

```
## map table attribute postId to field Post.id
$util.qr($ctx.result.put("id", $ctx.result.get("postId")))

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

Migrasi ke **2018-05-29** mengubah template ini sebagai berikut:

```
{
    "version" : "2018-05-29", ## Note the new 2018-05-29 version
    "operation" : "GetItem",
    "key" : {
        "foo" : ... typed value,
        "bar" : ... typed value
    },
    "consistentRead" : true
}
```

Dan mengubah template respons sebagai berikut:

```
## If there is a datasource invocation error, we choose to raise the same error
#if($ctx.error)
  $util.error($ctx.error.message, $ctx.error.type)
#end

## If the data source invocation is null, we return null.
#if($util.isNull($ctx.result))
  #return
#end

## map table attribute postId to field Post.id
$util.qr($ctx.result.put("id", $ctx.result.get("postId")))

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

Dalam versi **2017-02-28**, jika pemanggilan sumber data adalah, `null` artinya tidak ada item dalam tabel DynamoDB yang cocok dengan kunci kami, template pemetaan respons tidak akan dijalankan. Mungkin baik-baik saja untuk sebagian besar kasus, tetapi jika Anda `$ctx.result` berharap tidak`null`, Anda sekarang harus menangani skenario itu.

## 2017-02-28
<a name="aws-appsync-resolver-mapping-template-version-2017-02-28"></a>

### Karakteristik
<a name="characteristics"></a>
+ **Jika hasil pemanggilan sumber data adalah`null`, template pemetaan respons tidak dijalankan.**
+ Jika pemanggilan sumber data menghasilkan kesalahan, template pemetaan respons dijalankan dan hasil yang dievaluasi ditempatkan di dalam blok respons GraphQL. `errors.data`