

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

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