

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.

# AWS AppSync référence de l'utilitaire du modèle de mappage du résolveur
<a name="resolver-util-reference"></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)

AWS AppSync définit un ensemble d'utilitaires que vous pouvez utiliser dans un résolveur GraphQL pour simplifier les interactions avec les sources de données. Certains de ces utilitaires sont destinés à une utilisation générale avec n'importe quelle source de données, telle que la génération IDs ou l'horodatage. D'autres sont spécifiques à un type de source de données. Les utilitaires suivants sont disponibles :
+  [Aides utilitaires dans \$1util](https://docs.aws.amazon.com/appsync/latest/devguide/utility-helpers-in-util.html) - La variable \$1util contient des méthodes utilitaires générales pour vous aider à travailler avec les données. Sauf indication contraire, tous les utilitaires emploient le jeu de caractères UTF-8.
+ [ AppSync directives](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-directives.html) - AppSync expose des directives pour faciliter la productivité des développeurs lors de l'écriture en VTL.
+  [Assistants temporels dans \$1util.time - La variable \$1util.time](https://docs.aws.amazon.com/appsync/latest/devguide/time-helpers-in-util-time.html) contient des méthodes datetime permettant de générer des horodatages, de convertir des formats de date/heure et d'analyser des chaînes de datetime. La syntaxe des formats datetime est basée sur celle-ci [DateTimeFormatter](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html), à laquelle vous pouvez vous référer pour de plus amples informations.
+ [Les assistants de liste contenus dans \$1util.list - \$1util.list](https://docs.aws.amazon.com/appsync/latest/devguide/list-helpers-in-util-list.html) contiennent des méthodes qui facilitent les opérations de liste courantes, telles que la suppression ou la conservation d'éléments d'une liste pour filtrer les cas d'utilisation.
+  [Les aides cartographiques contenues dans \$1util.map - \$1util.map](https://docs.aws.amazon.com/appsync/latest/devguide/utility-helpers-in-map.html) contiennent des méthodes qui facilitent les opérations cartographiques courantes, telles que la suppression ou la conservation d'éléments d'une carte pour filtrer les cas d'utilisation.
+  [Les assistants DynamoDB contenus dans \$1util.dynamodb](https://docs.aws.amazon.com/appsync/latest/devguide/dynamodb-helpers-in-util-dynamodb.html) - \$1util.dynamodb contiennent des méthodes d'assistance qui facilitent l'écriture et la lecture de données sur Amazon DynamoDB, telles que le mappage automatique des types et le formatage. 
+  [Les aides Amazon RDS dans \$1util.rds - \$1util.rds](https://docs.aws.amazon.com/appsync/latest/devguide/rds-helpers-in-util-rds.html) contiennent des méthodes d'assistance qui mettent en forme les opérations RDS en supprimant les données superflues dans les résultats de résultat.
+  [Helpers HTTP dans \$1util.http - L'utilitaire \$1util.http](https://docs.aws.amazon.com/appsync/latest/devguide/http-helpers-in-utils-http.html) fournit des méthodes d'assistance que vous pouvez utiliser pour gérer les paramètres des requêtes HTTP et pour ajouter des en-têtes de réponse.
+  [Les aides XML dans \$1util.xml - \$1util.xml](https://docs.aws.amazon.com/appsync/latest/devguide/xml-helpers-in-utils-xml.html) contiennent des méthodes d'assistance qui peuvent faciliter la traduction des réponses XML en JSON ou dans un dictionnaire.
+  [Les aides à la transformation de \$1util.transform - \$1util.transform](https://docs.aws.amazon.com/appsync/latest/devguide/transformation-helpers-in-utils-transform.html) contiennent des méthodes d'assistance qui facilitent l'exécution d'opérations complexes sur des sources de données, telles que les opérations de filtrage DynamoDB.
+  [Les aides mathématiques de \$1util.math - \$1util.math](https://docs.aws.amazon.com/appsync/latest/devguide/math-helpers-in-util-math.html) contiennent des méthodes pour faciliter les opérations mathématiques courantes.
+  [Les assistants de chaîne dans \$1util.str - \$1util.str](https://docs.aws.amazon.com/appsync/latest/devguide/str-helpers-in-util-str.html) contiennent des méthodes pour faciliter les opérations de chaîne courantes.
+  [Extensions](https://docs.aws.amazon.com/appsync/latest/devguide/extensions.html) - \$1extensions contient un ensemble de méthodes permettant d'effectuer des actions supplémentaires dans vos résolveurs.

# Aides utilitaires dans \$1util
<a name="utility-helpers-in-util"></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)

La `$util` variable contient des méthodes utilitaires générales pour vous aider à travailler avec les données. Sauf indication contraire, tous les utilitaires emploient le jeu de caractères UTF-8.

## Utilitaires d'analyse JSON
<a name="utility-helpers-in-json-parsing"></a>

### Liste des utilitaires d'analyse JSON
<a name="utility-helpers-in-json-parsing-list"></a>

** **`$util.parseJson(String) : Object`** **  
Prend la chaîne JSON (obtenue à l’aide de stringify) et renvoie une représentation objet du résultat.

** **`$util.toJson(Object) : String`** **  
Accepte un objet et retourne une représentation JSON de cet objet obtenue à l'aide de stringify.

## Utilitaires d'encodage
<a name="utility-helpers-in-encoding"></a>

### Liste des utilitaires d'encodage
<a name="utility-helpers-in-encoding-list"></a>

** **`$util.urlEncode(String) : String`** **  
Renvoie la chaîne en entrée sous la forme d'une chaîne codée `application/x-www-form-urlencoded`.

** **`$util.urlDecode(String) : String`** **  
Décode une chaîne codée `application/x-www-form-urlencoded` sous sa forme initiale non codée.

** **`$util.base64Encode( byte[] ) : String`** **  
Code les données d'entrée en une chaîne codée en base64.

** **`$util.base64Decode(String) : byte[]`** **  
Décode les données d’une chaîne encodée en base64.

## Utilitaires de génération d'identifiants
<a name="utility-helpers-in-id-gen"></a>

### Liste des utilitaires de génération d'identifiants
<a name="utility-helpers-in-id-gen-list"></a>

** **`$util.autoId() : String`** **  
Renvoie un UUID 128 bits généré de façon aléatoire.

****`$util.autoUlid() : String`****  
Renvoie un ULID (identifiant lexicographiquement sortable universel unique) de 128 bits généré aléatoirement.

****`$util.autoKsuid() : String`****  
Renvoie un KSUID (K-Sortable Unique Identifier) de 128 bits généré aléatoirement en base62 et codé sous forme de chaîne d'une longueur de 27.

## Utils d'erreur
<a name="utility-helpers-in-error"></a>

### Liste des utilitaires d'erreur
<a name="utility-helpers-in-error-list"></a>

** `$util.error(String)` **  
Lève une erreur personnalisée. Utilisez-le dans les modèles de mappage de demandes ou de réponses pour détecter une erreur dans la demande ou dans le résultat de l'appel.

** `$util.error(String, String)` **  
Lève une erreur personnalisée. Utilisez-le dans les modèles de mappage de demandes ou de réponses pour détecter une erreur dans la demande ou dans le résultat de l'appel. Vous pouvez également spécifier un`errorType`.

** `$util.error(String, String, Object)` **  
Lève une erreur personnalisée. Utilisez-le dans les modèles de mappage de demandes ou de réponses pour détecter une erreur dans la demande ou dans le résultat de l'appel. Vous pouvez également spécifier un `errorType` et un `data` champ. La valeur `data` sera ajoutée au bloc `error` correspondant à l'intérieur d'`errors` dans la réponse GraphQL.  
`data`sera filtré en fonction de l'ensemble de sélection de requêtes.

** `$util.error(String, String, Object, Object)` **  
Lève une erreur personnalisée. Peut être utilisé dans les modèles de mappage de demande ou de réponse si le modèle détecte une erreur associée à la demande ou au résultat de l'appel. En outre, un `errorType` champ, un `data` champ et un `errorInfo` champ peuvent être spécifiés. La valeur `data` sera ajoutée au bloc `error` correspondant à l'intérieur d'`errors` dans la réponse GraphQL.   
`data`sera filtré en fonction de l'ensemble de sélection de requêtes. La valeur `errorInfo` sera ajoutée au bloc `error` correspondant à l'intérieur d'`errors` dans la réponse GraphQL.  
`errorInfo`**ne sera PAS** filtré en fonction de l'ensemble de sélection de requêtes.

** `$util.appendError(String)` **  
Ajoute une erreur personnalisée. Peut être utilisé dans les modèles de mappage de demande ou de réponse si le modèle détecte une erreur associée à la demande ou au résultat de l'appel. Contrairement à `$util.error(String)`, l'évaluation du modèle n'est pas interrompue et, par conséquent, les données peuvent être retournées à l'appelant.

** `$util.appendError(String, String)` **  
Ajoute une erreur personnalisée. Peut être utilisé dans les modèles de mappage de demande ou de réponse si le modèle détecte une erreur associée à la demande ou au résultat de l'appel. En outre, il est possible de spécifier un champ `errorType`. Contrairement à `$util.error(String, String)`, l'évaluation du modèle n'est pas interrompue et, par conséquent, les données peuvent être retournées à l'appelant.

** `$util.appendError(String, String, Object)` **  
Ajoute une erreur personnalisée. Peut être utilisé dans les modèles de mappage de demande ou de réponse si le modèle détecte une erreur associée à la demande ou au résultat de l'appel. Il est également possible de spécifier un champ `errorType` et un champ `data`. Contrairement à `$util.error(String, String, Object)`, l'évaluation du modèle n'est pas interrompue et, par conséquent, les données peuvent être retournées à l'appelant. La valeur `data` sera ajoutée au bloc `error` correspondant à l'intérieur d'`errors` dans la réponse GraphQL.   
`data`sera filtré en fonction de l'ensemble de sélection de requêtes.

** `$util.appendError(String, String, Object, Object)` **  
Ajoute une erreur personnalisée. Peut être utilisé dans les modèles de mappage de demande ou de réponse si le modèle détecte une erreur associée à la demande ou au résultat de l'appel. En outre, un `errorType` champ, un `data` champ et un `errorInfo` champ peuvent être spécifiés. Contrairement à `$util.error(String, String, Object, Object)`, l'évaluation du modèle n'est pas interrompue et, par conséquent, les données peuvent être retournées à l'appelant. La valeur `data` sera ajoutée au bloc `error` correspondant à l'intérieur d'`errors` dans la réponse GraphQL.  
`data`sera filtré en fonction de l'ensemble de sélection de requêtes. La valeur `errorInfo` sera ajoutée au bloc `error` correspondant à l'intérieur d'`errors` dans la réponse GraphQL.  
`errorInfo`**ne sera PAS** filtré en fonction de l'ensemble de sélection de requêtes.

## Utilitaires de validation des conditions
<a name="utility-helpers-in-condition"></a>

### Liste des utilitaires de validation des conditions
<a name="utility-helpers-in-condition-list"></a>

** `$util.validate(Boolean, String) : void` **  
Si la condition est fausse, lancez un CustomTemplateException avec le message spécifié.

** `$util.validate(Boolean, String, String) : void` **  
Si la condition est fausse, lancez un CustomTemplateException avec le message et le type d'erreur spécifiés.

** `$util.validate(Boolean, String, String, Object) : void` **  
Si la condition est fausse, lancez un CustomTemplateException avec le message et le type d'erreur spécifiés, ainsi que les données à renvoyer dans la réponse.

## Utilitaires de comportement nuls
<a name="utility-helpers-in-null-behavior"></a>

### Liste d'utilitaires de comportement nulle
<a name="utility-helpers-in-null-behavior-list"></a>

** `$util.isNull(Object) : Boolean` **  
Renvoie la valeur true si l'objet fourni a la valeur null.

** `$util.isNullOrEmpty(String) : Boolean` **  
Renvoie la valeur true si les données fournies ont une valeur null ou une chaîne vide. Sinon, la valeur renvoyée est false.

** `$util.isNullOrBlank(String) : Boolean` **  
Renvoie la valeur true si les données fournies ont une valeur null ou une chaîne vide. Sinon, la valeur renvoyée est false.

** `$util.defaultIfNull(Object, Object) : Object` **  
Renvoie le premier objet si la valeur n'est pas null. Sinon, renvoie le deuxième objet en tant qu'« objet par défaut ».

** `$util.defaultIfNullOrEmpty(String, String) : String` **  
Renvoie la première chaîne si la valeur n'est pas null ou vide. Sinon, renvoie la deuxième chaîne en tant que « chaîne (string) par défaut ».

** `$util.defaultIfNullOrBlank(String, String) : String` **  
Renvoie la première chaîne si la valeur n'est pas null ou vide. Sinon, renvoie la deuxième chaîne en tant que « chaîne (string) par défaut ».

## Utilitaires de correspondance de modèles
<a name="utility-helpers-in-pattern-matching"></a>

### Liste d'utilitaires correspondant au type et au modèle
<a name="utility-helpers-in-type-pattern-matching-list"></a>

** `$util.typeOf(Object) : String` **  
Renvoie une chaîne décrivant le type de l'objet. Identifications de type prises en charge : « Null », « Number », « String », « Map », « List », « Boolean ». Si un type ne peut pas être identifié, le type de retour est « Object ».

** `$util.matches(String, String) : Boolean` **  
Renvoie la valeur true si le modèle spécifié dans le premier argument correspond aux données fournies dans le deuxième argument. Le modèle doit être une expression régulière, telle que `$util.matches("a*b", "aaaaab")`. La fonctionnalité est basée sur [Pattern](https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html), que vous pouvez référencer à titre de documentation ultérieure.

** `$util.authType() : String` **  
Renvoie une chaîne décrivant le type d'authentification multiple utilisé par une demande, renvoyant soit « IAM Authorization », « User Pool Authorization », « Open ID Connect Authorization », soit « API Key Authorization ».

## Utilitaires de validation d'objets
<a name="utility-helpers-in-object-validation"></a>

### Liste des utilitaires de validation d'objets
<a name="utility-helpers-in-object-validation-list"></a>

** `$util.isString(Object) : Boolean` **  
Renvoie vrai si l'objet est une chaîne.

** `$util.isNumber(Object) : Boolean` **  
Renvoie vrai si l'objet est un nombre.

** `$util.isBoolean(Object) : Boolean` **  
Renvoie vrai si l'objet est un booléen.

** `$util.isList(Object) : Boolean` **  
Renvoie vrai si l'objet est une liste.

** `$util.isMap(Object) : Boolean` **  
Renvoie vrai si l'objet est une carte.

## CloudWatch utilitaires de journalisation
<a name="utility-helpers-in-logging"></a>

### CloudWatch liste des utilitaires de journalisation
<a name="utility-helpers-in-cloudwatch-logs"></a>

**`$util.log.info(Object) : Void`**  
Enregistre la représentation sous forme de chaîne de l'objet fourni dans le flux de journal demandé lorsque la CloudWatch journalisation au niveau de la demande et au niveau du champ est activée avec le niveau du journal `ALL``INFO`, ou `DEBUG` sur une API.

**`$util.log.info(String, Object...) : Void`**  
Enregistre la représentation sous forme de chaîne des objets fournis dans le flux de journal demandé lorsque la journalisation au niveau de la demande et au niveau du champ est activée avec le niveau de CloudWatch journalisation sur une API. `ALL` Cet utilitaire remplacera toutes les variables indiquées par « \$1\$1 » dans le premier format d'entrée String par la représentation sous forme de chaîne des objets fournis dans l'ordre.

**`$util.log.debug(Object) : Void`**  
Enregistre la représentation sous forme de chaîne de l'objet fourni dans le flux de journal demandé lorsque la CloudWatch journalisation au niveau de la demande et au niveau du champ est activée au niveau du journal `ALL` ou `DEBUG` sur une API.

**`$util.log.debug(String, Object...) : Void`**  
Enregistre la représentation sous forme de chaîne des objets fournis dans le flux de journal demandé lorsque la CloudWatch journalisation au niveau du champ est activée avec le niveau du journal `DEBUG` ou le niveau du journal `ALL` sur une API. Cet utilitaire remplacera toutes les variables indiquées par « \$1\$1 » dans le premier format d'entrée String par la représentation sous forme de chaîne des objets fournis dans l'ordre.

**`$util.log.error(Object) : Void`**  
Enregistre la représentation sous forme de chaîne de l'objet fourni dans le flux de journal demandé lorsque la CloudWatch journalisation au niveau du champ est activée avec **n'importe quel** niveau de journal (`ALL``INFO`,`DEBUG`,, etc.) sur une API.

**`$util.log.error(String, Object...) : Void`**  
Enregistre la représentation sous forme de chaîne des objets fournis dans le flux de journal demandé lorsque la CloudWatch journalisation au niveau du champ est activée avec le niveau du journal `ERROR` ou le niveau du journal `ALL` sur une API. Cet utilitaire remplacera toutes les variables indiquées par « \$1\$1 » dans le premier format d'entrée String par la représentation sous forme de chaîne des objets fournis dans l'ordre.

## Utilitaires de comportement des valeurs renvoyées
<a name="utility-helpers-in-return-behavior"></a>

### Liste des utilitaires relatifs au comportement des valeurs renvoyées
<a name="utility-helpers-in-behavior-list"></a>

****`$util.qr()`** et `$util.quiet()` **  
Exécute une instruction VTL tout en supprimant la valeur renvoyée. Cela est utile pour exécuter des méthodes sans utiliser d'espaces réservés temporaires, tels que l'ajout d'éléments à une carte. Par exemple :  

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

```
#set ($myMap = {})
$util.qr($myMap.put("id", "first value"))
```  
** `$util.escapeJavaScript(String) : String` **  
Renvoie la chaîne d'entrée sous forme de chaîne JavaScript échappée.  
** `$util.urlEncode(String) : String` **  
Renvoie la chaîne en entrée sous la forme d'une chaîne codée `application/x-www-form-urlencoded`.  
** `$util.urlDecode(String) : String` **  
Décode une chaîne codée `application/x-www-form-urlencoded` sous sa forme initiale non codée.  
** `$util.base64Encode( byte[] ) : String` **  
Code les données d'entrée en une chaîne codée en base64.  
** `$util.base64Decode(String) : byte[]` **  
Décode les données d’une chaîne encodée en base64.  
** `$util.parseJson(String) : Object` **  
Prend la chaîne JSON (obtenue à l’aide de stringify) et renvoie une représentation objet du résultat.  
** `$util.toJson(Object) : String` **  
Accepte un objet et retourne une représentation JSON de cet objet obtenue à l'aide de stringify.  
** `$util.autoId() : String` **  
Renvoie un UUID 128 bits généré de façon aléatoire.  
****`$util.autoUlid() : String`****  
Renvoie un ULID (identifiant lexicographiquement sortable universel unique) de 128 bits généré aléatoirement.  
****`$util.autoKsuid() : String`****  
Renvoie un KSUID (K-Sortable Unique Identifier) de 128 bits généré aléatoirement en base62 et codé sous forme de chaîne d'une longueur de 27.  
** `$util.unauthorized()` **  
Lève `Unauthorized` pour le champ en cours de résolution. Utilisez-le dans les modèles de mappage de demandes ou de réponses pour déterminer s'il convient d'autoriser l'appelant à résoudre le champ.  
** `$util.error(String)` **  
Lève une erreur personnalisée. Utilisez-le dans les modèles de mappage de demandes ou de réponses pour détecter une erreur dans la demande ou dans le résultat de l'appel.  
** `$util.error(String, String)` **  
Lève une erreur personnalisée. Utilisez-le dans les modèles de mappage de demandes ou de réponses pour détecter une erreur dans la demande ou dans le résultat de l'appel. Vous pouvez également spécifier un`errorType`.  
** `$util.error(String, String, Object)` **  
Lève une erreur personnalisée. Utilisez-le dans les modèles de mappage de demandes ou de réponses pour détecter une erreur dans la demande ou dans le résultat de l'appel. Vous pouvez également spécifier un `errorType` et un `data` champ. La valeur `data` sera ajoutée au bloc `error` correspondant à l'intérieur d'`errors` dans la réponse GraphQL. **Remarque** : `data` est filtré en fonction du jeu de sélection de la requête.  
** `$util.error(String, String, Object, Object)` **  
Lève une erreur personnalisée. Peut être utilisé dans les modèles de mappage de demande ou de réponse si le modèle détecte une erreur associée à la demande ou au résultat de l'appel. En outre, il est possible de spécifier un champ `errorType`, un champ `data` et un champ `errorInfo`. La valeur `data` sera ajoutée au bloc `error` correspondant à l'intérieur d'`errors` dans la réponse GraphQL. **Remarque** : `data` est filtré en fonction du jeu de sélection de la requête. La valeur `errorInfo` sera ajoutée au bloc `error` correspondant à l'intérieur d'`errors` dans la réponse GraphQL. **Remarque** : `errorInfo` **N'EST PAS** filtré en fonction du jeu de sélection de la requête.  
** `$util.appendError(String)` **  
Ajoute une erreur personnalisée. Peut être utilisé dans les modèles de mappage de demande ou de réponse si le modèle détecte une erreur associée à la demande ou au résultat de l'appel. Contrairement à `$util.error(String)`, l'évaluation du modèle n'est pas interrompue et, par conséquent, les données peuvent être retournées à l'appelant.  
** `$util.appendError(String, String)` **  
Ajoute une erreur personnalisée. Peut être utilisé dans les modèles de mappage de demande ou de réponse si le modèle détecte une erreur associée à la demande ou au résultat de l'appel. En outre, il est possible de spécifier un champ `errorType`. Contrairement à `$util.error(String, String)`, l'évaluation du modèle n'est pas interrompue et, par conséquent, les données peuvent être retournées à l'appelant.  
** `$util.appendError(String, String, Object)` **  
Ajoute une erreur personnalisée. Peut être utilisé dans les modèles de mappage de demande ou de réponse si le modèle détecte une erreur associée à la demande ou au résultat de l'appel. Il est également possible de spécifier un champ `errorType` et un champ `data`. Contrairement à `$util.error(String, String, Object)`, l'évaluation du modèle n'est pas interrompue et, par conséquent, les données peuvent être retournées à l'appelant. La valeur `data` sera ajoutée au bloc `error` correspondant à l'intérieur d'`errors` dans la réponse GraphQL. **Remarque** : `data` est filtré en fonction du jeu de sélection de la requête.  
** `$util.appendError(String, String, Object, Object)` **  
Ajoute une erreur personnalisée. Peut être utilisé dans les modèles de mappage de demande ou de réponse si le modèle détecte une erreur associée à la demande ou au résultat de l'appel. En outre, il est possible de spécifier un champ `errorType`, un champ `data` et un champ `errorInfo`. Contrairement à `$util.error(String, String, Object, Object)`, l'évaluation du modèle n'est pas interrompue et, par conséquent, les données peuvent être retournées à l'appelant. La valeur `data` sera ajoutée au bloc `error` correspondant à l'intérieur d'`errors` dans la réponse GraphQL. **Remarque** : `data` est filtré en fonction du jeu de sélection de la requête. La valeur `errorInfo` sera ajoutée au bloc `error` correspondant à l'intérieur d'`errors` dans la réponse GraphQL. **Remarque** : `errorInfo` **N'EST PAS** filtré en fonction du jeu de sélection de la requête.  
** `$util.validate(Boolean, String) : void` **  
Si la condition est fausse, lancez un CustomTemplateException avec le message spécifié.  
** `$util.validate(Boolean, String, String) : void` **  
Si la condition est fausse, lancez un CustomTemplateException avec le message et le type d'erreur spécifiés.  
** `$util.validate(Boolean, String, String, Object) : void` **  
Si la condition est fausse, lancez un CustomTemplateException avec le message et le type d'erreur spécifiés, ainsi que les données à renvoyer dans la réponse.  
** `$util.isNull(Object) : Boolean` **  
Renvoie la valeur true si l'objet fourni a la valeur null.  
** `$util.isNullOrEmpty(String) : Boolean` **  
Renvoie la valeur true si les données fournies ont une valeur null ou une chaîne vide. Sinon, la valeur renvoyée est false.  
** `$util.isNullOrBlank(String) : Boolean` **  
Renvoie la valeur true si les données fournies ont une valeur null ou une chaîne vide. Sinon, la valeur renvoyée est false.  
** `$util.defaultIfNull(Object, Object) : Object` **  
Renvoie le premier objet si la valeur n'est pas null. Sinon, renvoie le deuxième objet en tant qu'« objet par défaut ».  
** `$util.defaultIfNullOrEmpty(String, String) : String` **  
Renvoie la première chaîne si la valeur n'est pas null ou vide. Sinon, renvoie la deuxième chaîne en tant que « chaîne (string) par défaut ».  
** `$util.defaultIfNullOrBlank(String, String) : String` **  
Renvoie la première chaîne si la valeur n'est pas null ou vide. Sinon, renvoie la deuxième chaîne en tant que « chaîne (string) par défaut ».  
** `$util.isString(Object) : Boolean` **  
Renvoie la valeur true si l'objet est une chaîne.  
** `$util.isNumber(Object) : Boolean` **  
Renvoie la valeur true si l'objet est un nombre.  
** `$util.isBoolean(Object) : Boolean` **  
Renvoie la valeur true si l'objet est une valeur booléenne.  
** `$util.isList(Object) : Boolean` **  
Renvoie la valeur true si l'objet est une liste.  
** `$util.isMap(Object) : Boolean` **  
Renvoie la valeur true si l'objet est une map.  
** `$util.typeOf(Object) : String` **  
Renvoie une chaîne décrivant le type de l'objet. Identifications de type prises en charge : « Null », « Number », « String », « Map », « List », « Boolean ». Si un type ne peut pas être identifié, le type de retour est « Object ».  
** `$util.matches(String, String) : Boolean` **  
Renvoie la valeur true si le modèle spécifié dans le premier argument correspond aux données fournies dans le deuxième argument. Le modèle doit être une expression régulière, telle que `$util.matches("a*b", "aaaaab")`. La fonctionnalité est basée sur [Pattern](https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html), que vous pouvez référencer à titre de documentation ultérieure.  
** `$util.authType() : String` **  
Renvoie une chaîne décrivant le type d'authentification multiple utilisé par une demande, renvoyant soit « IAM Authorization », « User Pool Authorization », « Open ID Connect Authorization », soit « API Key Authorization ».  
****`$util.log.info(Object) : Void`****  
Enregistre la représentation sous forme de chaîne de l'objet fourni dans le flux de journal demandé lorsque la journalisation au niveau de la demande et au niveau du champ est activée avec le niveau de CloudWatch journalisation sur une API. `ALL`  
****`$util.log.info(String, Object...) : Void`****  
Enregistre la représentation sous forme de chaîne des objets fournis dans le flux de journal demandé lorsque la journalisation au niveau de la demande et au niveau du champ est activée avec le niveau de CloudWatch journalisation sur une API. `ALL` Cet utilitaire remplacera toutes les variables indiquées par « \$1\$1 » dans le premier format d'entrée String par la représentation sous forme de chaîne des objets fournis dans l'ordre.  
****`$util.log.error(Object) : Void`****  
Enregistre la représentation sous forme de chaîne de l'objet fourni dans le flux de journal demandé lorsque la CloudWatch journalisation au niveau du champ est activée avec le niveau du journal `ERROR` ou le niveau du journal `ALL` sur une API.  
****`$util.log.error(String, Object...) : Void`****  
Enregistre la représentation sous forme de chaîne des objets fournis dans le flux de journal demandé lorsque la CloudWatch journalisation au niveau du champ est activée avec le niveau du journal `ERROR` ou le niveau du journal `ALL` sur une API. Cet utilitaire remplacera toutes les variables indiquées par « \$1\$1 » dans le premier format d'entrée String par la représentation sous forme de chaîne des objets fournis dans l'ordre.

** `$util.escapeJavaScript(String) : String` **  
Renvoie la chaîne d'entrée sous forme de chaîne JavaScript échappée.

## Autorisation du résolveur
<a name="utility-helpers-in-resolver-auth"></a>

### Liste d'autorisations du résolveur
<a name="utility-helpers-in-resolver-auth-list"></a>

** `$util.unauthorized()` **  
Lève `Unauthorized` pour le champ en cours de résolution. Utilisez-le dans les modèles de mappage de demandes ou de réponses pour déterminer s'il convient d'autoriser l'appelant à résoudre le champ.

# AWS AppSync directives
<a name="aws-appsync-directives"></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)

AWS AppSync expose des directives pour faciliter la productivité des développeurs lors de l'écriture en VTL.

## Utilitaires de directives
<a name="utility-helpers-in-directives"></a>

****`#return(Object)`****  
Vous `#return(Object)` permet de revenir prématurément à partir de n'importe quel modèle de mappage. `#return(Object)`est analogue au mot clé *return* dans les langages de programmation, car il retournera à partir du bloc logique le plus proche. L'utilisation de `#return(Object)` l'intérieur d'un modèle de mappage du résolveur reviendra du résolveur. De plus, l'utilisation `#return(Object)` à partir d'un modèle de mappage de fonctions revient à la fonction et poursuit l'exécution soit vers la fonction suivante du pipeline, soit vers le modèle de mappage de réponse du résolveur.

****`#return`****  
La `#return` directive présente les mêmes comportements que`#return(Object)`, mais elle `null` sera renvoyée à la place.

# Des aides temporelles dans \$1util.time
<a name="time-helpers-in-util-time"></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)

La variable `$util.time` contient les méthodes datetime pour aider à générer les horodatages, à convertir d'un format datetime à l'autre et à analyser les chaînes datetime. La syntaxe des formats datetime est basée sur [DateTimeFormatter](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html)laquelle vous pouvez vous référer pour obtenir de la documentation supplémentaire. Nous fournissons quelques exemples ci-dessous, ainsi qu'une liste des méthodes et des descriptions disponibles.

## Temps et utilités
<a name="utility-helpers-in-time"></a>

### Liste des heures et des outils
<a name="utility-helpers-in-time-list"></a>

** `$util.time.nowISO8601() : String` **  
Renvoie une représentation sous forme de chaîne de l'UTC au [ISO8601format](https://en.wikipedia.org/wiki/ISO_8601).

** `$util.time.nowEpochSeconds() : long` **  
Renvoie le nombre de secondes entre l'époque Unix 1970-01-01T00:00:00Z et maintenant.

** `$util.time.nowEpochMilliSeconds() : long` **  
Renvoie le nombre de millisecondes entre l'époque Unix 1970-01-01T00:00:00Z et maintenant.

** `$util.time.nowFormatted(String) : String` **  
Renvoie une chaîne de l'horodatage actuel (UTC) à l'aide du format spécifié à partir d'un type d'entrée String (chaîne).

** `$util.time.nowFormatted(String, String) : String` **  
Renvoie une chaîne de l'horodatage actuel pour un fuseau horaire à l'aide du format et du fuseau spécifiés à partir de types d'entrée String (chaîne).

** `$util.time.parseFormattedToEpochMilliSeconds(String, String) : Long` **  
Analyse un horodatage transmis sous forme de chaîne avec un format contenant un fuseau horaire, puis renvoie l'horodatage en millisecondes depuis l'époque.

** `$util.time.parseFormattedToEpochMilliSeconds(String, String, String) : Long` **  
Analyse un horodatage transmis sous forme de chaîne avec un format et un fuseau horaire, puis renvoie l'horodatage en millisecondes depuis l'époque.

** `$util.time.parseISO8601ToEpochMilliSeconds(String) : Long` **  
Analyse un ISO8601 horodatage transmis sous forme de chaîne, puis renvoie l'horodatage en millisecondes depuis l'époque.

** `$util.time.epochMilliSecondsToSeconds(long) : long` **  
Convertit une époque Unix en millisecondes en une époque Unix en secondes.

** `$util.time.epochMilliSecondsToISO8601(long) : String` **  
Convertit l'horodatage d'une époque en millisecondes en horodatage. ISO8601

** `$util.time.epochMilliSecondsToFormatted(long, String) : String` **  
Convertit l'horodatage d'une époque en millisecondes, transmis sous sa forme la plus longue, en un horodatage formaté selon le format fourni en UTC.

** `$util.time.epochMilliSecondsToFormatted(long, String, String) : String` **  
Convertit un horodatage en millisecondes d'époque, transmis sous forme de long, en un horodatage formaté selon le format fourni dans le fuseau horaire fourni.

## Exemples de fonctions autonomes
<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
```

## Exemples de conversion
<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
```

## Exemples d'analyse syntaxique
<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
```

## Utilisation avec des scalaires AWS AppSync définis
<a name="usage-with-aws-scalars"></a>

Les formats suivants sont compatibles avec `AWSDate`, `AWSDateTime`, et `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
```

# Répertorier les assistants dans \$1util.list
<a name="list-helpers-in-util-list"></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)

`$util.list`contient des méthodes destinées à faciliter les opérations de liste courantes, telles que la suppression ou la conservation d'éléments d'une liste pour filtrer les cas d'utilisation.

## Liste des utilitaires
<a name="utility-helpers-in-list-utils"></a>

** `$util.list.copyAndRetainAll(List, List) : List` **  
Fait une copie superficielle de la liste fournie dans le premier argument tout en ne conservant que les éléments spécifiés dans le second argument, s'ils sont présents. Tous les autres éléments sont supprimés de la copie.

** `$util.list.copyAndRemoveAll(List, List) : List` **  
Effectue une copie superficielle de la liste fournie dans le premier argument tout en supprimant tous les éléments dont l'élément est spécifié dans le deuxième argument, s'ils sont présents. Tous les autres éléments sont conservés dans la copie.

** `$util.list.sortList(List, Boolean, String) : List` **  
Trie une liste d'objets, qui est fournie dans le premier argument. Si le deuxième argument est vrai, la liste est triée par ordre décroissant ; si le second argument est faux, la liste est triée par ordre croissant. Le troisième argument est le nom de chaîne de la propriété utilisée pour trier une liste d'objets personnalisés. S'il s'agit d'une liste de chaînes, d'entiers, de flottants ou de doubles uniquement, le troisième argument peut être n'importe quelle chaîne aléatoire. Si tous les objets ne sont pas de la même classe, la liste d'origine est renvoyée. Seules les listes contenant un maximum de 1 000 objets sont prises en charge. Voici un exemple d'utilisation de cet utilitaire :   

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

# Assistants cartographiques dans \$1util.map
<a name="utility-helpers-in-map"></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)

 `$util.map`contient des méthodes destinées à faciliter les opérations cartographiques courantes, telles que la suppression ou la conservation d'éléments d'une carte pour filtrer les cas d'utilisation.

## Utilitaires cartographiques
<a name="utility-helpers-in-map-list"></a>

** `$util.map.copyAndRetainAllKeys(Map, List) : Map` **  
Effectue une copie superficielle de la première carte en ne conservant que les clés spécifiées dans la liste, si elles sont présentes. Toutes les autres clés sont supprimées de la copie.

** `$util.map.copyAndRemoveAllKeys(Map, List) : Map` **  
Effectue une copie superficielle de la première carte tout en supprimant toutes les entrées où la clé est spécifiée dans la liste, si elles sont présentes. Toutes les autres clés sont conservées dans la copie.

# Assistants DynamoDB dans \$1util.dynamodb
<a name="dynamodb-helpers-in-util-dynamodb"></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)

`$util.dynamodb`contient des méthodes d'assistance qui facilitent l'écriture et la lecture de données dans Amazon DynamoDB, telles que le mappage automatique des types et le formatage. Ces méthodes sont conçues pour mapper automatiquement les types primitifs et les listes au format d'entrée DynamoDB approprié, qui est `Map` un des formats. `{ "TYPE" : VALUE }`

Par exemple, auparavant, un modèle de mappage de demandes destiné à créer un nouvel élément dans DynamoDB aurait pu ressembler à ceci :

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

Si nous voulions ajouter des champs à l'objet, nous devrions mettre à jour la requête GraphQL dans le schéma, ainsi que le modèle de mappage de demande. Cependant, nous pouvons désormais restructurer notre modèle de mappage des demandes afin qu'il récupère automatiquement les nouveaux champs ajoutés dans notre schéma et les ajoute à DynamoDB avec les types appropriés :

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

Dans l'exemple précédent, nous utilisons l'`$util.dynamodb.toDynamoDBJson(...)`assistant pour prendre automatiquement l'identifiant généré et le convertir en représentation DynamoDB d'un attribut de chaîne. Nous prenons ensuite tous les arguments, les convertissons en leurs représentations DynamoDB et les affichons dans `attributeValues` le champ du modèle.

Chaque assistant possède deux versions : une version qui renvoie un objet (par exemple, `$util.dynamodb.toString(...)`) et une version qui renvoie l'objet en tant que chaîne JSON (par exemple, `$util.dynamodb.toStringJson(...)`). Dans l'exemple précédent, nous avons utilisé la version qui renvoie les données sous la forme d'une chaîne JSON. Si vous souhaitez manipuler l'objet avant qu'il ne soit utilisé dans le modèle, vous pouvez choisir à la place de renvoyer un objet :

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

Dans l'exemple précédent, nous retournons les arguments convertis comme map au lieu d'une chaîne JSON, ajoutons les champs `version` et `timestamp` avant de les exporter vers le champ `attributeValues` du modèle à l'aide de `$util.toJson(...)`.

La version JSON de chacun des assistants est équivalente à l'encapsulage de la version autre que la version JSON dans `$util.toJson(...)`. Par exemple, les instructions suivantes sont exactement identiques :

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

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

### Liste des utilitaires de ToDynamoDB
<a name="utility-helpers-in-toDynamoDB-list"></a>

** `$util.dynamodb.toDynamoDB(Object) : Map` **  
Outil général de conversion d'objets pour DynamoDB qui convertit les objets d'entrée en une représentation DynamoDB appropriée. La façon dont il représente certains types est clairement arrêtée : par exemple, il utilise les listes (« L ») plutôt que les ensembles (« SS », « NS », « BS »). Cela renvoie un objet qui décrit la valeur de l'attribut DynamoDB.  
**Exemple de chaîne**  

```
Input:      $util.dynamodb.toDynamoDB("foo")
Output:     { "S" : "foo" }
```
**Exemple de numéro**  

```
Input:      $util.dynamodb.toDynamoDB(12345)
Output:     { "N" : 12345 }
```
**Exemple booléen**  

```
Input:      $util.dynamodb.toDynamoDB(true)
Output:     { "BOOL" : true }
```
**Exemple de liste**  

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

```
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`** **  
Identique à la valeur de l'attribut DynamoDB`$util.dynamodb.toDynamoDB(Object) : Map`, mais renvoie la valeur de l'attribut DynamoDB sous forme de chaîne codée JSON.

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

### Liste des utilitaires ToString
<a name="utility-helpers-in-toString-list"></a>

****`$util.dynamodb.toString(String) : String`** **  
Convertit une chaîne d'entrée au format de chaîne DynamoDB. Cela renvoie un objet qui décrit la valeur de l'attribut DynamoDB.  

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

** `$util.dynamodb.toStringJson(String) : Map` **  
Identique à la valeur de l'attribut DynamoDB`$util.dynamodb.toString(String) : String`, mais renvoie la valeur de l'attribut DynamoDB sous forme de chaîne codée JSON.

** `$util.dynamodb.toStringSet(List<String>) : Map` **  
Convertit une liste contenant des chaînes au format de jeu de chaînes DynamoDB. Cela renvoie un objet qui décrit la valeur de l'attribut DynamoDB.  

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

** `$util.dynamodb.toStringSetJson(List<String>) : String` **  
Identique à la valeur de l'attribut DynamoDB`$util.dynamodb.toStringSet(List<String>) : Map`, mais renvoie la valeur de l'attribut DynamoDB sous forme de chaîne codée JSON.

## Utils ToNumber
<a name="utility-helpers-in-toNumber"></a>

### Liste des utilitaires ToNumber
<a name="utility-helpers-in-toNumber-list"></a>

** `$util.dynamodb.toNumber(Number) : Map` **  
Convertit un nombre au format numérique DynamoDB. Cela renvoie un objet qui décrit la valeur de l'attribut DynamoDB.  

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

** `$util.dynamodb.toNumberJson(Number) : String` **  
Identique à la valeur de l'attribut DynamoDB`$util.dynamodb.toNumber(Number) : Map`, mais renvoie la valeur de l'attribut DynamoDB sous forme de chaîne codée JSON.

** `$util.dynamodb.toNumberSet(List<Number>) : Map` **  
Convertit une liste de nombres au format d'ensemble de numéros DynamoDB. Cela renvoie un objet qui décrit la valeur de l'attribut DynamoDB.  

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

** `$util.dynamodb.toNumberSetJson(List<Number>) : String` **  
Identique à la valeur de l'attribut DynamoDB`$util.dynamodb.toNumberSet(List<Number>) : Map`, mais renvoie la valeur de l'attribut DynamoDB sous forme de chaîne codée JSON.

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

### Liste des utilitaires ToBinary
<a name="utility-helpers-in-toBinary-list"></a>

** `$util.dynamodb.toBinary(String) : Map` **  
Convertit les données binaires codées sous forme de chaîne base64 au format binaire DynamoDB. Cela renvoie un objet qui décrit la valeur de l'attribut DynamoDB.  

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

** `$util.dynamodb.toBinaryJson(String) : String` **  
Identique à la valeur de l'attribut DynamoDB`$util.dynamodb.toBinary(String) : Map`, mais renvoie la valeur de l'attribut DynamoDB sous forme de chaîne codée JSON.

** `$util.dynamodb.toBinarySet(List<String>) : Map` **  
Convertit une liste de données binaires codées sous forme de chaînes base64 au format d'ensemble binaire DynamoDB. Cela renvoie un objet qui décrit la valeur de l'attribut DynamoDB.  

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

** `$util.dynamodb.toBinarySetJson(List<String>) : String` **  
Identique à la valeur de l'attribut DynamoDB`$util.dynamodb.toBinarySet(List<String>) : Map`, mais renvoie la valeur de l'attribut DynamoDB sous forme de chaîne codée JSON.

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

### Liste des utilitaires ToBoolean
<a name="utility-helpers-in-toBoolean-list"></a>

** `$util.dynamodb.toBoolean(Boolean) : Map` **  
Convertit un booléen au format booléen DynamoDB approprié. Cela renvoie un objet qui décrit la valeur de l'attribut DynamoDB.  

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

** `$util.dynamodb.toBooleanJson(Boolean) : String` **  
Identique à la valeur de l'attribut DynamoDB`$util.dynamodb.toBoolean(Boolean) : Map`, mais renvoie la valeur de l'attribut DynamoDB sous forme de chaîne codée JSON.

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

### Liste des utilitaires ToNull
<a name="utility-helpers-in-toNull-list"></a>

** `$util.dynamodb.toNull() : Map` **  
Renvoie une valeur nulle au format DynamoDB nul. Cela renvoie un objet qui décrit la valeur de l'attribut DynamoDB.  

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

** `$util.dynamodb.toNullJson() : String` **  
Identique à la valeur de l'attribut DynamoDB`$util.dynamodb.toNull() : Map`, mais renvoie la valeur de l'attribut DynamoDB sous forme de chaîne codée JSON.

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

### Liste des utilitaires ToList
<a name="utility-helpers-in-toList-list"></a>

****`$util.dynamodb.toList(List) : Map`** **  
Convertit une liste d'objets au format de liste DynamoDB. Chaque élément de la liste est également converti au format DynamoDB approprié. La façon dont il représente certains objets imbriqués est clairement arrêtée : par exemple, il utilise les listes (« L ») plutôt que les ensembles (« SS », « NS », « BS »). Cela renvoie un objet qui décrit la valeur de l'attribut DynamoDB.  

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

** `$util.dynamodb.toListJson(List) : String` **  
Identique à la valeur de l'attribut DynamoDB`$util.dynamodb.toList(List) : Map`, mais renvoie la valeur de l'attribut DynamoDB sous forme de chaîne codée JSON.

## Utilitaires TomaP
<a name="utility-helpers-in-toMap"></a>

### Liste des utilitaires de TomaP
<a name="utility-helpers-in-toMap-list"></a>

** `$util.dynamodb.toMap(Map) : Map` **  
Convertit une carte au format de carte DynamoDB. Chaque valeur de la carte est également convertie au format DynamoDB approprié. La façon dont il représente certains objets imbriqués est clairement arrêtée : par exemple, il utilise les listes (« L ») plutôt que les ensembles (« SS », « NS », « BS »). Cela renvoie un objet qui décrit la valeur de l'attribut 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` **  
Identique à la valeur de l'attribut DynamoDB`$util.dynamodb.toMap(Map) : Map`, mais renvoie la valeur de l'attribut DynamoDB sous forme de chaîne codée JSON.

** `$util.dynamodb.toMapValues(Map) : Map` **  
Crée une copie de la carte dans laquelle chaque valeur a été convertie au format DynamoDB approprié. La façon dont il représente certains objets imbriqués est clairement arrêtée : par exemple, il utilise les listes (« L ») plutôt que les ensembles (« SS », « NS », « BS »).  

```
Input:      $util.dynamodb.toMapValues({ "foo": "bar", "baz" : 1234, "beep": [ "boop"] })
Output:     {
               "foo"  : { "S" : "bar" },
               "baz"  : { "N" : 1234 },
               "beep" : {
                   "L" : [
                       { "S" : "boop" }
                   ]
               }
           }
```
Cela est légèrement différent du fait `$util.dynamodb.toMap(Map) : Map` qu'il renvoie uniquement le contenu de la valeur d'attribut DynamoDB, mais pas la valeur d'attribut complète elle-même. Par exemple, les instructions suivantes sont exactement identiques :  

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

** `$util.dynamodb.toMapValuesJson(Map) : String` **  
Identique à la valeur de l'attribut DynamoDB`$util.dynamodb.toMapValues(Map) : Map`, mais renvoie la valeur de l'attribut DynamoDB sous forme de chaîne codée JSON.

## Utilitaires de l'objet S3
<a name="utility-helpers-in-S3Object"></a>

### Liste des utilitaires de S3Object
<a name="utility-helpers-in-S3Object-list"></a>

** `$util.dynamodb.toS3Object(String key, String bucket, String region) : Map` **  
Convertit la clé, le compartiment et la région en représentation de l'objet DynamoDB S3. Cela renvoie un objet qui décrit la valeur de l'attribut 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` **  
Identique à la valeur de l'attribut DynamoDB`$util.dynamodb.toS3Object(String key, String bucket, String region) : Map`, mais renvoie la valeur de l'attribut DynamoDB sous forme de chaîne codée JSON.

** `$util.dynamodb.toS3Object(String key, String bucket, String region, String version) : Map` **  
Convertit la clé, le compartiment, la région et la version facultative en représentation de l'objet DynamoDB S3. Cela renvoie un objet qui décrit la valeur de l'attribut 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` **  
Identique à la valeur de l'attribut DynamoDB`$util.dynamodb.toS3Object(String key, String bucket, String region, String version) : Map`, mais renvoie la valeur de l'attribut DynamoDB sous forme de chaîne codée JSON.

** `$util.dynamodb.fromS3ObjectJson(String) : Map` **  
Accepte la valeur de chaîne d'un objet DynamoDB S3 et renvoie une carte contenant la clé, le compartiment, la région et la version facultative.  

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

# Assistants Amazon RDS dans \$1util.rds
<a name="rds-helpers-in-util-rds"></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)

`$util.rds`contient des méthodes d'assistance qui mettent en forme les opérations Amazon RDS en supprimant les données superflues dans les résultats de résultat.

## Liste des utilitaires de \$1util.rds
<a name="rds-helpers-in-util-rds-list"></a>

****`$util.rds.toJsonString(String serializedSQLResult): String`****  
Renvoie un `String` en transformant le format de résultat brut des opérations de l'API de données Amazon Relational Database Service (Amazon RDS) sous forme de chaînes en une chaîne plus concise. La chaîne renvoyée est une liste sérialisée d'enregistrements SQL du jeu de résultats. Chaque enregistrement est représenté sous la forme d'un ensemble de paires clé-valeur. Les clés sont les noms de colonnes correspondantes.  
Si l'instruction correspondante dans l'entrée était une requête SQL qui provoque une mutation (par exemple INSERT, UPDATE, DELETE), une liste vide est renvoyée. Par exemple, la requête `select * from Books limit 2` fournit le résultat brut de l'opération Amazon RDS Data :  

```
{
    "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`C'est :  

```
[
  {
    "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`****  
C'est la même chose que`util.rds.toJsonString`, mais le résultat est un JSON`Object`.

# assistants HTTP dans \$1util.http
<a name="http-helpers-in-utils-http"></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)

L'`$util.http`utilitaire fournit des méthodes d'assistance que vous pouvez utiliser pour gérer les paramètres des requêtes HTTP et pour ajouter des en-têtes de réponse.

## Liste des utilitaires de \$1util.http
<a name="http-helpers-in-utils-http-list"></a>

** `$util.http.copyHeaders(Map) : Map` **  
Copie les en-têtes de la carte, à l'exception des en-têtes HTTP restreints suivants :  
+ transfer-encoding
+ connection
+ host
+ expect
+ keep-alive
+ upgrade
+ proxy-authenticate
+ proxy-authorization
+ te
+ content-length
Vous pouvez utiliser cet utilitaire pour transférer les en-têtes de requête vers votre point de terminaison HTTP en aval.  

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

**\$1util.http. addResponseHeader(Chaîne, objet)**  
Ajoute un seul en-tête personnalisé avec le nom (`String`) et la valeur (`Object`) de la réponse. Les limites suivantes s'appliquent :  
+ Outre la liste des en-têtes restreints pour`copyHeaders(Map)`, les noms d'en-têtes ne peuvent correspondre à aucun des éléments suivants :
  + 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
+ Les noms d'en-tête ne peuvent pas commencer par les préfixes restreints `x-amzn-` ou`x-amz-`.
+ La taille des en-têtes de réponse personnalisés ne peut pas dépasser 4 Ko. Cela inclut les noms et les valeurs des en-têtes.
+ Vous devez définir chaque en-tête de réponse une fois par opération GraphQL. Toutefois, si vous définissez plusieurs fois un en-tête personnalisé portant le même nom, la définition la plus récente apparaît dans la réponse. Tous les en-têtes sont pris en compte dans la limite de taille d'en-tête, quel que soit leur nom.
+ Les en-têtes dont le nom est vide ou restreint `(String)` ou dont la valeur est nulle `(Object)` seront ignorés et produiront une `ResponseHeaderError` erreur qui sera ajoutée à la `errors` sortie de l'opération.

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

****`$util.http.addResponseHeaders(Map)`****  
Ajoute plusieurs en-têtes de réponse à la réponse à partir de la carte de noms `(String)` et de valeurs `(Object)` spécifiée. Les mêmes limites répertoriées pour la `addResponseHeader(String, Object)` méthode s'appliquent également à cette méthode.  

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

# assistants XML dans \$1util.xml
<a name="xml-helpers-in-utils-xml"></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)

`$util.xml`contient des méthodes d'assistance qui peuvent faciliter la traduction des réponses XML en JSON ou en dictionnaire.

## Liste des utilitaires de \$1util.xml
<a name="xml-helpers-in-utils-xml-list"></a>

****`$util.xml.toMap(String) : Map`****  
Convertit une chaîne XML en dictionnaire.  

```
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`****  
Convertit une chaîne XML en chaîne JSON. Ceci est similaire à *TomAp*, sauf que la sortie est une chaîne. Cela est utile si vous souhaitez convertir et renvoyer directement la réponse XML à partir d'un objet HTTP vers JSON.

****`$util.xml.toJsonString(String, Boolean) : String`****  
Convertit une chaîne XML en chaîne JSON avec un paramètre booléen facultatif pour déterminer si vous souhaitez coder le JSON par chaîne.

# Aides à la transformation dans \$1util.transform
<a name="transformation-helpers-in-utils-transform"></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)

`$util.transform`contient des méthodes d'assistance qui facilitent l'exécution d'opérations complexes sur des sources de données, telles que les opérations de filtrage Amazon DynamoDB.

## Aides à la transformation
<a name="transformation-helpers-conversions"></a>

### Liste des outils d'aide à la transformation
<a name="transformation-helpers-in-utils-transform-list"></a>

****`$util.transform.toDynamoDBFilterExpression(Map) : Map`****  
Convertit une chaîne d'entrée en une expression de filtre à utiliser avec 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`****  
Convertit l'entrée donnée en son expression OpenSearch Query DSL équivalente, en la renvoyant sous forme de chaîne 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"
                    }
                  }
              ]
            }
          }
      ]
    }
}
```
L'opérateur par défaut est supposé être AND.

## Filtres d'abonnement pour les aides à la transformation
<a name="transformation-helpers-conversions-subscription-filters"></a>

### Transformation Helpers (abonnement, filtres, liste d'utilitaires)
<a name="transformation-helpers-in-utils-transform-list"></a>

****`$util.transform.toSubscriptionFilter(Map) : Map`****  
Convertit un objet `Map` d'entrée en objet d'`SubscriptionFilter`expression. La `$util.transform.toSubscriptionFilter` méthode est utilisée comme entrée dans l'`$extensions.setSubscriptionFilter()`extension. Pour plus d'informations, consultez la section [Extensions](https://docs.aws.amazon.com/appsync/latest/devguide/extensions).

****`$util.transform.toSubscriptionFilter(Map, List) : Map`****  
Convertit un objet `Map` d'entrée en objet d'`SubscriptionFilter`expression. La `$util.transform.toSubscriptionFilter` méthode est utilisée comme entrée dans l'`$extensions.setSubscriptionFilter()`extension. Pour plus d'informations, consultez la section [Extensions](https://docs.aws.amazon.com/appsync/latest/devguide/extensions).  
Le premier argument est l'objet `Map` d'entrée converti en objet d'`SubscriptionFilter`expression. Le deuxième argument est un nom `List` de champ qui est ignoré dans le premier objet `Map` d'entrée lors de la construction de l'objet `SubscriptionFilter` d'expression.

****`$util.transform.toSubscriptionFilter(Map, List, Map) : Map`****  
Convertit un objet `Map` d'entrée en objet d'`SubscriptionFilter`expression. La `$util.transform.toSubscriptionFilter` méthode est utilisée comme entrée dans l'`$extensions.setSubscriptionFilter()`extension. Pour plus d'informations, consultez la section [Extensions](https://docs.aws.amazon.com/appsync/latest/devguide/extensions).   
Le premier argument est l'objet `Map` d'entrée converti en objet d'`SubscriptionFilter`expression, le deuxième argument est un nom `List` de champ qui sera ignoré dans le premier objet `Map` d'entrée, et le troisième argument est un objet `Map` d'entrée soumis à des règles strictes qui est inclus lors de la construction de l'objet `SubscriptionFilter` d'expression. Ces règles strictes sont incluses dans l'objet `SubscriptionFilter` d'expression de telle sorte qu'au moins l'une des règles soit satisfaite pour passer le filtre d'abonnement.

## Arguments du filtre d'abonnement
<a name="subscription-filter-arguments"></a>

Le tableau suivant explique comment les arguments des utilitaires suivants sont définis :
+ `$util.transform.toSubscriptionFilter(Map) : Map`
+ `$util.transform.toSubscriptionFilter(Map, List) : Map`
+ `$util.transform.toSubscriptionFilter(Map, List, Map) : Map`

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

L'argument 1 est un `Map` objet dont les valeurs clés sont les suivantes :
+ noms de champs
+ « et »
+ « ou »

Pour les noms de champs sous forme de clés, les conditions relatives aux entrées de ces champs sont sous la forme de`"operator" : "value"`. 

L'exemple suivant montre comment ajouter des entrées au `Map` :

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

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

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

Lorsqu'un champ comporte au moins deux conditions, toutes ces conditions sont considérées comme utilisant l'opération OR.

L'entrée `Map` peut également comporter des touches « et » et « ou », ce qui implique que toutes les entrées qu'elles contiennent doivent être jointes en utilisant la logique AND ou OR en fonction de la clé. Les valeurs clés « et » et « ou » supposent un ensemble de conditions.

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

Notez que vous pouvez imbriquer « et » et « ou ». C'est-à-dire que vous pouvez avoir imbriqué « et » /"ou » dans un autre bloc « et » /"ou ». Toutefois, cela ne fonctionne pas pour les champs simples.

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

L'exemple suivant montre une entrée de l'*argument 1* utilisant`$util.transform.toSubscriptionFilter(Map) : Map`.

**Entrée (s)**

Argument 1 : Carte :

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

**Sortie**

Le résultat est un `Map` objet :

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

L'argument 2 contient des noms `List` de champs qui ne doivent pas être pris en compte dans l'entrée `Map` (argument 1) lors de la construction de l'objet `SubscriptionFilter` d'expression. Ils `List` peuvent également être vides.

L'exemple suivant montre les entrées de l'argument 1 et de l'argument 2 en utilisant`$util.transform.toSubscriptionFilter(Map, List) : Map`.

**Entrée (s)**

Argument 1 : Carte :

```
{

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

Argument 2 : Liste :

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

**Sortie**

Le résultat est un `Map` objet :

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

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

L'argument 3 est un `Map` objet dont les noms de champs sont des valeurs clés (il ne peut pas y avoir « et » ou « ou »). Pour les noms de champs sous forme de clés, les conditions relatives à ces champs sont des entrées sous la forme de`"operator" : "value"`. Contrairement à l'argument 1, l'argument 3 ne peut pas avoir plusieurs conditions dans la même clé. De plus, l'argument 3 ne contient pas de clause « et » ou « ou », il n'y a donc aucune imbrication non plus.

L'argument 3 représente une liste de règles strictes, qui sont ajoutées à l'objet `SubscriptionFilter` d'expression afin qu'**au moins l'une** de ces conditions soit remplie pour passer le filtre.

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

L'exemple suivant montre les entrées de l'*argument 1*, de l'*argument 2* et de l'*argument 3* en utilisant`$util.transform.toSubscriptionFilter(Map, List, Map) : Map`.

**Entrée (s)**

Argument 1 : Carte :

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

Argument 2 : Liste :

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

Argument 3 : Carte :

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

**Sortie**

Le résultat est un `Map` objet :

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

------

# Assistants mathématiques dans \$1util.math
<a name="math-helpers-in-util-math"></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)

 `$util.math`contient des méthodes pour faciliter les opérations mathématiques courantes. 

