【问题标题】:In GraphQL what's the meaning of "edges" and "node"?在 GraphQL 中,“边”和“节点”是什么意思?
【发布时间】:2017-07-26 03:54:19
【问题描述】:

我正在使用一个特定的 GraphQL 端点,虽然我提供了一个干净的 JSON 结构作为查询,但当我得到结果时,我得到“边缘”和 “节点”标签。似乎它正在污染我的数据而没有明显的好处。为什么会存在它?是否有可能摆脱它们以更快、更简单地解析数据?

【问题讨论】:

标签: graphql


【解决方案1】:

GraphQL 代表 Graph Query Language,有两部分:服务端和客户端。服务器在您的数据库前面有效地放置了一个图结构,您的查询正在遍历该

在计算机科学领域:

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

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

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

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

【讨论】:

    【解决方案2】:

    让我们从简单的简短介绍开始


    GraphQl 中继规范

    • 重新获取对象的机制
    • 关于如何通过连接进行分页的说明
    • 围绕突变构建以使其可预测

    连接:

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

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

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

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

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

    节点:

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

    中继分页作为

    • 获取集合中的所有对象并根据first/last x 记录返回一个切片,通过 connectionArgs 使用

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

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

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

    【讨论】:

    • 我认为这个答案的主旨是正确的,但它包含许多误解。这篇文章很好地解释了 GraphQL 连接背后的原因:medium.com/p/explaining-graphql-connections-c48b7c3d6976
    • 你在哪里找到错误的概念,这只是简短的信息,如果你发现任何错误概念,你可以随时改进它以使其更好
    • 我可以通过 graphql UI 使用这些结构吗?例如 hasNextPage,还是只能通过带有 Relay 的 JS 获得?
    • 是的,您可以使用 graphql-relay 从 graphiql UI 处理这些
    • 这个答案过于依赖对 GraphQL 术语的现有理解。它更多的是术语列表,而不是解释。
    猜你喜欢
    • 2016-08-17
    • 2015-04-11
    • 2016-08-08
    • 2017-01-12
    • 2023-03-06
    • 2018-12-20
    • 2012-04-30
    • 2018-04-11
    相关资源
    最近更新 更多