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)Nous prenons désormais principalement en charge le runtime APPSYNC _JS et sa documentation. Pensez à utiliser le runtime APPSYNC _JS et ses guides ici.
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 satisfaites. 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 que vous ayez à é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 de modèle Apache Velocity (VTL) pour convertir une expression GraphQL dans un format utilisable par la source de données.
Cette section vous montrera comment configurer les résolveurs à l'aide VTL de. Un guide de programmation de type didacticiel d'introduction à 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 se trouvent dans la référence contextuelle du modèle de mappage Resolver. AWS AppSync possède également des flux de test et de débogage intégrés que vous pouvez utiliser lorsque vous modifiez ou créez à partir de zéro. Pour plus d'informations, consultez la section Tester et déboguer les résolveurs.
Nous vous recommandons de suivre ce guide avant d'essayer d'utiliser l'un des didacticiels mentionnés ci-dessus.
Dans cette section, nous expliquerons 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 adapté à votre Query
type.
- Console
-
-
Connectez-vous à la AppSync console AWS Management Console et ouvrez-la.
-
Dans le APIstableau de bord, choisissez votre GraphQLAPI.
-
Dans la barre latérale, choisissez Schema.
-
Sur le côté droit de la page, il y a une fenêtre appelée Resolvers. Cette zone contient une liste des types et des champs tels que définis dans votre fenêtre de schéma sur le côté gauche de la page. Vous pouvez associer des résolveurs aux champs. Par exemple, sous le type de requête, choisissez Joindre à côté du getTodos
champ.
-
Sur la page Create Resolver, 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 à la fois les modèles de mappage de demande et de réponse génériques à l'aide de la liste déroulante de droite ou écrire le vôtre.
L'appariement d'un modèle de mappage de demande à un modèle de mappage de réponse est appelé résolveur d'unités. Les résolveurs d'unités sont généralement conçus pour effectuer des opérations par cœur ; nous recommandons de les utiliser uniquement pour des opérations uniques avec un petit nombre de sources de données. Pour les opérations plus complexes, nous 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 demandes et de réponses, consultez Unit Resolvers.
Pour plus d'informations sur l'utilisation des résolveurs de pipeline, consultez la section Résolveurs de pipeline.
-
Pour les cas d'utilisation courants, la AWS AppSync console possède 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 relatives aux articles, les recherches individuelles, etc.). Par exemple, dans la version simple du schéma de Designing your schema where getTodos
didn't have pagination, le modèle de mappage des demandes pour la liste des éléments est le suivant :
{
"version" : "2017-02-28",
"operation" : "Scan"
}
-
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 sera le cas. $context.result
AWS AppSync fournit des fonctions d'assistance pour les opérations courantes, telles que la $util.toJson
fonction répertoriée précédemment, afin de formater correctement les réponses. Pour une liste complète des fonctions, consultez la référence de l'utilitaire de modèle de mappage Resolver.
-
Choisissez Save Resolver.
- API
-
-
Créez un objet résolveur en appelant le CreateResolver
API.
-
Vous pouvez modifier les champs de votre résolveur en appelant le UpdateResolver
API.
- CLI
-
-
Créez un résolveur en exécutant la create-resolver
commande.
Vous devez saisir 6 paramètres pour cette commande particulière :
-
Le api-id
de votreAPI.
-
Le type-name
type que vous souhaitez modifier dans votre schéma. Dans l'exemple de console, c'était le casQuery
.
-
Le field-name
champ que vous souhaitez modifier dans votre type. Dans l'exemple de console, c'était le casgetTodos
.
-
La source data-source-name
de données que vous avez créée dans le guide Joindre une source de données.
-
Lerequest-mapping-template
, qui est le corps de la demande. Dans l'exemple de console, c'était :
{
"version" : "2017-02-28",
"operation" : "Scan"
}
-
Leresponse-mapping-template
, qui est le corps de la réponse. Dans l'exemple de console, c'était :
$util.toJson($ctx.result.items)
Voici un exemple de commande :
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 leCLI. 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)"
}
}
-
Pour modifier les champs et/ou les modèles de mappage 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 adapté à votre Mutation
type.
- Console
-
-
Connectez-vous à la AppSync console AWS Management Console et ouvrez-la.
-
Dans le APIstableau de bord, choisissez votre GraphQLAPI.
-
Dans la barre latérale, choisissez Schema.
-
Sous le type de mutation, choisissez Attacher à côté du addTodo
champ.
-
Sur la page Create Resolver, 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 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)
}
-
AWS AppSync convertit automatiquement les arguments définis dans le addTodo
champ à partir de votre schéma GraphQL en opérations DynamoDB. L'exemple précédent stocke les enregistrements dans DynamoDB à l'aide d'une clé id
de, qui est transmise par l'argument de mutation sous la forme. $ctx.args.id
Tous les autres champs que vous traversez 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 de 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 Tester et déboguer les résolveurs et Surveillance et journalisation.
-
Choisissez Save Resolver.
- API
-
Vous pouvez également le faire APIs en utilisant les commandes de la section Créez votre premier résolveur et les détails des paramètres de cette section.
- CLI
-
Vous pouvez également le faire dans le en CLI utilisant les commandes de la section Créez 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 Conception de votre schéma pour effectuer un scan paginé, 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 où 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 la Comments
table, comme indiqué dans la section Joindre une source de données.
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 sur 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
-
-
Connectez-vous à la AppSync console AWS Management Console et ouvrez-la.
-
Dans le APIstableau de bord, choisissez votre GraphQLAPI.
-
Dans la barre latérale, choisissez Schema.
-
Sous le type Todo, choisissez Joindre à côté du comments
champ.
-
Sur la page Créer un résolveur, choisissez la source de données de votre table de 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é.
-
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)
}
}
}
}
-
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)
-
Choisissez Save Resolver.
-
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 de 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 APIs en utilisant les commandes de la section Créez votre premier résolveur et les détails des paramètres de cette section.
- CLI
-
Vous pouvez également le faire dans le en CLI utilisant les commandes de la section Créez votre premier résolveur et les détails des paramètres de cette section.