在 GraphQL 中,“边”和“节点”的含义是什么?

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

看起来好像 GraphQL 服务器正在污染我的数据而没有明显的好处。为什么这些术语包含在 GraphQL 端点的响应中,为了更快/更简单地解析数据,是否有可能去掉这些术语?

55378 次浏览

让我们从简单的介绍开始


继电器规范

  • 重新获取对象的机制
  • 描述如何通过连接进行分页
  • 围绕突变的结构,使它们可预测

联系方式:

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

    • hasNextPage将告诉我们是否有更多的边可用,或者如果我们已经达到这个连接的结束。
  • 记录数组: 边

    • 边将为您提供使用数据(节点)的灵活性
    • 边将帮助您的分页,有图形 GraphQLList,但没有功能,如分页,只有对象数组(数据)
  • 每个边缘都有

    • 记录或数据
    • 一个 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 代表图形查询语言,由两部分组成: 服务器和客户端。服务器有效地将一个图形结构放在数据库前面,并且您的查询正在遍历该 图表

计算机科学:

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

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

allXYZ记录的典型查询如下:

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