(可选)根据架构预置 - AWS AppSync
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

(可选)根据架构预置

AWS AppSync 可根据架构定义代表您自动预置 Amazon DynamoDB 表、创建数据源并连接解析程序。如果您希望由 AWS AppSync 根据您的架构定义和数据访问模式定义适当的表布局和索引策略,此功能很有用。

您也可以从无架构开始,从类型构建架构,让 AWS AppSync 创建架构定义和不同的筛选选项。在 API 的生命周期中,您可以独立使用本主题中概述的两个流,也可以结合使用它们。

无架构

在您创建 AWS AppSync API 之后,转到 Schema (架构) 页面并选择 Create Resources (创建资源)。位于顶部的编辑器包含为类型预定义的模板。您可以更改名称、字段类型,并添加或删除条目。例如,使用以下示例类型:

type Blog { id: ID! title: String! content: String rating: Int approved: Boolean }

在页面的下半部分,您可以更改表名称、更改布局或者添加索引。如果您计划经常使用特定字段查询,推荐使用索引作为实现高性能的最佳实践。在创建索引时,AWS AppSync 构建 GraphQL 架构并为您连接解析程序。例如,选择 Add Index (添加索引) 并将索引命名为 rating。在 Primary Key (主键) 中,选择 rating。在 Sort Key (排序键) 中,保留默认值 none (无)。在生成的 GraphQL 中,您应看到类似于以下内容的查询:

queryBlogsByRating(rating:Int!, first:Int, nextToken: String): BlogConnection

在您编辑完类型和创建所需的任何索引之后,请选择 Create (创建),然后等待该进程完成创建资源并将数据源连接到解析程序。您可以立即转到 Queries (查询) 页面并开始运行更改、查询和订阅。例如,创建一个具有以下更改的博客文章:

mutation add { createBlog(input:{ title:"My first post" content:"AWS AppSync with GraphQL" rating:5 approved:true }){ id } }

请注意,id 字段是自动生成的。如果您的类型在 id: ID! 的表上有 Primary Key (主键) 字段,AWS AppSync 会执行此操作。否则,AWS AppSync 需要在参数中传递 Primary Key (主键) 字段。在创建一些具有不同内容的博客文章之后,运行以下查询:

query list { listBlogs(filter:{ content:{ contains:"AppSync" }}){ items{ id title content rating } } }

它应仅返回在内容字段中具有字符串“AppSync”的博客。您可在控制台的 Queries (查询) 页面上,通过 GraphQL 自检浏览字段上的不同筛选条件。AWS AppSync 为不同标量类型上的常见使用案例生成多个查询和筛选条件以帮助您快速启动和运行。需要注意的是,随着您的应用程序使用量增大,并且对规模或更大的表有了更复杂的数据要求,所有这些筛选条件可能不再适用,您应利用不同的 DynamoDB 最佳实践或者在 GraphQL API 中合并数据源,例如适用于复杂搜索的 Amazon Elasticsearch Service。

AWS AppSync 在 GraphQL 标量类型(即 ID、String、Int、Float、Boolean)上创建筛选条件用于列表操作。此操作通过创建基本输入类型来完成,该基本输入类型包含针对您定义的类型的不同字段。每个这些字段都有针对事物的适当输入筛选条件类型,例如字符串搜索、布尔值比较等。例如,仅字符串支持 BEGINS_WITH,而布尔值支持 EQNE 等。您可在 Schema (架构) 页面上查看生成的 GraphQL 输入类型中的操作,在 DynamoDB operations (DynamoDB 操作) 上查看 DynamoDB 操作的列表。

继续博客示例类型,以下内容在您的架构中生成基本输入类型:

input BlogInput { id: TableIDFilterInput title: TableStringFilterInput content: TableStringFilterInput rating: TableIntFilterInput approved: TableBooleanFilterInput }

AWS AppSync 控制台自动将它连接到一个查询操作。如果您希望自己执行此操作,它可能类似于如下所示:

listBlog(filter: BlogInput): [Blog]

当您将解析程序附加到 listBlog 查询时,请求映射模板使用 filter 键上的输入以及 $util.transform.toDynamoDBFilterExpression,如下所示:

{ "version": "2017-02-28", "operation": "Scan", "filter": #if($context.args.filter) $util.transform.toDynamoDBFilterExpression($ctx.args.filter) #else null #end }

现有架构

这些说明首先要从设计您的架构中介绍的架构开始。在 AWS AppSync 控制台中,导航到 Schema (架构) 页面,在编辑器中输入以下架构,然后选择 Save Schema (保存架构)

schema { query:Query mutation: Mutation } type Query { allTodo: [Todo] } type Mutation { addTodo(id: ID!, name: String, description: String, priority: Int, status: TodoStatus): Todo } type Todo { id: ID! name: String description: String priority: Int status: TodoStatus } enum TodoStatus { done pending }

保存架构之后,选择页面顶部的 Create resources (创建资源)。选择 Use existing type (使用现有类型),然后选择您的 Todo 类型。在出现的表单中,您可以配置表详细信息。在这里您可以更改 DynamoDB 的主键和排序键,以及添加其他索引。页面的底部是根据不同键选择,与您可以使用的 GraphQL 查询和更改相对应的部分。AWS AppSync 将预置最适合您的数据访问模式的 DynamoDB 表,以高效地使用您的数据库吞吐量。您还可以为不同查询选项选择索引,这会相应地设置 DynamoDB 本地二级索引或全局二级索引。

对于示例架构,您可以简单地将 id 选为主键,然后选择 Create (创建)。如果您的类型没有将 id 设置为主键,创建操作将需要该类型的所有字段。否则,AWS AppSync 自动为您在解析程序中生成唯一 ID。片刻之后,您的 DynamoDB 表已创建、数据源已创建、解析程序已连接。您可以根据使用您的 API 中的介绍,运行更改和查询。

注意:对于已创建的架构的参数,有一个 GraphQL input 类型。例如,如果您进行预置所依据的架构具有 GraphQL type Books {...},可能有如下所示的输入类型:

input CreateBooksInput { ISBN: String! Author: String Title: String Price: Int }

要在 GraphQL 查询或更改中使用此类型,请使用以下操作:

mutation add { createBooks(input:{ ISBN:"2349238" Author:"Nadia Bailey" Title:"Running in the park" Price:10 }){ ISBN Author } }

此外,如本文档之前的无架构部分中所述,将为列表操作创建默认筛选条件。例如,如果您想要返回价格大于 5 的所有物品,您可以运行以下语句:

query list { listBooks(filter:{ Price:{ gt:5 }}){ items{ ISBN Author Title Price } } }