【问题标题】:How to understand null edges and nodes in GraphQL如何理解 GraphQL 中的空边和节点
【发布时间】:2020-01-14 00:48:35
【问题描述】:

GraphQL 中关系的良好实践是使用带有 edgenode 元素的 connection 模型。还建议 edgenode 都可以为空。这就是例如我使用的 graphene-sqlalchemy 将映射 SQL 关系。

我的问题是:为什么?就我从 SQL 数据库中提供关系数据的 API 而言,我看不到任何边缘或节点将是 null 的情况。因此,如果我在前端使用静态类型语言(如 Typescript 或 Elm),我会发现自己正在编写一个样板来处理永远不会发生的情况。

在抽象数据模型方面我应该如何理解这些nulls? “没有任何联系”对我来说可以翻译为没有边缘的联系。为什么我需要null 边缘? null 节点更困扰我“有连接,但另一端什么都没有”?请在这里向我解释原因。

【问题讨论】:

    标签: null graphql nullable relay


    【解决方案1】:

    使用连接将您的架构与Relay specification 对齐——在不使用 Relay 时这是否是一种好的做法值得商榷。

    在 Relay 中,边和节点可以为空,因为这是规范隐含指定的。

    造成这种情况的实际原因是 GraphQL 错误 work 的方式。当解析字段时遇到执行错误时,该字段将解析为 null。但是,如果该字段也是非空的,它不能实际上解析为空,因此 GraphQL 将使整个父字段改为空。如果父字段也是非空的,那么它将使 its 的父字段为空...等等。 GraphQL 错误会以这种方式“冒泡”,直到遇到可空字段或到达 data 根字段(始终可为空)。

    换句话说,通过使字段和边可以为空,我们允许节点在解析时出错,同时仍然返回有关边本身的信息,更重要的是,仍然返回所有其他边。如果节点和边都不为空,则单个节点内的错误将导致edges 字段本身解析为空。通过使这些字段可以为空,我们有效地支持 GraphQL 即使在执行过程中遇到错误也能返回部分响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-26
      • 2018-05-02
      • 2017-07-26
      • 2021-09-11
      • 2014-06-09
      • 2018-02-14
      • 2021-02-06
      相关资源
      最近更新 更多