如何理解 GraphQL 中的空边和节点

How to understand null edges and nodes in GraphQL

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

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

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

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

在中继中,边和节点可以为空,因为这是规范隐式指定的内容。

实际原因是 GraphQL 错误 work。在解析字段时遇到执行错误时,该字段将解析为空。但是,如果该字段也是非空的,它 不能 实际上解析为空,因此 GraphQL 将使整个父字段变为空。如果父字段也是非空的,那么它将使 its 父字段为空...等等。 GraphQL 错误将以这种方式 "bubble up" 直到遇到可为空的字段或到达 data 根字段(始终可为空)。

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