

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Extensões
<a name="extensions"></a>

**nota**  
Agora, oferecemos suporte principalmente ao runtime do APPSYNC\$1JS e sua documentação. Considere usar o runtime do APPSYNC\$1JS e seus guias [aqui](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html).

`$extensions` contém um conjunto de métodos para realizar ações adicionais em seus resolvedores.

## Extensões do cache
<a name="caching-extensions-list"></a>

**`$extensions.evictFromApiCache(String, String, Object) : Object`**  
Elimina um item do cache do lado do AWS AppSync servidor. O primeiro argumento é o nome do tipo. O segundo argumento é o nome do campo. O terceiro argumento é um objeto contendo itens do par de chave/valor que especificam o valor da chave de armazenamento em cache. Você deve colocar os itens no objeto na mesma ordem das chaves de cache em `cachingKey` do resolvedor em cache.  
Esse utilitário funciona somente para mutações, não para consultas.

## Extensões de assinatura
<a name="subscription-extensions-list"></a>

**`$extensions.setSubscriptionFilter(filterJsonObject)`**  
Define filtros de assinatura aprimorados. Cada evento de notificação de assinatura é avaliado em relação aos filtros de assinatura fornecidos e envia notificações aos clientes se todos os filtros forem avaliados como `true`. O argumento é `filterJsonObject` conforme descrito na seção a seguir.  
Você pode usar esse método de extensão somente nos modelos de mapeamento de resposta de um resolvedor de assinatura.

**`$extensions.setSubscriptionInvalidationFilter(filterJsonObject)`**  
Define os filtros de invalidação da assinatura. Os filtros de assinatura são avaliados em relação à carga de invalidação e, em seguida, invalidam determinada assinatura se os filtros forem avaliados como `true`. O argumento é `filterJsonObject` conforme descrito na seção a seguir.  
Você pode usar esse método de extensão somente nos modelos de mapeamento de resposta de um resolvedor de assinatura.

**`$extensions.invalidateSubscriptions(invalidationJsonObject)`**  
Usado para iniciar uma invalidação de assinatura a partir de uma mutação. O argumento é `invalidationJsonObject` conforme descrito na seção a seguir.  
Essa extensão pode ser usada somente nos modelos de mapeamento de resposta dos resolvedores de mutação.  
Você só pode usar no máximo cinco chamadas de método `$extensions.invalidateSubscriptions()` exclusivas em uma única solicitação. Se você exceder esse limite, receberá um erro do GraphQL.

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

O objeto JSON define filtros de assinatura ou de invalidação. É uma série de filtros em um `filterGroup`. Cada filtro é uma coleção de filtros individuais.

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

Cada filtro tem três atributos: 
+ `fieldName` – O campo do esquema GraphQL.
+ `operator` – O tipo de operador.
+ `value` – Os valores a serem comparados com o valor `fieldName` da notificação de assinatura.

Veja a seguir um exemplo de atribuição desses atributos:

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

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

O tipo de string `fieldName` refere-se a um campo definido no esquema GraphQL que corresponde a `fieldName` na carga de notificação de assinatura. Quando uma correspondência é encontrada, o `value` do campo do esquema GraphQL é comparado a `value` do filtro de notificação de assinatura. No exemplo a seguir, o filtro `fieldName` corresponde ao campo `service` definido em determinado tipo de GraphQL. Se a carga de notificação contiver um campo `service` com um `value` equivalente a `AWS AppSync`, o filtro será avaliado como `true`:

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

### Campo: valor
<a name="extensions-value"></a>

O valor pode ser de um tipo diferente com base no operador:
+ Um único número ou booleano
  + Exemplo de string: `"test"`, `"service"`
  + Exemplo de número: `1`, `2`, `45.75`
  + Exemplo de booliano: `true`, `false`
+ Pares de números ou strings
  + Exemplo de par de strings: `["test1","test2"]`, `["start","end"]`
  + Exemplo de par de números: `[1,4]`, `[67,89]`, `[12.45, 95.45]`
+ Matrizes de números ou strings
  + Exemplo de matriz de strings: `["test1","test2","test3","test4","test5"]`
  + Exemplo de matriz numérica: `[1,2,3,4,5]`, `[12.11,46.13,45.09,12.54,13.89]`

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

Uma string que diferencia maiúsculas de minúsculas com os seguintes valores possíveis: 


