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

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

(可选)根据架构预配置

AmazonAppSync 可根据架构定义代表您自动预配置 Amazon DynamoDB 表、创建数据源并连接解析程序。如果你想让这可能很有用AmazonAppSync 根据您的架构定义和数据访问模式定义适当的表布局和索引策略。

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

无架构

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

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

在页面的下半部分,您可以更改表名称、更改布局或者添加索引。如果您计划经常使用特定字段查询,推荐使用索引作为实现高性能的最佳实践。创建索引时,AmazonAppSync 构建 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字段将自动生成。AmazonAppSync 你的类型有主键表格上的字段id: ID!. 否则为AmazonAppSync 需要主键字段作为参数的一部分传递。在创建一些具有不同内容的博客文章之后,运行以下查询:

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

它应仅返回在内容字段中具有字符串“AppSync”的博客。你可以通过 GraphQL 内省来探索字段上的不同过滤器查询控制台的页面。AmazonAppSync 为不同标量类型上的常见使用案例生成多个查询和筛选条件以帮助您快速启动和运行。重要提示,随着您的应用程序使用量增加以及您在规模或更大的表上有更复杂的数据需求,所有这些筛选条件可能已不再适用,您应该利用不同的 DynamoDB 最佳实践或在 GraphQL API 中组合数据源,例如Amazon OpenSearch Service用于复杂的搜索。

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

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

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

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

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 }

现有架构

这些说明首先要从设计您的架构中介绍的架构开始。从AmazonAppSync 控制台,转至架构页面上,在编辑器中输入以下架构,然后选择保存架构

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 查询和突变,不同的键选择会有所不同。AmazonAppSync 会预配置 DynamoDB 表与您的数据访问模式进行最佳匹配,以便有效使用您的数据库吞吐量。您还可以为不同查询选项选择索引,这会相应地设置 DynamoDB 本地二级索引或全局二级索引。

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

注意:有一个 GraphQLinput键入已创建的架构的参数。例如,如果您进行预置所依据的架构具有 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 } } }