Amazon web services 使用AppSync和DynamoDB运行用于服务器端验证的Lambda函数

Amazon web services 使用AppSync和DynamoDB运行用于服务器端验证的Lambda函数,amazon-web-services,aws-lambda,amazon-dynamodb,aws-appsync,aws-amplify,Amazon Web Services,Aws Lambda,Amazon Dynamodb,Aws Appsync,Aws Amplify,我最近很喜欢使用它,它基于定义的模式为GraphQL查询生成的代码非常出色 我在定义自定义逻辑/验证服务器端时遇到了一个复杂问题。现成的(负责Amplify中GraphQLAPI的部分)为您的模式生成解析器和DynamoDB表。解析程序是使用模板语言创建的,如果您是新手,我认为这是一个学习曲线 此外,这些解析器是由Amplify cli自动生成的。我不确定在AppSync控制台或本地编辑它们是否有意义,因为每次我们推送api更改时,它们将再次自动生成 除此之外,这些自动生成的解析器实际上在将类型

我最近很喜欢使用它,它基于定义的模式为GraphQL查询生成的代码非常出色

我在定义自定义逻辑/验证服务器端时遇到了一个复杂问题。现成的(负责Amplify中GraphQLAPI的部分)为您的模式生成解析器和DynamoDB表。解析程序是使用模板语言创建的,如果您是新手,我认为这是一个学习曲线

此外,这些解析器是由Amplify cli自动生成的。我不确定在AppSync控制台或本地编辑它们是否有意义,因为每次我们推送api更改时,它们将再次自动生成

除此之外,这些自动生成的解析器实际上在将类型模型链接在一起、启用搜索和身份验证检查方面实现了很多功能,我真的不想碰它们,因为自动生成所启用的开发速度是疯狂的

因此,引入自定义逻辑的唯一其他解决方案似乎是Lambda函数,它侦听关联DynamoDB表的创建/更新事件

我想我可以用下面演示的方式来设置它,基本上允许用户正常使用GraphQLAPI,并且当需要服务器验证的操作在lambda中做出响应时

例如,玩家将物品添加到他们的库存中,我们启动lambda函数来检查玩家之前是否有此物品,如果没有,我们验证物品数据并从玩家表中减去其成本中的黄金。我认为这很好,但我担心的是

  • 我们允许先将未经验证的数据写入数据库(尽管之前已通过graphql类型系统和身份验证检查进行验证)
  • 涉及Lambda的额外成本(在我看来,节省时间和使用NodeJS而不是apachevelocity来定义语言的能力是值得的)
  • 我还缺什么吗

    所以lambda将在幕后进行验证,我们假设这里的大多数用户都是优秀的参与者,并且他们传递给graphqlapi的数据是正确的,因为他们使用我们的客户机

    如果数据是意外的(坏角色),lambda将做出反应并禁止用户


    此解决方案是否可行/常见,是否有其他替代方案?

    Lambda轮询ddb流以查找任何新内容,并同步调用Lambda函数。对一个坏演员的检查可能不会立即发生,因此可能会产生后果。现在,AppSync解析器针对单个数据源执行。您可以嵌套查询以在多个解析器之间传递上下文,如本文所述,I will+1将您的请求作为功能请求。请在将来继续关注最新的AppSync公告。您可以编辑这些解析程序。将使用您在
    resolvers/
    文件夹中覆盖的每个解析器,并且不会自动生成任何解析器。