

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

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

**Note**  
Nous prenons désormais principalement en charge le runtime APPSYNC\$1JS et sa documentation. [Pensez à utiliser le runtime APPSYNC\$1JS et ses guides ici.](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-js-version.html)

`$extensions`contient un ensemble de méthodes permettant d'effectuer des actions supplémentaires dans vos résolveurs.

## Extensions de mise en cache
<a name="caching-extensions-list"></a>

**`$extensions.evictFromApiCache(String, String, Object) : Object`**  
Permet d'expulser un élément du cache AWS AppSync côté serveur. Le premier argument est le nom du type. Le deuxième argument est le nom du champ. Le troisième argument est un objet contenant des éléments de paire clé-valeur qui spécifient la valeur de la clé de mise en cache. Vous devez placer les éléments dans l'objet dans le même ordre que les clés de mise en cache dans le résolveur mis en cache. `cachingKey`  
Cet utilitaire ne fonctionne que pour les mutations, pas pour les requêtes.

## Extensions d'abonnement
<a name="subscription-extensions-list"></a>

**`$extensions.setSubscriptionFilter(filterJsonObject)`**  
Définit des filtres d'abonnement améliorés. Chaque événement de notification d'abonnement est évalué par rapport aux filtres d'abonnement fournis et envoie des notifications aux clients si tous les filtres répondent aux critères`true`. L'argument est `filterJsonObject` tel que décrit dans la section suivante.  
Vous pouvez utiliser cette méthode d'extension uniquement dans les modèles de mappage des réponses d'un résolveur d'abonnement.

**`$extensions.setSubscriptionInvalidationFilter(filterJsonObject)`**  
Définit les filtres d'invalidation des abonnements. Les filtres d'abonnement sont évalués par rapport à la charge utile d'invalidation, puis invalident un abonnement donné s'ils sont évalués à. `true` L'argument est `filterJsonObject` tel que décrit dans la section suivante.  
Vous pouvez utiliser cette méthode d'extension uniquement dans les modèles de mappage des réponses d'un résolveur d'abonnement.

**`$extensions.invalidateSubscriptions(invalidationJsonObject)`**  
Utilisé pour initier l'invalidation d'un abonnement suite à une mutation. L'argument est `invalidationJsonObject` tel que décrit dans la section suivante.  
Cette extension ne peut être utilisée que dans les modèles de mappage des réponses des résolveurs de mutations.  
Vous ne pouvez utiliser qu'au maximum cinq appels de `$extensions.invalidateSubscriptions()` méthode uniques dans une seule demande. Si vous dépassez cette limite, vous recevrez une erreur GraphQL.

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

L'objet JSON définit des filtres d'abonnement ou d'invalidation. Il s'agit d'un ensemble de filtres dans un`filterGroup`. Chaque filtre est un ensemble de filtres individuels.

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

Chaque filtre possède trois attributs : 
+ `fieldName`— Le champ du schéma GraphQL.
+ `operator`— Le type d'opérateur.
+ `value`— Les valeurs à comparer à la `fieldName` valeur de la notification d'abonnement.

Voici un exemple d'attribution de ces attributs :

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

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

Le type de chaîne `fieldName` fait référence à un champ défini dans le schéma GraphQL qui correspond `fieldName` à la charge utile de notification d'abonnement. Lorsqu'une correspondance est trouvée, le champ `value` du schéma GraphQL est comparé à celui du filtre `value` de notification d'abonnement. Dans l'exemple suivant, le `fieldName` filtre correspond au `service` champ défini dans un type GraphQL donné. Si la charge utile de notification contient un `service` champ avec un `value` équivalent à`AWS AppSync`, le filtre est évalué comme suit : `true`

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

### Champ : valeur
<a name="extensions-value"></a>

La valeur peut être d'un type différent en fonction de l'opérateur :
+ Nombre unique ou booléen
  + Exemples de chaînes :`"test"`, `"service"`
  + Exemples de chiffres :`1`,`2`, `45.75`
  + Exemples booléens :, `true` `false`
+ Paires de nombres ou de chaînes
  + Exemple de paire de chaînes :`["test1","test2"]`, `["start","end"]`
  + Exemple de paire de numéros :`[1,4]`,`[67,89]`, `[12.45, 95.45]`
+ Tableaux de nombres ou de chaînes
  + Exemple de tableau de chaînes : `["test1","test2","test3","test4","test5"]`
  + Exemple de tableau de nombres :`[1,2,3,4,5]`, `[12.11,46.13,45.09,12.54,13.89]`

### Domaine : opérateur
<a name="extensions-operator"></a>

Chaîne distinguant majuscules et minuscules avec les valeurs possibles suivantes : 


