

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

# 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"
        }
      })
  ```