在GraphQL中,"edge"和"node"的含义是什么?

Ska*_*Ska 73 graphql

我正在使用一个特定的GraphQL端点,虽然我提供了一个干净的JSON结构作为查询,当我得到结果时,我得到"edge"和"node"标签.似乎它正在污染我的数据而没有明显的好处.为什么它存在,是否有可能摆脱那些更快,更简单的数据解析?

p0k*_*k8_ 47

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


GraphQl继电器规格

  • 用于重新获取对象的机制
  • 如何翻页连接的说明
  • 突变周围的结构使其可预测

连接:

  • 一个连接对象的元数据,如集合edges,pageInfo...
  • pageInfo将包含hasNextPage,hasPreviousPage,startCursor,endCursor

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

    • edge将为您提供使用数据的灵活性(节点)
    • edge将帮助你进行分页,有graphql GraphQLList但没有像pagination这样的功能,只有对象数组(数据)
  • 每个边缘都有

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

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

节点:

  • 每个节点都有一个游标
  • 您可以使用中继设置需要显示的节点数 connectionArgs(first, last, after, before)

Relay Pagination的工作原理如下

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

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

还有更多的事情要考虑像nodeDefinitions,globalFieldId,nodeInterfaces

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

  • 我认为这个答案有正确的要点,但它包含许多错误观念.本文很好地解释了GraphQL连接背后的原因:https://medium.com/p/explaining-graphql-connections-c48b7c3d6976 (13认同)
  • 你在哪里找到误解,只是简短的信息,如果你发现任何误解,你可以随时改进它以使其更好 (6认同)
  • 这个答案过于依赖对 GraphQL 术语的现有理解。它更多的是术语列表而不是解释。 (2认同)

ser*_*ays 21

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

在计算机科学领域:

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

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

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

{
  _allXYZ {
    edges {
      node {
        // your data shape will be in here
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)