| 
| 
| Opérateur | Description | Types de valeurs possibles | 
| --- |--- |--- |
| eq | Égal à | entier, flottant, chaîne, booléen | 
| ne | Non égal à | entier, flottant, chaîne, booléen | 
| le | Inférieur ou égal à | entier, flottant, chaîne | 
| lt | Inférieur à | entier, flottant, chaîne | 
| gm | Supérieur ou égal à | entier, flottant, chaîne | 
| gt | Supérieur à | entier, flottant, chaîne | 
| contient | Vérifie la présence d'une sous-séquence ou d'une valeur dans l'ensemble. | entier, flottant, chaîne | 
| NE CONTIENT PAS | Vérifie l'absence de sous-séquence ou l'absence de valeur dans l'ensemble. | entier, flottant, chaîne | 
| Commence par | Vérifie la présence d'un préfixe. | chaîne | 
| in | Vérifie les éléments correspondants figurant dans la liste. | Tableau de nombres entiers, flottants ou chaînes | 
| notIn | Vérifie les éléments correspondants qui ne figurent pas dans la liste. | Tableau de nombres entiers, flottants ou chaînes | 
| between | Entre deux valeurs | entier, flottant, chaîne | 
| Contient n'importe quel | Contient des éléments communs | entier, flottant, chaîne | 

Le tableau suivant décrit comment chaque opérateur est utilisé dans la notification d'abonnement.

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

L'`eq`opérateur évalue `true` si la valeur du champ de notification d'abonnement correspond et est strictement égale à la valeur du filtre. Dans l'exemple suivant, le filtre détermine `true` si la notification d'abonnement contient un `service` champ dont la valeur est équivalente à`AWS AppSync`.

**Types de valeurs possibles :** entier, flottant, chaîne, booléen

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

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

L'`ne`opérateur détermine `true` si la valeur du champ de notification d'abonnement est différente de la valeur du filtre. Dans l'exemple suivant, le filtre détermine `true` si la notification d'abonnement contient un `service` champ dont la valeur est différente de`AWS AppSync`.

**Types de valeurs possibles :** entier, flottant, chaîne, booléen

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

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

L'`le`opérateur détermine `true` si la valeur du champ de notification d'abonnement est inférieure ou égale à la valeur du filtre. Dans l'exemple suivant, le filtre détermine `true` si la notification d'abonnement contient un `size` champ dont la valeur est inférieure ou égale à`5`.

**Types de valeurs possibles :** entier, flottant, chaîne

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

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

L'`lt`opérateur détermine `true` si la valeur du champ de notification d'abonnement est inférieure à la valeur du filtre. Dans l'exemple suivant, le filtre détermine `true` si la notification d'abonnement contient un `size` champ dont la valeur est inférieure `5` à.

**Types de valeurs possibles :** entier, flottant, chaîne

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

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

L'`ge`opérateur détermine `true` si la valeur du champ de notification d'abonnement est supérieure ou égale à la valeur du filtre. Dans l'exemple suivant, le filtre détermine `true` si la notification d'abonnement contient un `size` champ dont la valeur est supérieure ou égale à`5`.

**Types de valeurs possibles :** entier, flottant, chaîne

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

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

L'`gt`opérateur détermine `true` si la valeur du champ de notification d'abonnement est supérieure à la valeur du filtre. Dans l'exemple suivant, le filtre détermine `true` si la notification d'abonnement contient un `size` champ dont la valeur est supérieure à`5`.

**Types de valeurs possibles :** entier, flottant, chaîne

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

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

L'`contains`opérateur vérifie la présence d'une sous-chaîne, d'une sous-séquence ou d'une valeur dans un ensemble ou un élément unique. Un filtre avec l'`contains`opérateur détermine `true` si la valeur du champ de notification d'abonnement contient la valeur du filtre. Dans l'exemple suivant, le filtre détermine `true` si la notification d'abonnement contient un `seats` champ contenant la valeur `10` du tableau.

**Types de valeurs possibles :** entier, flottant, chaîne

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

Dans un autre exemple, le filtre détermine `true` si la notification d'abonnement contient un `event` champ `launch` sous forme de sous-chaîne.

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

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

L'`notContains`opérateur vérifie l'absence de sous-chaîne, de sous-séquence ou de valeur dans un ensemble ou un élément unique. Le filtre avec l'`notContains`opérateur détermine `true` si la valeur du champ de notification d'abonnement ne contient pas la valeur du filtre. Dans l'exemple suivant, le filtre détermine `true` si la notification d'abonnement contient un `seats` champ dans lequel la valeur du tableau ne contient pas la valeur`10`.

**Types de valeurs possibles :** entier, flottant, chaîne

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

Dans un autre exemple, le filtre détermine `true` si la notification d'abonnement contient une valeur de `event` champ sans `launch` sa sous-séquence.

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

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

L'`beginsWith`opérateur vérifie la présence d'un préfixe dans une chaîne. Le filtre contenant l'`beginsWith`opérateur détermine `true` si la valeur du champ de notification d'abonnement commence par la valeur du filtre. Dans l'exemple suivant, le filtre détermine `true` si la notification d'abonnement contient un `service` champ dont la valeur commence `AWS` par.

