AppSync Dynamodb 解析器
Posted
技术标签:
【中文标题】AppSync Dynamodb 解析器【英文标题】:AppSync Dynamodb Resolvers 【发布时间】:2021-07-18 16:47:11 【问题描述】:我正在尝试学习如何使用 AppSync 及其 DynamoDB 集成。
我已成功创建 AppSync GraphQL API 并将解析器链接到主键上的 getter,并认为我了解正在发生的事情。但是,我根本无法让 putItem 解析器工作,并且正在努力寻找一种有用的方法来调试逻辑。
这里有一个 cdk 存储库,它将部署应用程序。第 133-145 行有一个手写模式,我认为它应该可以工作,但是会收到错误
一个或多个参数值无效:关键 food_name 的类型不匹配预期:S 实际:NULL(服务:DynamoDb,状态代码:400
我也尝试将表达式用引号括起来,但收到错误。 我应该从这里去哪里?
示例数据创建一个带有键的表
-
食物名称
科学名称
群
子组
以 food_name 作为主键。
https://github.com/AG-Labs/AppSyncTask
今天我尝试将列表解析器重新实现为
"version" : "2017-02-28",
"operation" : "Scan",
## Add 'limit' and 'nextToken' arguments to this field in your schema to implement pagination. **
"limit": $util.defaultIfNull($ctx.args.limit, 20),
"nextToken": $util.toJson($util.defaultIfNullOrBlank($ctx.args.nextToken, null))
响应映射为
$util.toJson($ctx.result.items)
在 cloud watch 中,我可以看到日志类型 ResponseMapping 下的结果列表(虽然没有正确过滤,但我现在将忽略它)但这些不会返回给查询器。结果很简单
"data":
"listGenericFoods":
"items": null
我不明白这是哪里出了问题。
【问题讨论】:
架构文件只有 133 行。检查你是否推送。 你是说应该有更多吗?架构最初是根据为应用同步提供的单一类型创建的。 get 的解析器不是其他的,所以我认为这与它们的实施方式有关。 【参考方案1】:问题在于解析器是嵌套的。
编写手写架构解决了该问题,但导致 API 较差。后退几步,将从头开始慢慢添加更多解析器。
CloudWatch Logs 开启后会有所帮助,但仍需要对解析器进行大量更改并重试。
【讨论】:
以上是关于AppSync Dynamodb 解析器的主要内容,如果未能解决你的问题,请参考以下文章
AWS Appsync 一个 dynamodb 解析器中的多个 dynamodb 请求