amazon-web-services - 来自 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,我不确定它有多可行。截至目前,我想出了上述选项。为这种情况寻找正确的方法或最佳实践。
解决方案
因此,理想情况下,在 AppSync 中构建 GraphQL 网关时,其想法应该是 UI 开发人员不必考虑数据来自何处的机制,而只需使用特定于应用程序的高级实体即可。在某些情况下,这不是最佳的,但这是值得努力的。
如果 REST API 调用的结果仅映射到单个字段,您可以仅将嵌套解析器附加到该字段,即使存在从 DynamoDB 获取数据的更高级别的解析器。但是,如果该 REST 调用返回多个字段的值,或者依赖于来自其他 REST 调用的数据,那么管道解析器在这里是有意义的。
您在管道解析器中合并来自多个步骤的数据是获取每个函数调用的输出并将其添加到$context.stash
函数响应映射模板中,该模板是在管道解析器中的每个函数调用中持续存在的 Map。然后在 Pipeline Resolver 的响应映射模板中,您可以从存储中读取并组装您想要在架构中为该类型返回的数据。
在这种情况下,GraphQL 的另一个好处是,当客户端 UI 不需要对象中的特定字段时,假设在返回缓慢的数据库中找到了省略的字段,您不必在查询中实际调用该数据库解析器,因为客户端只定义它需要的数据。
推荐阅读
- matlab - 为什么 Matlab 会更改作为主对象属性的所有对象的值?
- c# - 如何访问列表中每个对象的项目并对其执行一些操作?
- javascript - 角中性能.navigation.type 的替代品是什么?
- mysql - 带有子选择的慢速运行查询
- c# - 收藏已修改;当我不修改循环内的集合时,枚举操作可能不会执行
- sapui5 - ui5-tooling build 创建的 dist 文件夹在部署到 SCP 时不起作用
- cors - 使用 CDN 中的 Ionicons 时如何解决 CORS 问题?
- r - 从 data.table 到 matrix 并用 0 填充缺失的转换
- javascript - 内容安全策略“拒绝执行内联事件处理程序”错误
- javascript - 如何使用 React 中的 google sheet api 动态获取电子表格中的工作表列表?