解析器中的 AppSync GraphQL 突变服务器逻辑

AppSync GraphQL mutation server logic in resolvers

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

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

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

  1. 我有一个玩家拥有 inventorygold
  2. 玩家用item_id
  3. 调用purchaseItem突变
  4. 调用此突变后,我需要在解析器中执行一些检查,即检查 item_id 是否存在关联 DynamoDB 的 int 'Items' table,再次检查玩家是否有足够的金币在关联的 DynamoDB 的 'Players' table 中,如果是这样,请写入 Players DynamoDB table 通过将项目添加到他们的库存和新减去的黄金数量。

我认为实现此目的的最有效方法是使用 "Apache Velocity" AppSync 模板语言?

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

要使用 VTL 写入 DynamoDB,请使用以下 tutorial

you can start with the PutItem template. My request template looks like this:

{
"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
 }

This is based on the Paginated Query template.

你想看的是管道解析器: https://docs.aws.amazon.com/appsync/latest/devguide/pipeline-resolvers.html

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

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

这里有一个 Medium post 向您展示如何操作:

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

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