我在寻找良好的来源/找出如何正确向AppSync GraphQL突变添加服务器端验证方面遇到问题。
本质上,我使用AWS仪表板定义了我的AppSync模式,因此为我创建了DynamoDB表,并为数据设置了一些基本解析器。
否,我需要实现以下目标:
inventory
和gold
的玩家purchaseItem
调用item_id
变异item_id
是否存在于关联的DynamoDB的“项目”表中,再次检查玩家是否有足够的黄金,再次在关联的DynamoDB的“玩家”表中,如果是这样,请通过向其库存中添加项目并减去新的黄金量来写入Players
DynamoDB表。我相信实现此目标最有效的方法,可以减少成本和延迟,是对AppSync使用“ Apache Velocity”模板语言吗?
很高兴看到此示例显示如何查询/写入DynamoDB,处理错误并正确解决突变。
答案 0 :(得分:0)
要使用VTL写入DynamoDB,请使用以下tutorial
您可以从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 }
这基于分页查询模板。
答案 1 :(得分:0)
您要查看的是管道解析器: https://docs.aws.amazon.com/appsync/latest/devguide/pipeline-resolvers.html
是的,这需要VTL(速度模板)
这使您可以执行读取,写入,验证以及使用VTL进行的任何操作。您基本上要做的就是将输入和输出链接到下一个模板,然后进行所需的过程。
以下是中级帖子,向您展示如何操作:
https://medium.com/@dabit3/intro-to-aws-appsync-pipeline-functions-3df87ceddac1
换句话说,您可以做的是: 有一个查询数据库的模板,将结果传递到另一个模板,该模板验证结果并在成功或失败后将其插入。