View a markdown version of this page

Création de requêtes de base (VTL) - AWS AppSync GraphQL

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.

Création de requêtes de base (VTL)

Note

Nous prenons désormais en charge principalement le runtime APPSYNC_JS et sa documentation. Pensez à utiliser le moteur d'exécution APPSYNC_JS et ses guides ici. https://docs.aws.amazon.com/appsync/latest/devguide/configuring-resolvers-js.html

Les résolveurs GraphQL connectent les champs d'un schéma de type à une source de données. Les résolveurs sont le mécanisme par lequel les demandes sont traitées. AWS AppSync peut créer et connecter automatiquement des résolveurs à partir d'un schéma ou créer un schéma et connecter des résolveurs à partir d'une table existante sans avoir à écrire de code.

Résolveurs AWS AppSync utilisés JavaScript pour convertir une expression GraphQL dans un format utilisable par la source de données. Les modèles de mappage peuvent également être écrits dans le langage Apache Velocity Template Language (VTL) pour convertir une expression GraphQL dans un format utilisable par la source de données.

Cette section explique comment configurer les résolveurs à l'aide de VTL. Un guide de programmation de type didacticiel d'introduction pour l'écriture de résolveurs se trouve dans le guide de programmation du modèle de mappage Resolver, et les utilitaires d'assistance disponibles pour la programmation sont disponibles dans la référence contextuelle du modèle de mappage Resolver. AWS AppSync propose également des flux de test et de débogage intégrés que vous pouvez utiliser lorsque vous éditez ou créez en partant de zéro. Pour plus d'informations, voir Résolveurs de test et de débogage.

Nous vous recommandons de suivre ce guide avant d'essayer d'utiliser l'un des didacticiels susmentionnés.

Dans cette section, nous verrons comment créer un résolveur, ajouter un résolveur pour les mutations et utiliser des configurations avancées.

Créez votre premier résolveur

En suivant les exemples des sections précédentes, la première étape consiste à créer un résolveur pour votre Query type.

Console
  1. Connectez-vous à la AppSync console Console de gestion AWS et ouvrez-la.

    1. Dans le tableau de bord des API, choisissez votre API GraphQL.

    2. Dans la barre latérale, choisissez Schéma.

  2. Sur le côté droit de la page, il y a une fenêtre intitulée Résolveurs. Cette zone contient une liste des types et des champs tels que définis dans la fenêtre Schéma sur le côté gauche de la page. Vous pouvez associer des résolveurs à des champs. Par exemple, sous le type de requête, choisissez Joindre à côté du getTodos champ.

  3. Sur la page Créer un résolveur, choisissez la source de données que vous avez créée dans le guide Joindre une source de données. Dans la fenêtre Configurer les modèles de mappage, vous pouvez choisir les modèles de mappage de demandes et de réponses génériques à l'aide de la liste déroulante située à droite ou créer les vôtres.

    Note

    L'association d'un modèle de mappage de demandes à un modèle de mappage de réponses est appelée résolveur d'unités. Les résolveurs d'unités sont généralement destinés à effectuer des opérations par cœur ; nous vous recommandons de ne les utiliser que pour des opérations uniques avec un petit nombre de sources de données. Pour les opérations plus complexes, nous vous recommandons d'utiliser des résolveurs de pipeline, qui peuvent exécuter plusieurs opérations avec plusieurs sources de données de manière séquentielle.

    Pour plus d'informations sur la différence entre les modèles de mappage de demande et de réponse, voir Résolveurs https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-overview.html#unit-resolvers d'unités.

    Pour plus d'informations sur l'utilisation des résolveurs de pipeline, voir Résolveurs de pipeline.

  4. Pour les cas d'utilisation courants, la AWS AppSync console comporte des modèles intégrés que vous pouvez utiliser pour obtenir des éléments à partir de sources de données (par exemple, toutes les requêtes d'éléments, les recherches individuelles, etc.). Par exemple, sur la version simple du schéma de Designing your schema qui getTodos n'avait pas de pagination, le modèle de mappage des demandes pour répertorier les éléments est le suivant :

    { "version" : "2017-02-28", "operation" : "Scan" }
  5. Vous avez toujours besoin d'un modèle de mappage des réponses pour accompagner la demande. La console fournit un modèle par défaut avec la valeur de transmission suivante pour les listes :

    $util.toJson($ctx.result.items)

    Dans cet exemple, l'objet context (dont l'alias est $ctx) pour les listes d'éléments se présente sous la forme $context.result.items. Si votre opération GraphQL renvoie un seul élément, ce serait $context.result. AWS AppSync fournit des fonctions d'assistant pour les opérations courantes, notamment la fonction $util.toJson répertoriée précédemment, pour mettre correctement en forme les réponses. Pour obtenir la liste complète des fonctions, consultez la section Référence de l'utilitaire de modèle de mappage Resolver.

  6. Choisissez Save Resolver.