## Liste des utilitaires de \$1util.math
<a name="math-helpers-in-util-math-list"></a>

** `$util.math.roundNum(Double) : Integer` **  
Prend un double et l'arrondit à l'entier le plus proche. 

** `$util.math.minVal(Double, Double) : Double` **  
Prend deux doubles et renvoie la valeur minimale entre les deux doubles.

** `$util.math.maxVal(Double, Double) : Double` **  
Prend deux doubles et renvoie la valeur maximale entre les deux doubles.

** `$util.math.randomDouble() : Double` **  
Renvoie un double aléatoire compris entre 0 et 1.  
Cette fonction ne doit pas être utilisée pour tout ce qui nécessite un caractère aléatoire à entropie élevé (par exemple, la cryptographie).

** `$util.math.randomWithinRange(Integer, Integer) : Integer` **  
Renvoie une valeur entière aléatoire comprise dans la plage spécifiée, le premier argument indiquant la valeur inférieure de la plage et le second la valeur supérieure de la plage.   
Cette fonction ne doit pas être utilisée pour tout ce qui nécessite un caractère aléatoire à entropie élevé (par exemple, la cryptographie).

# assistants de chaîne dans \$1util.str
<a name="str-helpers-in-util-str"></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)

 `$util.str`contient des méthodes pour faciliter les opérations courantes sur les chaînes de caractères. 

## Liste des utilitaires de \$1util.str
<a name="str-helpers-in-util-str-list"></a>

** `$util.str.toUpper(String) : String` **  
Prend une chaîne et la convertit pour qu'elle soit entièrement en majuscules. 

** `$util.str.toLower(String) : String` **  
Prend une chaîne de caractères et la convertit en minuscules.

** `$util.str.toReplace(String, String, String) : String` **  
Remplace une sous-chaîne dans une chaîne par une autre chaîne. Le premier argument indique la chaîne sur laquelle effectuer l'opération de remplacement. Le deuxième argument indique la sous-chaîne à remplacer. Le troisième argument indique la chaîne par laquelle remplacer le deuxième argument. Voici un exemple d'utilisation de cet utilitaire :   

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

** `$util.str.normalize(String, String) : String` **  
Normalise une chaîne à l'aide de l'une des quatre formes de normalisation Unicode : NFC, NFD, NFKC ou NFKD. Le premier argument est la chaîne à normaliser. Le deuxième argument est « nfc », « nfd », « nfkc » ou « nfkd », spécifiant le type de normalisation à utiliser pour le processus de normalisation.

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