| 
| 
| Operador | Description | Tipos de valores possíveis | 
| --- |--- |--- |
| eq | Equal | inteiro, flutuante, string, booleano | 
| ne | Not equal | inteiro, flutuante, string, booleano | 
| le | Menor ou igual a | inteiro, flutuante, string | 
| lt | Menor que | inteiro, flutuante, string | 
| idade | Maior ou igual a | inteiro, flutuante, string | 
| gt | Maior que | inteiro, flutuante, string | 
| contém | Verifica uma subsequência ou valor no conjunto. | inteiro, flutuante, string | 
| NÃO contém | Verifica a ausência de uma subsequência ou ausência de um valor no conjunto. | inteiro, flutuante, string | 
| Começa com | Verifica se há um prefixo. | string | 
| in | Verifica os elementos correspondentes que estão na lista. | Matriz de números inteiros, flutuantes ou strings | 
| notIn | Verifica se há elementos correspondentes que não estão na lista. | Matriz de números inteiros, flutuantes ou strings | 
| entre | Entre dois valores | inteiro, flutuante, string | 
| Contém qualquer | Contém elementos comuns | inteiro, flutuante, string | 

A tabela a seguir descreve como cada operador é usado na notificação de assinatura.

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

O operador `eq` avalia como `true` se o valor do campo de notificação de assinatura corresponde e é estritamente igual ao valor do filtro. No exemplo a seguir, o filtro avalia como `true` se a notificação de assinatura tem um campo `service` com o valor equivalente a `AWS AppSync`.

**Tipos de valores possíveis:** inteiro, flutuante, string, booleano

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

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

O operador `ne` avalia como `true` se o valor do campo de notificação de assinatura for diferente do valor do filtro. No exemplo a seguir, o filtro avalia como `true` se a notificação de assinatura tem um campo `service` com valor diferente de `AWS AppSync`.

**Tipos de valores possíveis:** inteiro, flutuante, string, booleano

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

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

O operador `le` avalia como `true` se o valor do campo de notificação de assinatura é menor ou igual ao valor do filtro. No exemplo a seguir, o filtro avalia como `true` se a notificação de assinatura tem um campo `size` com valor menor ou igual a `5`.

**Tipos de valores possíveis:** inteiro, flutuante, string

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

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

O operador `lt` avalia como `true` se o valor do campo de notificação de assinatura for menor que o valor do filtro. No exemplo a seguir, o filtro avalia como `true` se a notificação de assinatura tem um campo `size` com valor inferior a `5`.

**Tipos de valores possíveis:** inteiro, flutuante, string

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

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

O operador `ge` avalia como `true` se o valor do campo de notificação de assinatura é maior ou igual ao valor do filtro. No exemplo a seguir, o filtro avalia como `true` se a notificação de assinatura tem um campo `size` com valor maior ou igual a `5`.

**Tipos de valores possíveis:** inteiro, flutuante, string

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

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

O operador `gt` avalia como `true` se o valor do campo de notificação de assinatura é maior que o valor do filtro. No exemplo a seguir, o filtro avalia como `true` se a notificação de assinatura tem um campo `size` com valor maior que `5`.

**Tipos de valores possíveis:** inteiro, flutuante, string

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

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

O operador `contains` verifica uma substring, subsequência ou valor em um conjunto ou item único. Um filtro com o operador `contains` avalia como `true` se o valor do campo de notificação de assinatura contém o valor do filtro. No exemplo a seguir, o filtro avalia como `true` se a notificação de assinatura possui um campo `seats` com o valor da matriz contendo o valor `10`.

**Tipos de valores possíveis:** inteiro, flutuante, string

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

Em outro exemplo, o filtro avalia como `true` se a notificação de assinatura possui um campo `event` com `launch` como substring.

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

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

O operador `notContains` verifica a ausência de uma substring, subsequência ou valor em um conjunto ou item único. O filtro com o operador `notContains` avalia como `true` se o valor do campo de notificação de assinatura não contém o valor do filtro. No exemplo a seguir, o filtro avalia como `true` se a notificação de assinatura possui um campo `seats` com o valor da matriz não contendo o valor `10`.

**Tipos de valores possíveis:** inteiro, flutuante, string

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

Em outro exemplo, o filtro avalia como `true` se a notificação de assinatura possui um valor de campo `event` sem `launch` como sua subsequência.

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

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

O operador `beginsWith` verifica se há um prefixo em uma string. O filtro que contém o operador `beginsWith` avalia como `true` se o valor do campo de notificação de assinatura começa com o valor do filtro. No exemplo a seguir, o filtro avalia como `true` se a notificação de assinatura tem um campo `service` com um valor que começa com `AWS`.