API
  1. Créez un objet résolveur en appelant l'CreateResolverAPI.

  2. Vous pouvez modifier les champs de votre résolveur en appelant l'UpdateResolverAPI.

CLI
  1. Créez un résolveur en exécutant la create-resolver commande.

    Vous devrez saisir 6 paramètres pour cette commande particulière :

    1. Celui api-id de votre API.

    2. Le type-name type que vous souhaitez modifier dans votre schéma. Dans l'exemple de la console, c'était le casQuery.

    3. Le field-name champ que vous souhaitez modifier dans votre type. Dans l'exemple de la console, c'était le casgetTodos.

    4. La source data-source-name de données que vous avez créée dans le guide Joindre une source de données.

    5. Lerequest-mapping-template, qui constitue le corps de la demande. Dans l'exemple de console, c'était :

      { "version" : "2017-02-28", "operation" : "Scan" }
    6. Leresponse-mapping-template, qui est le corps de la réponse. Dans l'exemple de console, c'était :

      $util.toJson($ctx.result.items)

    Un exemple de commande peut ressembler à ceci :

    aws appsync create-resolver --api-id abcdefghijklmnopqrstuvwxyz --type-name Query --field-name getTodos --data-source-name TodoTable --request-mapping-template "{ "version" : "2017-02-28", "operation" : "Scan", }" --response-mapping-template ""$"util.toJson("$"ctx.result.items)"

    Une sortie sera renvoyée dans la CLI. Voici un exemple :

    { "resolver": { "kind": "UNIT", "dataSourceName": "TodoTable", "requestMappingTemplate": "{ version : 2017-02-28, operation : Scan, }", "resolverArn": "arn:aws:appsync:us-west-2:107289374856:apis/abcdefghijklmnopqrstuvwxyz/types/Query/resolvers/getTodos", "typeName": "Query", "fieldName": "getTodos", "responseMappingTemplate": "$util.toJson($ctx.result.items)" } }
  2. Pour modifier les modèles de and/or mappage de champs d'un résolveur, exécutez la update-resolver commande.

    À l'exception du api-id paramètre, les paramètres utilisés dans la create-resolver commande seront remplacés par les nouvelles valeurs de la update-resolver commande.

Ajouter un résolveur pour les mutations

L'étape suivante consiste à créer un résolveur pour votre Mutation type.

Console
  1. Connectez-vous à la AppSync console Console de gestion AWS et ouvrez-la.

    1. Dans le tableau de bord des API, choisissez votre API GraphQL.

    2. Dans la barre latérale, choisissez Schéma.

  2. Sous le type de mutation, choisissez Joindre à côté du addTodo champ.

  3. Sur la page Créer un résolveur, choisissez la source de données que vous avez créée dans le guide Joindre une source de données.

  4. Dans la fenêtre Configurer les modèles de mappage, vous devez modifier le modèle de demande car il s'agit d'une mutation dans laquelle vous ajoutez un nouvel élément à DynamoDB. Utilisez le modèle de mappage de demande suivant :

    { "version" : "2017-02-28", "operation" : "PutItem", "key" : { "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id) }, "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) }
  5. AWS AppSync convertit automatiquement les arguments définis dans le addTodo champ de votre schéma GraphQL en opérations DynamoDB. L'exemple précédent stocke des enregistrements dans DynamoDB à l'aide d'une clé deid, qui est transmise par l'argument de mutation sous la forme. $ctx.args.id Tous les autres champs que vous passez sont automatiquement mappés aux attributs DynamoDB avec. $util.dynamodb.toMapValuesJson($ctx.args)

    Pour ce résolveur, utilisez ensuite le modèle de mappage de réponse suivant :

    $util.toJson($ctx.result)

    AWS AppSync prend également en charge les flux de travail de test et de débogage pour l'édition des résolveurs. Vous pouvez utiliser un objet context simulé pour afficher la valeur transformée du modèle avant l'appel. Le cas échéant, vous pouvez afficher l'intégralité de l'exécution de la requête sur une source de données de façon interactive lorsque vous exécutez une requête. Pour plus d'informations, consultez les sections Résolveurs de test et de débogage et Surveillance et journalisation.

  6. Choisissez Save Resolver.

