从架构中调配(可选) - Amazon AppSync
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

从架构中调配(可选)

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

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

无架构

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

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

在页面的下半部分,您可以更改表名称、更改布局或者添加索引。如果您计划经常使用特定字段查询,推荐使用索引作为实现高性能的最佳实践。在创建索引时,Amazon 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:"You can use AppSync with GraphQL" rating:5 approved:true }){ id } }

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

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

它应该只返回内容字段中带有字符串 “AppSync” 的博客。您可以通过控制台查询页面上的 GraphQL 自省来浏览字段上的不同过滤器。Amazon AppSync 针对不同标量类型的常见用例生成多个查询和过滤器,以帮助您快速启动和运行。请务必注意,随着应用程序使用量的增加以及对规模或表格的更复杂的数据要求,所有这些筛选器可能不再适用,您应该利用不同的 DynamoDB 最佳实践或合并您的 GraphQL API 中的数据源,例如 Amazon OpenSearch 复杂搜索服务。

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

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

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

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

现有架构

这些说明首先要从设计您的架构中介绍的架构开始。在 Amazon 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 查询和变更的相应部分。Amazon AppSync将预置最符合您的数据访问模式的 DynamoDB 表,以有效利用数据库吞吐量。您也可以为不同的查询选项选择索引,这些选项会根据需要设置 DynamoDB 本地二级索引或全局二级索引。

对于示例架构,您可以简单地将 id 选为主键,然后选择 Create (创建)。如果您的类型没有将 id 设置为主键,创建操作将需要该类型的所有字段。否则,Amazon 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 } } }