首页 > 解决方案 > 来自 aws 无服务器反应应用程序的多个安全休息呼叫

问题描述

我正在使用 react-reduce、appsync graphql 和数据库作为 dynamoDB 开发应用程序。所以就像下面

React <--> GraphQL <-> (AppSync) <--> resolver <--> DynamoDB

现在需要明智的情况是,我需要调用多个基于 SSL 证书的 REST API 来获取数据,一旦从 REST API 获取数据,然后从 DB 获取其他数据..合并这些数据并将其显示给 UI。

例如,我需要在 UI 中显示用户数据,因此数据库具有该用户的 50% 数据,其余数据我需要从多个 Web 服务调用中获取。

到目前为止,我想到的或我已经探索过的几个选项来解决这种情况。例如

(Option:1) react <--> graphQL <--> AppSync <--> Pipeline Resolver (which will call one by one rest API call and then final resolver call will be DynamoDB) <--> REST API & DynamoDb

https://docs.aws.amazon.com/appsync/latest/devguide/pipeline-resolvers.html

此选项 UI 不必合并数据,无论来自管道解析器,UI 都可以显示。

(Option:2) react -- single Lambda Function (for all necessary REST API call), Next GraphQL call -- AppSync -- DynamoDB

在选项:2 UI 必须从 REST 和 DB 获取数据,然后合并和显示。

(Option:3)

在此处输入图像描述

选项:3,我不确定它有多可行。截至目前,我想出了上述选项。为这种情况寻找正确的方法或最佳实践。

标签: amazon-web-servicesaws-lambdaaws-api-gatewayaws-appsync

解决方案


因此,理想情况下,在 AppSync 中构建 GraphQL 网关时,其想法应该是 UI 开发人员不必考虑数据来自何处的机制,而只需使用特定于应用程序的高级实体即可。在某些情况下,这不是最佳的,但这是值得努力的。

如果 REST API 调用的结果仅映射到单个字段,您可以仅将嵌套解析器附加到该字段,即使存在从 DynamoDB 获取数据的更高级别的解析器。但是,如果该 REST 调用返回多个字段的值,或者依赖于来自其他 REST 调用的数据,那么管道解析器在这里是有意义的。

您在管道解析器中合并来自多个步骤的数据是获取每个函数调用的输出并将其添加到$context.stash函数响应映射模板中,该模板是在管道解析器中的每个函数调用中持续存在的 Map。然后在 Pipeline Resolver 的响应映射模板中,您可以从存储中读取并组装您想要在架构中为该类型返回的数据。

在这种情况下,GraphQL 的另一个好处是,当客户端 UI 不需要对象中的特定字段时,假设在返回缓慢的数据库中找到了省略的字段,您不必在查询中实际调用该数据库解析器,因为客户端只定义它需要的数据。


推荐阅读