在AWS中,为基于用户的平台设计RESTAPI有哪些模式?

在AWS中,为基于用户的平台设计RESTAPI有哪些模式?,rest,amazon-web-services,aws-lambda,aws-api-gateway,amazon-cognito,Rest,Amazon Web Services,Aws Lambda,Aws Api Gateway,Amazon Cognito,在构建RESTAPI时,我试图转向无服务器架构。我来自RubyonRails背景 我已经成功地理解并适应了Api网关、Cognito、RDS和Lambda函数等服务,但我正在努力以最佳方式将它们组合在一起 我的情况如下。我有一个简单的基于用户的平台,当有多个与应用程序成员相关的资源时,比如博客应用程序 我使用Cognito进行身份验证,使用Aurora作为数据库服务保存文章之类的东西 因为数据库和Cognito用户池是解耦的,所以我很难做以下事情: 获取喜欢特定文章的用户 获取用户评论 这对我来

在构建RESTAPI时,我试图转向无服务器架构。我来自RubyonRails背景

我已经成功地理解并适应了Api网关、Cognito、RDS和Lambda函数等服务,但我正在努力以最佳方式将它们组合在一起

我的情况如下。我有一个简单的基于用户的平台,当有多个与应用程序成员相关的资源时,比如博客应用程序

我使用Cognito进行身份验证,使用Aurora作为数据库服务保存文章之类的东西

因为数据库和Cognito用户池是解耦的,所以我很难做以下事情:

获取喜欢特定文章的用户

获取用户评论

这对我来说似乎有问题,因为我需要将一些唯一的Cognito用户标识符(在API网关的授权阶段检索)传递给lambda函数,然后lambda函数将保存数据库记录以及对该用户的外部引用。另一方面,如果我要获取特定的用户,首先我必须从我的关系数据库获取他们的标识符,然后从Cognito用户池请求用户详细信息。我缺少一些在lambda函数中访问当前用户的标准方法,以及将数据库记录与该用户轻松关联的机制

我还没有找到一些令人信服的推荐模式来设计这样的应用程序,尽管这似乎是一个非常常见的问题,如果我的方法是正确的,我很难挣扎

在设计简单的基于用户的平台时,我想了解一些什么样的模式需要考虑,我的解决方案的缺陷是什么。任何文章和例子都将非常有用。
提前感谢。

这些听起来像是与分布式、独立的数据库相关的标准问题。您不能再将所有关系委托给数据库,并以某种方式将它们聚合在一起得到结果。您必须通过调用一个数据库,然后调用另一个数据库来完成这项工作

对于这种情况:

获取喜欢特定文章的用户

您将查找“喜欢”数据库以确定喜欢它的人的用户ID,然后查找“用户”数据库以确定用户详细信息,如姓名和头像

大多数模式遵循标准的数据库建议,例如,在上面的示例中,您可以遵循面向性能的模式去规范化-根据每个“喜欢”存储用户数据,如姓名和头像,只要您觉得查询的减少证明了保持一致性的额外存储和负担是合理的(可能有太多人喜欢证明这一点)

另一个重要的实践是使用批量查询来避免N+1查询。这是Rails对
includes
语法所做的,但是您可能必须自己在这里完成。在我的示例中,它应该只需要两次查询,因为第二次查询应该通过查询与用户ID列表匹配的用户,一次性获得所有必需的用户数据

最后,我建议您尝试抽象一些东西。这种代码很快就会变得杂乱无章,因此请确保构建一个封装良好的数据层,将应用程序代码与处理多个数据库的混乱隔离开来