具有业务逻辑的 AWS Appsync + DynamoDB

Posted

技术标签:

【中文标题】具有业务逻辑的 AWS Appsync + DynamoDB【英文标题】:AWS Appsync + DynamoDB with business logic 【发布时间】:2019-02-08 00:41:47 【问题描述】:

当数据源是 dynamoDB 时,是否可以在我的 AppSync 的突变上有业务逻辑?

我对 GraphQL 和 Appsync 还很陌生。我的理解是,当您使用普通的 GraphQL 时,您可以在解析器中包含业务逻辑,以便在更新之前进行验证。当您将 GraphQL 架构以 DynamoDB 作为数据源时,您将如何使用 AWS AppSync 实现相同的目标?

【问题讨论】:

【参考方案1】:

在 AWS AppSync 中,您可以将解析程序附加到映射到 DynamoDB 数据源的字段。然后,您可以使用 Velocity 模板在解析器中包含您的自定义业务逻辑以进行任何验证。

请参阅 AWS 解析器映射模板编程指南中的 following documentation。

Here is the mapping template reference 用于 DynamoDB 解析器。

【讨论】:

谢谢。我看到了 VTL,但暗暗希望这不是这样做的方法。我明白为什么人们似乎更喜欢在 Lambda 中使用自己的 GraphQL,而不是使用 AppSync。 我们意识到,使用 VTL 是当今使用 AWS AppSync 时最痛苦的部分,我们正在努力使这个过程尽可能简单,因此几乎没有 VTL为大多数场景编写的代码。例如,查看 amplify-cli 中的 GraphQL Transformer:github.com/aws-amplify/amplify-cli/blob/master/…。【参考方案2】:

根据AWS AppSync's Website:借助 AppSync,您的应用可以访问 Amazon DynamoDB 中的数据、触发 AWS Lambda 函数或运行 Amazon Elasticsearch 查询

您可以将其视为客户端访问不同后端(数据源)的网关,这些后端由附加到 GraphQL 字段(解析器)的映射模板定义。

AppSync 原生支持 DynamoDB 和 ElasitcSearch 查询,但如果您想执行业务逻辑,您必须添加 AWS Lambda 数据源,然后使用 AWS 开发工具包来 R/W DynamoDB 或其他任何东西,例如另一个 API,甚至可能是excel文件!

此外,您可以将Apache VTL 与 AppSync 的可用帮助程序(例如 $context)一起使用,以帮助您执行授权或基于权限的字段数据访问。请记住,您的 DynamoDB 或 ES 解析器最后只能执行 1 次操作,Apache VTL 仅帮助您构建将由 AppSync 运行的解析器。

这是比较传统方法与 appsync 的两个图表

【讨论】:

以上是关于具有业务逻辑的 AWS Appsync + DynamoDB的主要内容,如果未能解决你的问题,请参考以下文章

具有公共/私有访问权限的 Appsync 身份验证,无需 AWS Cognito

AWS Amplify Appsync 在创建具有关系的对象时解决错误

具有 Cognito 联合身份的 AWS AppSync IAM 授权

AWS AppSync 中订阅的自定义筛选

如何从 Amplify - AppSync - ElasticSearch - DynamoDB Stack 中获取看不见的附近文档?

如何使用 AWS AppSync 将文件上传到 AWS S3