View a markdown version of this page

Migration de VTL vers In JavaScript AWS AppSync - 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.

Migration de VTL vers In JavaScript AWS AppSync

AWS AppSync vous permet d'écrire votre logique métier pour vos résolveurs et fonctions à l'aide de VTL ou. JavaScript Dans les deux langues, vous écrivez une logique qui indique au AWS AppSync service comment interagir avec vos sources de données. Avec VTL, vous écrivez des modèles de mappage qui doivent être évalués selon une JSON-encoded chaîne valide. Avec JavaScript, vous écrivez des gestionnaires de requêtes et de réponses qui renvoient des objets. Vous ne renvoyez pas de JSON-encoded chaîne.

Par exemple, prenez le modèle de mappage VTL suivant pour obtenir un article Amazon DynamoDB :

{ "operation": "GetItem", "key": { "id": $util.dynamodb.toDynamoDBJson($ctx.args.id), } }

L'utilitaire $util.dynamodb.toDynamoDBJson renvoie une JSON-encoded chaîne. Si $ctx.args.id cette valeur est définie sur<id>, le modèle est évalué selon une JSON-encoded chaîne valide :

{ "operation": "GetItem", "key": { "id": {"S": "<id>"}, } }

Lorsque vous travaillez avec JavaScript, vous n'avez pas besoin d'imprimer des JSON-encoded chaînes brutes dans votre code, et l'utilisation d'un utilitaire similaire n'toDynamoDBJsonest pas nécessaire. Voici un exemple équivalent du modèle de mappage ci-dessus :

import { util } from '@aws-appsync/utils'; export function request(ctx) { return { operation: 'GetItem', key: {id: util.dynamodb.toDynamoDB(ctx.args.id)} }; }

Une alternative consiste à utiliserutil.dynamodb.toMapValues, qui est l'approche recommandée pour gérer un objet de valeurs :

import { util } from '@aws-appsync/utils'; export function request(ctx) { return { operation: 'GetItem', key: util.dynamodb.toMapValues({ id: ctx.args.id }), }; }

Cela permet d'évaluer :

{ "operation": "GetItem", "key": { "id": { "S": "<id>" } } }
Note

Nous vous recommandons d'utiliser le module DynamoDB avec les sources de données DynamoDB :

import * as ddb from '@aws-appsync/utils/dynamodb' export function request(ctx) { ddb.get({ key: { id: ctx.args.id } }) }

Autre exemple, prenez le modèle de mappage suivant pour placer un élément dans une source de données Amazon DynamoDB :

{ "operation" : "PutItem", "key" : { "id": $util.dynamodb.toDynamoDBJson($util.autoId()), }, "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args) }

Lors de l'évaluation, cette chaîne de modèle de mappage doit produire une JSON-encoded chaîne valide. Lors de l'utilisation JavaScript, votre code renvoie directement l'objet de la requête :

import { util } from '@aws-appsync/utils'; export function request(ctx) { const { id = util.autoId(), ...values } = ctx.args; return { operation: 'PutItem', key: util.dynamodb.toMapValues({ id }), attributeValues: util.dynamodb.toMapValues(values), }; }

qui évalue à :

{ "operation": "PutItem", "key": { "id": { "S": "2bff3f05-ff8c-4ed8-92b4-767e29fc4e63" } }, "attributeValues": { "firstname": { "S": "Shaggy" }, "age": { "N": 4 } } }
Note

Nous vous recommandons d'utiliser le module DynamoDB avec les sources de données DynamoDB :

import { util } from '@aws-appsync/utils' import * as ddb from '@aws-appsync/utils/dynamodb' export function request(ctx) { const { id = util.autoId(), ...item } = ctx.args return ddb.put({ key: { id }, item }) }