来自 aws serverless react 应用程序的多个安全休息调用

multiple secure rest call from aws serverless react app

我正在使用 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

在option:2中UI不得不从REST和DB中获取数据,然后合并显示。

(Option:3)

选项:3,不知道可行性如何。截至目前,我想出了上述选项。寻找针对这种情况的正确方法或最佳实践。

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

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

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

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