我正在使用react-reduce,appsync graphql和数据库作为dynamoDB开发应用程序。所以就像下面的
React <--> GraphQL <-> (AppSync) <--> resolver <--> DynamoDB
现在,明智的要求是存在以下情况:我需要调用多个基于SSL证书的REST API来获取数据,一旦从REST API中获取了数据,然后从DB中获取了其他数据..合并这些数据并将其显示给UI。 / p>
例如我需要在用户界面中显示用户数据,因此数据库具有该用户的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,我不确定它是否可行。截至目前,我想出了以上选择。在这种情况下寻找正确的方法或最佳做法。
答案 0 :(得分:1)
因此,理想情况下,当在AppSync中构建GraphQL网关时,想法应该是UI开发人员不必考虑数据来源的机制,而只需要使用特定于高级实体的高级实体即可。应用。在某些情况下,这并不是最佳选择,但需要努力。
如果REST API调用的结果仅映射到单个字段,则即使存在更高级别的解析器从DynamoDB获取数据的情况,您也可以将嵌套的解析器仅附加到该字段。但是,如果该REST调用返回多个字段的值,或者依赖于其他REST调用中的数据,则管道解析器在这里很有意义。
您在流水线解析器中合并来自多个步骤的数据是要获取每个函数调用的输出,并将其添加到函数响应映射模板的$context.stash
中,该模板是在每个函数中持久存在的Map在管道解析器中调用。然后,在Pipeline Resolver的响应映射模板中,您可以从存储中读取并在模式中分配要为该类型返回的数据。
在这种情况下GraphQL的另一个好处是,当客户端UI不需要对象中的特定字段时,例如说在返回缓慢的数据库中找到了被省略的字段,则不必实际调用该数据库在查询解析器中,因为客户端仅定义了它需要的数据。