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

上次更新日期: 2022 年 3 月 3 日

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

简短描述

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

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

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

解决方法

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

1.    打开 Amazon DynamoDB 控制台

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

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

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

5.    选择 Create table(创建表)。新表将显示在控制台的 Tables(表)页面上。

6.    在 Name(名称)列中,选择新表的名称。表的 Overview(概览)页面随即打开。

7.    选择 Actions(操作)下拉列表。然后选择 Create item(创建项目)。这将打开 Create item(创建项目)页面。

8.    选择 JSON 按钮。

9.    复制以下嵌套 JSON 记录并粘贴到 JSON 编辑器中,然后选择 Save(保存):

重要提示: 确保使用嵌套 JSON 记录覆盖 JSON 编辑器中预填充的内容。

示例嵌套 JSON 记录

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

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

创建 AWS 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(创建)。

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

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

1.    打开 AWS AppSync 控制台

2.    在左侧导航窗格中,选择 Schema(架构)。

3.    复制以下嵌套 JSON 架构并粘贴到 JSON 编辑器中,然后选择 Save Schema(保存架构):

重要提示: 确保使用嵌套 JSON 架构覆盖 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 控制台

2.    在 API 的 Schema(架构)页面的 Resolvers(解析器)下,滚动到 Query(查询)。
注意: 或者在 Filter types(筛选器类型)字段中,输入 Query(查询)。

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

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

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

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

示例请求映射模板

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

示例响应映射模板

$util.toJson($ctx.result)

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

创建新的测试查询

1.    打开 AWS AppSync 控制台

2.    在左侧导航窗格中,选择 Queries(查询)。

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

示例测试查询

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

4.    要运行测试查询,选择 play icon(播放图标)或者按下 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"
    }
  }
}

现在,您可以通过 AWS AppSync GraphQL 操作从 Amazon DynamoDB 表检索任何嵌套 JSON 数据。


这篇文章对您有帮助吗?


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