

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.

# Configuration de la complexité de l'exécution, de la profondeur des requêtes et de l'introspection de GraphQL avec AWS AppSync
<a name="configuration-limits"></a>

AWS AppSync vous permet d'activer ou de désactiver les fonctionnalités d'introspection et de définir des limites au nombre de niveaux imbriqués et de résolveurs dans une seule requête.

## Utilisation de la fonction d'introspection
<a name="configuration-limits-introspection"></a>

**Astuce**  
[Pour plus d'informations sur l'introspection dans GraphQL, consultez cet article sur le site Web de la fondation GraphQL.](https://graphql.org/learn/introspection/)

Par défaut, GraphQL vous permet d'utiliser l'introspection pour interroger le schéma lui-même afin de découvrir ses types, ses champs, ses requêtes, ses mutations, ses abonnements, etc. Il s'agit d'une fonctionnalité importante pour apprendre comment les données sont mises en forme et traitées par votre service GraphQL. Cependant, il y a certaines choses à prendre en compte lorsqu'il s'agit d'introspection. Vous avez peut-être un cas d'utilisation qui bénéficierait de la désactivation de l'introspection, par exemple un cas dans lequel les noms de champs peuvent être sensibles ou masqués ou dans le cas où le schéma complet de l'API est destiné à être laissé sans documentation pour les consommateurs. Dans ces cas, la publication de données de schéma par introspection peut entraîner la fuite de données volontairement privées.

Pour éviter que cela ne se produise, vous pouvez désactiver l'introspection. Cela empêchera les parties non autorisées d'utiliser les champs d'introspection de votre schéma. Cependant, il est important de noter que l'introspection est utile aux équipes de développement pour savoir comment les données de leur service sont traitées. En interne, il peut être utile de garder l'introspection activée tout en la désactivant dans le code de production comme couche de sécurité supplémentaire. Une autre façon de gérer cela consiste à ajouter une méthode d'autorisation, qui fournit AWS AppSync également. Pour plus d’informations, consultez [Autorisation ](https://docs.aws.amazon.com/appsync/latest/devguide/security-authz.html).

AWS AppSync vous permet d'activer ou de désactiver l'introspection au niveau de l'API. Pour activer ou désactiver l'introspection, procédez comme suit :

1. Connectez-vous à la [AppSyncconsole AWS Management Console et ouvrez-la](https://console.aws.amazon.com/appsync/).

1. Sur la **APIs**page, choisissez le nom d'une API GraphQL.

1. Sur la page d'accueil de votre API, dans le volet de navigation, sélectionnez **Paramètres**.

1. Dans les **configurations d'API**, choisissez **Modifier**.

1. Sous **Requêtes d'introspection**, procédez comme suit :

   1. Activez ou désactivez l'**option Activer les requêtes d'introspection.**

1. Choisissez **Enregistrer**.

Lorsque l'introspection est activée (comportement par défaut), l'utilisation du système d'introspection fonctionnera normalement. Par exemple, l'image ci-dessous montre un `__schema` champ traitant tous les types disponibles dans le schéma :

![\[GraphQL schema explorer showing query structure with types and name fields.\]](http://docs.aws.amazon.com/fr_fr/appsync/latest/devguide/images/introspection-enabled.png)


Lorsque vous désactivez cette fonctionnalité, une erreur de validation apparaîtra plutôt dans la réponse :

![\[GraphQL query editor showing a validation error for undefined 'types' field in '_Schema'.\]](http://docs.aws.amazon.com/fr_fr/appsync/latest/devguide/images/introspection-disabled.png)


## Configuration des limites de profondeur des requêtes
<a name="configuration-limits-depth"></a>

Il peut arriver que vous souhaitiez contrôler de manière plus précise le fonctionnement de l'API au cours d'une opération. L'un de ces contrôles consiste à ajouter une limite au nombre de niveaux imbriqués qu'une requête peut traiter. Par défaut, les requêtes peuvent traiter un nombre illimité de niveaux imbriqués. Le fait de limiter les requêtes à un certain nombre de niveaux imbriqués peut avoir des répercussions sur les performances et la flexibilité de votre projet. Prenons la requête suivante :

```
query MyQuery {
  L1: nextLayer {
    L2: nextLayer {
      L3: nextLayer {
        L4: value
      }
    }
  }
}
```

Votre projet peut nécessiter de limiter les requêtes à `L1` ou dans un `L2` but précis. Par défaut, l'intégralité de la requête de `L1` à `L4` serait traitée sans aucun moyen de contrôle. En définissant une limite, vous pouvez empêcher les requêtes d'accéder à tout ce qui dépasse le niveau spécifié.

Pour ajouter une limite de profondeur de requête, procédez comme suit :

1. Connectez-vous à la [AppSyncconsole AWS Management Console et ouvrez-la](https://console.aws.amazon.com/appsync/).

1. Sur la **APIs**page, choisissez le nom d'une API GraphQL.

1. Sur la page d'accueil de votre API, dans le volet de navigation, sélectionnez **Paramètres**.

1. Dans les **configurations d'API**, choisissez **Modifier**.

1. Sous **Profondeur de la requête**, procédez comme suit :

   1. Activez ou désactivez l'**option Activer la profondeur des requêtes**.

   1. Dans **Profondeur maximale**, définissez la limite de profondeur. Cela peut être compris entre `1` et`75`.

1. Choisissez **Enregistrer**.

Lorsqu'une limite est définie, le dépassement de sa limite supérieure entraîne une `QueryDepthLimitReached` erreur. Par exemple, l'image ci-dessous montre une requête dont la limite de `2` profondeur dépasse la limite jusqu'aux troisième (`L3`) et quatrième (`L4`) niveaux :

![\[Query structure with nested layers L1, L2, L3, and L4, showing depth limit exceeded.\]](http://docs.aws.amazon.com/fr_fr/appsync/latest/devguide/images/query-depth-limit.jpg)


Notez que les champs peuvent toujours être marqués comme nullables ou non nullables dans le schéma. Si un champ non nullable reçoit une `QueryDepthLimitReached` erreur, cette erreur sera renvoyée au premier champ parent nullable. 

## Configuration des limites du nombre de résolveurs
<a name="configuration-limits-resolver-count"></a>

Vous pouvez également contrôler le nombre de résolveurs que chaque requête peut traiter. Tout comme la profondeur de la requête, vous pouvez définir une limite à ce montant. Prenez la requête suivante qui contient trois résolveurs :

```
query MyQuery {
  resolver1: resolver
  resolver2: resolver
  resolver3: resolver
}
```

Par défaut, chaque requête peut traiter jusqu'à 10 000 résolveurs. Dans l'exemple ci-dessus`resolver1`,`resolver2`, et `resolver3` seront traités. Cependant, votre projet peut nécessiter de limiter chaque requête à la gestion d'un ou deux résolveurs au total. En définissant une limite, vous pouvez indiquer à la requête de ne pas gérer de résolveur au-delà d'un certain nombre, comme le premier (`resolver1`) ou le second (`resolver2`) résolveur.

Pour ajouter une limite au nombre de résolveurs, procédez comme suit :

1. Connectez-vous à la [AppSyncconsole AWS Management Console et ouvrez-la](https://console.aws.amazon.com/appsync/).

1. Sur la **APIs**page, choisissez le nom d'une API GraphQL.

1. Sur la page d'accueil de votre API, dans le volet de navigation, sélectionnez **Paramètres**.

1. Dans les **configurations d'API**, choisissez **Modifier**.

1. Sous **Limite du nombre de résolveurs**, procédez comme suit :

   1. Activez **Activer le nombre de résolveurs**.

   1. Dans **Nombre maximal de résolveurs**, définissez la limite du nombre. Cela peut être compris entre `1` et`10000`.

1. Choisissez **Enregistrer**.

Tout comme la limite de profondeur de requête, le dépassement de la limite de résolution configurée entraîne la fin de la requête avec une `ResolverExecutionLimitReached` erreur sur les résolveurs supplémentaires. Dans l'image ci-dessous, une requête dont le nombre de résolveurs est limité à *2* essaie de traiter trois résolveurs. En raison de cette limite, le troisième résolveur génère une erreur et ne s'exécute pas.

![\[Query with three resolvers, showing error on third resolver due to execution limit reached.\]](http://docs.aws.amazon.com/fr_fr/appsync/latest/devguide/images/resolver-count-limit.jpg)
