使用现有的 AppSync API w/ Amplify

Using an exisiting AppSync API w/ Amplify

使用: AppSync、DynamoDB 和 Lambda

所以我对如何在 React Native 的 Amplify 中集成 AppSync 有点困惑。我在控制台上创建的 AWS AppSync 中有一个现有的 API。此 API 有几个不同的模型,如:用户、视频、视频评论等。这些模型中的一些对象具有自定义映射模板和解析器,它们对应用程序非常重要。

例如,这是对我们的架构的快速浏览。

类型用户{

userId: Id!

名称:字符串

uploadedVideos(limit: Int, nextToken: String): VideoConnection

等等等等

}

类型视频{

videoID: Id!

对象:S3Object

userId: Id!

上传者:用户

}

我们有一个运行简单 getVideo 查询的解析器,该查询将使用 userId 检索 uploadedBy 属性,并检索该用户的所有必要信息。

此外,我们为模型创建的数据源 (dynamoDb tables) 有主键,有些有排序键。像 VideoLikes table 跟踪谁喜欢视频并避免重复,主键是 VideoID,排序键是 UserID。这只是一个小例子,我们在其他地方也可以访问 LSI。

当我开始使用 Amplify 时,我尝试重新创建 AppSync API 因为我喜欢 CloudFormation 功能在不同的暂存环境中的强大功能。但是,我注意到模型的 DynamoDB 是自动定义的,并自动设置为一个 id 作为主键。我们使用 LSI 来帮助按某些值进行排序,例如如果我们想按喜欢或评论的数量对视频进行排序,那么不幸的是这对我们不起作用。因此,当我注意到这一点时,我使用了原始 AppSync API 和 运行 中的 "Codegen" 命令解决了我的解析器和映射模板未随模式、查询、突变复制下来的问题,并且由于缺少这些数据源,导致大多数查询失败的订阅。

所以我的问题是:

有没有办法从我的 React Native 应用程序中退出的 AppSync API integrate/use 一切?这包括自定义解析器和映射模板。 如果不是

直接在 Amplify CLI 中创建 API 时,是否有办法为模型的 DynamoDB 设置主键和排序键? 如果不是

是否有另一种方法可以在不使用 LSI 和 GSI 的情况下在 DynamoDB 中高效地对数据进行排序?如果模型自动生成带有 GSI 的 tables,这可能会有问题,因为我知道 GSI 有点贵,所以我想尽可能避免使用它们。是否有其他服务可以对 DynamoDB 中可在 AppSync 中使用的数据进行排序? 任何帮助将不胜感激,谢谢。

Is there a way to integrate/use EVERYTHING from my exiting AppSync API within my React Native application?

是的,您可以根据需要部署 API,然后使用放大客户端工具使用它。您始终可以使用 Ampify CLI 的代码生成功能,而无需通过 amplify api 类别部署 API。您可以使用自定义堆栈来定义不是由 @model 生成的自定义解析器,但这将部署一个新的 API,其结构与您现有的 API.

Is there a way to set a primary and sort key for the DynamoDB of the Models when creating an API directly within the Amplify CLI?

很快。这里有一个 RFC https://github.com/aws-amplify/amplify-cli/issues/1062 and implementation is in PR here https://github.com/aws-amplify/amplify-cli/pull/1463.

Is there another way to have data sorted efficiently within DynamoDB without using LSIs and GSIs?

不,但您可以使用索引重载来使 1 个索引存储和排序多个不同的概念对象类型。 TBH 这是一个复杂的主题,但这里是一个很好的起点 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-gsi-overloading.html