API

Vous pouvez également le faire avec les API en utilisant les commandes de la section Créer votre premier résolveur et les détails des paramètres de cette section.

CLI

Vous pouvez également le faire dans la CLI en utilisant les commandes de la section Créer votre premier résolveur et les détails des paramètres de cette section.

À ce stade, si vous n'utilisez pas les résolveurs avancés, vous pouvez commencer à utiliser votre API GraphQL comme indiqué dans Utilisation de votre API.

Résolveurs avancés

Si vous suivez la section Avancé et que vous créez un exemple de schéma dans Designing your schema to do a paginated scan, utilisez plutôt le modèle de demande suivant pour le getTodos champ :

{ "version" : "2017-02-28", "operation" : "Scan", "limit": $util.defaultIfNull(${ctx.args.limit}, 20), "nextToken": $util.toJson($util.defaultIfNullOrBlank($ctx.args.nextToken, null)) }

Pour ce scénario de pagination, le mappage de réponse est plus qu'une simple transmission, car il doit contenir à la fois le curseur (afin que le client sache quelle est la prochaine page à démarrer) et le jeu de résultats. Le modèle de mappage est ainsi :

{ "todos": $util.toJson($context.result.items), "nextToken": $util.toJson($context.result.nextToken) }

Les champs du précédent modèle de mappage de réponse doivent correspondre aux champs définis dans votre type TodoConnection.

Dans le cas de relations dans lesquelles vous avez une Comments table et que vous résolvez le champ de commentaires sur le Todo type (qui renvoie un type de[Comment]), vous pouvez utiliser un modèle de mappage qui exécute une requête sur la deuxième table. Pour ce faire, vous devez déjà avoir créé une source de données pour le Comments tableau, comme indiqué dans Joindre une source de données.

Note

Nous utilisons une opération de requête sur une deuxième table à des fins d'illustration uniquement. Vous pouvez utiliser une autre opération contre DynamoDB à la place. En outre, vous pouvez extraire les données d'une autre source de données, telle qu' AWS Lambda Amazon OpenSearch Service, car la relation est contrôlée par votre schéma GraphQL.

Console
  1. Connectez-vous à la AppSync console Console de gestion AWS et ouvrez-la.

    1. Dans le tableau de bord des API, choisissez votre API GraphQL.

    2. Dans la barre latérale, choisissez Schéma.

  2. Dans le type Todo, choisissez Joindre à côté du comments champ.

  3. Sur la page Créer un résolveur, choisissez la source de données de votre tableau des commentaires. Le nom par défaut du tableau des commentaires dans les guides de démarrage rapide estAppSyncCommentTable, mais il peut varier en fonction du nom que vous lui avez donné.

  4. Ajoutez l'extrait suivant à votre modèle de mappage de demandes :

    { "version": "2017-02-28", "operation": "Query", "index": "todoid-index", "query": { "expression": "todoid = :todoid", "expressionValues": { ":todoid": { "S": $util.toJson($context.source.id) } } } }
  5. Le context.source fait référence à l'objet parent du champ actif en cours de résolution. Dans cet exemple, source.id fait référence à l'objet Todo individuel, qui est ensuite utilisé pour l'expression de la requête.

    Vous pouvez utiliser le modèle de mappage de réponse de transmission, comme suit :

    $util.toJson($ctx.result.items)
  6. Choisissez Save Resolver.

  7. Enfin, revenez sur la page Schéma de la console, attachez un résolveur au addComment champ et spécifiez la source de données pour la Comments table. Dans ce cas, le modèle de mappage de requête est un simple PutItem avec le todoid spécifique qui est commenté en tant qu'argument, mais vous utilisez l'utilitaire $utils.autoId() pour créer une clé de tri unique pour le commentaire de la façon suivante :

    { "version": "2017-02-28", "operation": "PutItem", "key": { "todoid": { "S": $util.toJson($context.arguments.todoid) }, "commentid": { "S": "$util.autoId()" } }, "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) }

    Utilisez un modèle de réponse de transmission comme suit :

    $util.toJson($ctx.result)
API

Vous pouvez également le faire avec les API en utilisant les commandes de la section Créer votre premier résolveur et les détails des paramètres de cette section.

CLI

Vous pouvez également le faire dans la CLI en utilisant les commandes de la section Créer votre premier résolveur et les détails des paramètres de cette section.