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

时间:2017-03-06 10:15:27

标签: graphql

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

1 个答案:

答案 0 :(得分:35)

让我们以简单的词语简短介绍

GraphQl中继规范

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

<强>连接:

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

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

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

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

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

<强>节点

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

Relay Pagination的工作原理为

  • 获取集合中的所有对象,并根据通过connectionArgs

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

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

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