**Type de valeur possible :** chaîne

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

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

L'`in`opérateur vérifie les éléments correspondants dans un tableau. Le filtre contenant l'`in`opérateur détermine `true` si la valeur du champ de notification d'abonnement existe dans un tableau. Dans l'exemple suivant, le filtre détermine `true` si la notification d'abonnement contient un `severity` champ contenant l'une des valeurs présentes dans le tableau :`[1,2,3]`.

**Type de valeur possible :** tableau de nombres entiers, flottants ou chaînes

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

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

L'`notIn`opérateur vérifie s'il n'y a pas d'éléments manquants dans un tableau. Le filtre contenant l'`notIn`opérateur détermine `true` si la valeur du champ de notification d'abonnement n'existe pas dans le tableau. Dans l'exemple suivant, le filtre détermine `true` si la notification d'abonnement contient un `severity` champ contenant l'une des valeurs absentes du tableau :`[1,2,3]`.

**Type de valeur possible :** tableau de nombres entiers, flottants ou chaînes

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

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

L'`between`opérateur vérifie les valeurs comprises entre deux nombres ou chaînes. Le filtre contenant l'`between`opérateur détermine `true` si la valeur du champ de notification d'abonnement se situe entre la paire de valeurs du filtre. Dans l'exemple suivant, le filtre détermine `true` si la notification d'abonnement contient un `severity` champ contenant des valeurs`2`,`3`,`4`.

**Types de valeurs possibles :** paire d'entiers, de nombres flottants ou de chaînes

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

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

L'`containsAny`opérateur vérifie la présence d'éléments communs dans les tableaux. Un filtre avec l'`containsAny`opérateur évalue `true` si l'intersection entre la valeur définie du champ de notification d'abonnement et la valeur définie du filtre n'est pas vide. Dans l'exemple suivant, le filtre détermine `true` si la notification d'abonnement contient un `seats` champ dont la valeur du tableau contient soit `10` ou`15`. Cela signifie que le filtre évaluera `true` si la valeur du `seats` champ de la notification d'abonnement est égale à `[10,11]` ou`[15,20,30]`.

**Types de valeurs possibles :** entier, flottant ou chaîne

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

------

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

Vous pouvez combiner plusieurs filtres à l'aide de la logique AND en définissant plusieurs entrées dans l'`filters`objet du `filterGroup` tableau. Dans l'exemple suivant, les filtres évaluent `true` si la notification d'abonnement contient un `userId` champ avec une valeur équivalente à `1` ET une valeur de `group` champ égale à `Admin` ou`Developer`.

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

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

Vous pouvez combiner plusieurs filtres à l'aide de la logique OR en définissant plusieurs objets de filtre dans le `filterGroup` tableau. Dans l'exemple suivant, les filtres évaluent `true` si la notification d'abonnement contient un `userId` champ avec une valeur équivalente à `1` OU une valeur de `group` champ égale à `Admin` ou`Developer`.

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

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

Notez que l'utilisation des filtres est soumise à plusieurs restrictions :
+ Dans l'`filters`objet, il peut y avoir un maximum de cinq `fieldName` éléments uniques par filtre. Cela signifie que vous pouvez combiner un maximum de cinq `fieldName` objets individuels à l'aide de la logique AND.
+ Il peut y avoir un maximum de vingt valeurs pour l'`containsAny`opérateur.
+ Il peut y avoir un maximum de cinq valeurs pour les `notIn` opérateurs `in` et.
+ Chaque chaîne peut comporter un maximum de 256 caractères.
+ Chaque comparaison de chaînes fait la distinction majuscules/minuscules.
+ Le filtrage des objets imbriqués permet d'obtenir jusqu'à cinq niveaux de filtrage imbriqués.
+ Chacun `filterGroup` peut en avoir un maximum de 10`filters`. Cela signifie que vous pouvez en combiner un maximum de 10 `filters` en utilisant la logique OR.
  + L'`in`opérateur est un cas particulier de la logique OR. Dans l'exemple suivant, il y en a deux `filters` :

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

    Le groupe de filtres précédent est évalué comme suit et est pris en compte dans le calcul de la limite maximale de filtres :

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

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

`invalidationJsonObject`définit les éléments suivants :
+ `subscriptionField`— L'abonnement au schéma GraphQL à invalider. Un seul abonnement, défini sous la forme d'une chaîne dans le`subscriptionField`, est considéré comme invalide.
+ `payload`— Une liste de paires clé-valeur utilisée comme entrée pour invalider les abonnements si le filtre d'invalidation est évalué par rapport à leurs valeurs. `true`

  L'exemple suivant invalide les clients abonnés et connectés utilisant l'`onUserDelete`abonnement lorsque le filtre d'invalidation défini dans le résolveur d'abonnement est évalué par rapport à la valeur. `true` `payload`

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