**Tipo de valor possível:** string

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

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

O operador `in` verifica os elementos correspondentes em uma matriz. Um filtro com o operador `in` avalia como `true` se o valor do campo de notificação de assinatura contém o valor do filtro. No exemplo a seguir, o filtro avalia como `true` se a notificação de assinatura possui um campo `severity` com um dos valores presentes no matriz: `[1,2,3]`.

**Tipo de valor possível:** matriz de número inteiro, flutuante ou string

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

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

O operador `notIn` verifica se há elementos ausentes em uma matriz. O filtro que contém o operador `notIn` avalia como `true` se o valor do campo de notificação de assinatura não existe na matriz. No exemplo a seguir, o filtro avalia como `true` se a notificação de assinatura possui um campo `severity` com um dos valores não presentes no matriz: `[1,2,3]`.

**Tipo de valor possível:** matriz de número inteiro, flutuante ou string

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

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

O operador `between` verifica valores entre dois números ou strings.​ O filtro que contém o operador `between` avalia como `true` se o valor do campo de notificação de assinatura está entre o par de valores do filtro. No exemplo a seguir, o filtro avalia como `true` se a notificação de assinatura possui um campo `severity` com valores `2`,`3`,`4`.

**Tipo de valor possível:** par de número inteiro, flutuante ou string

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

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

O operador `containsAny` verifica elementos comuns em matrizes. Um filtro com o operador `containsAny` avalia como `true` se a interseção do valor do conjunto de campos de notificação de assinatura e do valor do conjunto de filtros não está vazia. No exemplo a seguir, o filtro avalia como `true` se a notificação de assinatura tem um campo `seats` com um valor de matriz contendo `10` ou `15`. Isso significa que o filtro avaliará como `true` se a notificação de assinatura tivesse um valor de campo `seats` `[10,11]` ou `[15,20,30]`.

**Tipos de valores possíveis:** inteiro, flutuante ou string

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

------

### Lógica AND
<a name="extensions-AND-logic"></a>

Você pode combinar vários filtros usando a lógica AND definindo várias entradas dentro do objeto `filters` na matriz `filterGroup`. No exemplo a seguir, os filtros avaliam como `true` se a notificação de assinatura tem um campo `userId` com um valor equivalente a `1` AND um valor de campo `group` de `Admin` ou `Developer`.

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

### Lógica OR
<a name="extensions-OR-logic"></a>

Você pode combinar vários filtros usando a lógica OR definindo vários objetos de filtro na matriz `filterGroup`. No exemplo a seguir, os filtros avaliam como `true` se a notificação de assinatura tem um campo `userId` com um valor equivalente a `1` OR um valor de campo `group` de `Admin` ou `Developer`.

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

### Exceções
<a name="extensions-exceptions"></a>

Observe que existem várias restrições para o uso de filtros:
+ No objeto `filters`, pode haver no máximo cinco itens `fieldName` exclusivos por filtro. Isso significa que você pode combinar no máximo cinco objetos individuais `fieldName` usando a lógica AND.
+ Pode haver no máximo vinte valores para o operador `containsAny`.
+ Pode haver no máximo cinco valores para os operadores `in` e `notIn`.
+ Cada string pode ter no máximo 256 caracteres.
+ Cada comparação de string diferencia maiúsculas e minúsculas.
+ A filtragem de objetos aninhados permite até cinco níveis aninhados de filtragem.
+ Cada `filterGroup` pode ter no máximo 10 `filters`. Isso significa que você pode combinar no máximo 10 `filters` usando a lógica OR.
  + O operador `in` é um caso especial da lógica OR. No exemplo a seguir, existem dois `filters`:

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

    O grupo de filtros anterior é avaliado da seguinte forma e conta para o limite máximo de filtros:

    ```
    {
        "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"
                    }
               ]  
            }
        ]
    }
    ```

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

O `invalidationJsonObject` define o seguinte:
+ `subscriptionField` – A assinatura do esquema GraphQL a ser invalidada. Uma única assinatura, definida como uma string em `subscriptionField`, é considerada invalidada.
+ `payload` – Uma lista de pares de valores-chave que é usada como entrada para invalidar assinaturas se o filtro de invalidação for avaliado como `true` em relação aos seus valores.

  O exemplo a seguir invalida clientes inscritos e conectados usando a assinatura de `onUserDelete` quando o filtro de invalidação definido no resolvedor de assinatura é avaliado como `true` em relação ao valor `payload`.

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