在 GraphQL 中,"edges" 和 "node" 是什么意思?

In GraphQL what's the meaning of "edges" and "node"?

我正在使用 GraphQL 端点,我得到的结果包含 edgesnode 标签。我为我的查询提供了一个干净的 JSON 结构,所以这对我来说没有意义。

似乎 GraphQL 服务器正在污染我的数据,但没有明显的好处。为什么这些术语包含在 GraphQL 端点的响应中,是否有可能摆脱那些用于 faster/simpler 数据解析的术语?

让我们先简单介绍一下


GraphQl 中继规范

  • 重新获取对象的机制
  • 描述如何通过连接分页
  • 围绕突变构建结构以使其可预测

连接数:

  • 连接是具有元数据的对象集合 例如edgespageInfo...
  • pageInfo 将包含 hasNextPagehasPreviousPagestartCursorendCursor

    • hasNextPage 会告诉我们是否有更多可用边,或者我们是否已到达此连接的末尾。
  • 记录数组:edges

    • edges 将为您提供使用数据(节点)的灵活性
    • edges 将帮助您进行分页,有 graphql GraphQLList 但没有分页等功能,只有对象数组(数据)
  • 每条边有

    • a node: 一条记录或一条数据
    • a cursor: base64 编码的字符串以帮助中继分页

https://facebook.github.io/relay/graphql/connections.htm

节点:

  • 您可以使用中继设置您需要显示的节点数connectionArgs(first, last, after, before)

中继分页工作方式为

  • 获取集合中的所有对象和 return 基于 first/last x 记录的切片,通过 connectionArgs

  • 使用
  • after/before 用于向 GraphQL 服务器指示使用来自节点的游标所需的切片(数据)的数量

还有很多事情需要考虑,例如 nodeDefinitionsglobalFieldIdnodeInterfaces

https://github.com/graphql/graphql-relay-js#object-identification

GraphQL 代表图形查询语言,有两部分:服务器和客户端。服务器有效地将图形结构放在您的数据库前面,您的查询正在遍历 graph.

在计算机科学领域:

  • 一个是一个网络
  • a node 是该网络中的顶点之一
  • 一个是节点之间的链接之一

综上所述,GraphQL 查询有效地要求 GraphQL 服务器实例遍历其数据图并找到该数据的某种表示形式。您会在查询中看到 edgesnode,因为您实际上是在查看图表中的这些条目。

allXYZ 条记录的典型查询如下所示:

{
  _allXYZ {
    edges {
      node {
        // your data shape will be in here
      }
    }
  }
}