从 VTL 迁移到 in JavaScript Amazon AppSync - Amazon AppSync GraphQL
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

从 VTL 迁移到 in JavaScript Amazon AppSync

Amazon AppSync 允许您使用 VTL 或为解析器和函数编写业务逻辑。 JavaScript使用这两种语言,您都可以编写逻辑来指导 Amazon AppSync 服务如何与您的数据源进行交互。在使用 VTL 时,您可以编写评估结果必须为有效 JSON 编码字符串的映射模板。使用 JavaScript,您可以编写返回对象的请求和响应处理程序。您不会返回 JSON 编码的字符串。

例如,采用以下 VTL 映射模板以获取 Amazon DynamoDB 项目:

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

$util.dynamodb.toDynamoDBJson 实用程序返回 JSON 编码的字符串。如果 $ctx.args.id 设置为 <id>,则模板评估结果为有效的 JSON 编码字符串:

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

使用时 JavaScript,您无需在代码中打印出未经处理的 JSON 编码字符串,toDynamoDBJson也不需要使用类似的实用程序。上述映射模板的等效示例是:

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

另一种方法是使用 util.dynamodb.toMapValues,这是处理值对象的建议方法:

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

它的评估结果为:

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

我们建议将 DynamoDB 模块与 DynamoDB 数据来源一起使用:

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

再举一个例子,采用以下映射模板将项目放入 Amazon DynamoDB 数据来源中:

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

在评估后,该映射模板字符串必须生成有效的 JSON 编码字符串。使用时 JavaScript,您的代码会直接返回请求对象:

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), }; }

它的评估结果为:

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

我们建议将 DynamoDB 模块与 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 }) }