如果我必须分解 REST 数据,然后重新聚合它,我是不是在滥用 GraphQL?

Posted

技术标签:

【中文标题】如果我必须分解 REST 数据,然后重新聚合它,我是不是在滥用 GraphQL?【英文标题】:Am I misusing GraphQL if I must decompose REST data, then re-aggregate it?如果我必须分解 REST 数据,然后重新聚合它,我是否在滥用 GraphQL? 【发布时间】:2018-08-01 16:04:36 【问题描述】:

我们正在考虑在 REST 服务之上使用 GraphQL(使用 医疗记录的 FHIR 标准)。

我了解 GraphQL 的模式是聚合结果 多个独立的解析器进入最终结果。但是一个 符合 FHIR 的 REST 服务器提供已聚合的批处理端点 数据。有时我们需要点菜数据——患者的年龄或地址 仅,例如。但很多时候,我们需要大部分或全部数据 关于特定患者的可用信息。

因此,尽管我们可以从单个 REST 调用中获取此类全体数据 将多个关联编织在一起,看来我们需要 以 GraphQL 的方式分段获取它。

优化可以是预先加载和记忆所有相关的 任何解析器要求任何数据时的数据。在某些情况下,这将是 适当的,而在其他情况下,这将是严重的矫枉过正。但 考虑到什么时候这将是矫枉过正似乎是不可能的 解析器应该是独立的。此外,撤消似乎是血腥的 然后重做一些REST服务已经完美的事情 能够高效地工作。

所以——

    当 GraphQL 位于 REST API 之上时,它是不是一个错误的工具? 有效地汇总数据? 如果在这种情况下 GraphQL 是正确的工具,它是急切加载和 相关数据的记忆合适吗? 如果急切加载和记忆化不是正确的解决方案,是否存在 一种利用 REST 服务能力的替代方法 汇总数据?

我的问题不同于 this 问题和 this 问题,因为两者都没有涉及如何利用另一个 服务聚合数据的能力。

【问题讨论】:

【参考方案1】:

另一种方法是在解析器中解析特定查询的请求。传递给解析器的第四个参数是一个对象,其中包含有关请求的大量信息,包括选择集。然后,您可以根据请求的字段等待对 API 端点的批处理请求,最后返回 REST 调用的结果,并让较低级别的解析器处理将其解析为请求数据的形状。

解析 info 对象可以是 PITA,尽管有 libraries out there for that,至少在 Node 生态系统中是这样。

【讨论】:

以上是关于如果我必须分解 REST 数据,然后重新聚合它,我是不是在滥用 GraphQL?的主要内容,如果未能解决你的问题,请参考以下文章

如果我必须进行REST调用并将响应值与UI进行比较,那么步骤定义将如何构建?

如果通过rest api发布资源,是不是必须存储资源?

在 Spark 结构化流中,我如何将完整的聚合输出到外部源,如 REST 服务

硅基生命之漫谈-2:宇宙之基本法则:聚合与分解?

帮我解释下:所有select的字段,除聚合函数中的字段,都必须在group by中出现。只要满足这个规则就可以

如果AWS RDS恢复发生,如何重新连接