9

我在寻找好的来源/弄清楚如何正确地将服务器端验证添加到我的 AppSync GraphQL 突变时遇到问题。

本质上,我使用 AWS 仪表板来定义我的 AppSync 架构,因此为我创建了 DynamoDB 表,以及为数据设置的一些基本解析器。

不,我需要实现以下目标:

  1. inventory我有一个球员gold
  2. 玩家调用purchaseItem突变item_id
  3. 一旦调用此突变,我需要在解析器中执行一些检查,即检查item_id关联 DynamoDB 的 int 'Items' 表是否存在,检查玩家是否有足够的金币,再次在关联 DynamoDB 的“Players”表中,如果是,则写入PlayersDynamoDB 表通过将项目添加到他们的库存和新减去的黄金数量。

我相信实现这一目标并降低成本和延迟的最有效方法是为 AppSync 使用“Apache Velocity”模板语言?

很高兴看到这个例子展示了如何查询/写入 DynamoDB、处理错误和正确解决突变。

4

2 回答 2

0

您想查看的是 Pipeline Resolvers: https ://docs.aws.amazon.com/appsync/latest/devguide/pipeline-resolvers.html

是的,这需要 VTL(速度模板)

这允许您使用 VTL 执行读取、写入、验证和任何您想要的操作。您基本上所做的是将输入和输出链接到下一个模板并进行所需的过程。

这是一篇中等帖子,向您展示了如何做到这一点:

https://medium.com/@dabit3/intro-to-aws-appsync-pipeline-functions-3df87ceddac1

换句话说,您可以做的是:拥有一个查询数据库的模板,将结果通过管道传输到另一个模板,该模板验证结果并在成功或失败时将其插入。

于 2019-08-16T17:58:38.060 回答
0

要使用 VTL 写入 DynamoDB,请使用以下教程

您可以从 PutItem 模板开始。我的请求模板如下所示:

{
"version" : "2017-02-28",
"operation" : "PutItem",
"key" : {
    "noteId" : { "S" : "${context.arguments.noteId}" },
    "userId" : { "S" : "${context.identity.sub}" }
},
"attributeValues" : {
    "title" : { "S" : "${context.arguments.title}" },
    "content": { "S" : "${context.arguments.content}" }
}
}

查询:

{ "version" : "2017-02-28",
"operation" : "Query",
"query" : {
    ## Provide a query expression. **
    "expression": "userId = :userId",
    "expressionValues" : {
        ":userId" : {
            "S" : "${context.identity.sub}"
        }
    }
},
## Add 'limit' and 'nextToken' arguments to this field in your schema to implement pagination. **
"limit": #if(${context.arguments.limit}) ${context.arguments.limit} #else 20 #end,
"nextToken": #if(${context.arguments.nextToken}) "${context.arguments.nextToken}" #else null #end
 }

这基于分页查询模板。

于 2018-10-20T05:22:39.507 回答