首页 > 解决方案 > AppSync Dynamodb 解析器

问题描述

我正在尝试学习如何使用 AppSync 及其 DynamoDB 集成。

我已成功创建 AppSync GraphQL API 并将解析器链接到主键上的 getter,并认为我了解正在发生的事情。但是,我根本无法让 putItem 解析器工作,并且正在努力寻找一种有用的方法来调试逻辑。

这里有一个 cdk 存储库,它将部署应用程序。第 133-145 行有一个手写模式,我认为它应该可以工作,但是会收到错误

一个或多个参数值无效:预期键 food_name 的类型不匹配:S 实际:NULL(服务:DynamoDb,状态代码:400

我也尝试将表达式用引号括起来,但收到错误。我应该从这里去哪里?

示例数据创建一个带有键的表

  1. 食物名称
  2. 科学名称
  3. 团体
  4. 子组

以 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
    }
  }
}

我不明白这是哪里出了问题。

标签: amazon-web-servicesgraphqlamazon-dynamodbaws-appsyncaws-cdk

解决方案


问题是解析器是嵌套的。

编写手写模式解决了这个问题,但导致 API 更差。后退几步,将从头开始慢慢添加更多解析器。

CloudWatch Logs 启用后会有所帮助,但仍然需要对解析器进行大量更改并重试。


推荐阅读