如何配置 AWS AppSync 架构以处理 DynamoDB 中的嵌套 JSON 数据?

上次更新日期:2021 年 1 月 11 日

我希望我的 AWS AppSync 架构能够从具有嵌套 JSON 数据的 Amazon DynamoDB 表中检索响应。该如何操作?

简短描述

执行以下操作以获取 AWS AppSync 架构来处理 DynamoDB 中的嵌套 JSON 数据:

  • 将嵌套 JSON 数据项添加到 DynamoDB 表中。
  • 创建 AppSync API 并附加数据源。
  • 在 AppSync API 中配置嵌套 JSON 架构。
  • 将解析器附加到 getItems 查询。
  • 创建新的测试查询。

重要提示:如果字段名称未映射到嵌套的 JSON 数据,AWS AppSync 架构会在将 null 值传递到对 DynamoDB 的响应中。

解决方法

将嵌套 JSON 数据项添加到 DynamoDB 表中

1.    打开 AWS DynamoDB 控制台

2.    选择 Create table(创建表)。

3.    在 Table name(表名)字段中,输入描述性名称。

4.    在 Primary key(主键)字段中,输入字段名称。例如:id。

5.    选择 Create(创建)。

6.    选择 Items tab(项目选项卡),然后选择 Create item(创建项目)。

7.    从 Create item(创建项目)对话框中的左上角下拉列表中,选择 Text(文本)。

注意:Tree(树)是下拉列表的默认选择。

8.    将以下嵌套 JSON 记录复制并粘贴到文本项目中,然后选择 Save(保存):

重要提示:确保用嵌套的 JSON 记录覆盖文本框中预填充的内容。

示例嵌套 JSON 记录

{
    "id": "123",
    "product": {
        "model": {
            "property": {
                "battery": "li-ion",
                "device": "iOT-Device",
                "pressure": "1012",
                "up_time": "02:12:34"
            }
        }
    },
    "status": "In-Stock"
}

注意:有关更多信息,请参阅创建表

创建 AppSync API 并附加数据源

1.    打开 AWS AppSync 控制台

2.    选择创建 API

3.    在 Getting Started(入门)页面中的 Customize your API or import from Amazon DynamoDB(自定义 API 或从 Amazon DynamoDB 中导入)下选择 Build from scratch(从头开始构建)。

4.    选择 Start(开始)。

5.    在 API name(API 名称)字段中,输入 API 的名称。

6.    选择 Create(创建)。

7.    在左侧导航窗格中,选择 Data Sources(数据源)。

8.    选择 Create data source(创建数据源)。

9.    在 New Data Source(新数据源)页面上的 Create new Data Source(创建新数据源)下选择以下选项:对于 Data source name(数据源名称),请输入描述性名称。对于 Data source type(数据源类型),请选择 Amazon DynamoDB table(Amazon DynamoDB 表)。对于 Region(区域),选择包含您的 DynamoDB 表的区域。对于 Table name(表名称),选择您刚创建的表。

重要提示:将所有其他选项保留为默认选项。

10.    选择 Create(创建)。

注意:有关更多信息,请参阅附加数据源

在 AppSync API 中配置嵌套的 JSON 架构

1.    在 AWS AppSync 控制台的左侧导航窗格中,选择 Schema(架构)。

2.    将以下嵌套 JSON 架构复制并粘贴到文本框中,然后选择 Save Schema(保存架构):

重要提示:确保使用嵌套的 JSON 架构覆盖文本框中预填充的内容。

示例嵌套 JSON 架构

type Query {
    getItems(id: String!): allData
}

type allData {
    id: String!
    product: toModel
    status: String
}

type items {
    battery: String
    device: String
    pressure: String
    up_time: String
}

schema {
    query: Query
}

type toModel {
    model: toProperties
}

type toProperties {
    property: items
}

注意:有关更多信息,请参阅设计架构

将解析器附加到 getItems 查询

1.    在 AWS AppSync 控制台中,在您的 API 的 Schema(架构)页面的 Resolvers(解析器)下,滚动到 Query(查询)。或者在 Filter types(筛选器类型)字段中,输入 Query(查询)。

2.    在 getItems(...): allData 旁的 Resolver(解析器)下,选择 Attach(附加)。

3.    在 Create new Resolver(创建新解析器)页面上,对于 Data source name(数据源名称),请选择您之前创建的 DynamoDB 表的名称。

重要提示:请勿更改 DynamoDB getItem 操作的默认映射模板。

4.    选择 Save Resolvers(保存解析器)。

示例请求映射模板

{
    "version": "2017-02-28",
    "operation": "GetItem",
    "key": {
        "ID": $util.dynamodb.toDynamoDBJson($ctx.args.ID),
    }
}

示例响应映射模板

$util.toJson($ctx.result)

注意:有关更多信息,请参阅配置解析器

创建新的测试查询

1.    在 AWS AppSync 控制台中的左侧导航窗格中选择 Queries(查询)。

2.    在 API 的 Queries(查询)页面中的 Query editor(查询编辑器)中,复制并粘贴以下查询:

示例测试查询

query getItem {
    getItems(id:"123") {
      id
      product{
          model{
            property{
            pressure 
            device
            battery
            up_time
          }
        }
      }
      status
    }
  }

3.    选择播放图标或按下 Ctrl/Cmd + Enter 以允许测试查询。

注意:测试查询应返回以下结果:

示例测试查询结果

{
  "data": {
    "getItems": {
      "id": "123",
      "product": {
        "model": {
          "property": {
            "pressure": "1012",
            "device": "iOT-Device",
            "battery": "li-ion",
            "up_time": "02:12:34"
          }
        }
      },
      "status": "In-Stock"
    }
  }
}

通过这种方式,您可以通过 AppSync GraphQL 操作从 Amazon DynamoDB 表检索任何嵌套 JSON 数据。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?