如何配置 AWS AppSync 架构以处理 DynamoDB 中的嵌套 JSON 数据?
上次更新日期:2022 年 10 月 7 日
我希望我的 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 数据。