Apollo 的 GraphQL 中继连接规范

Posted

技术标签:

【中文标题】Apollo 的 GraphQL 中继连接规范【英文标题】:GraphQL Relay Connections Specification for Apollo 【发布时间】:2018-06-03 03:20:29 【问题描述】:

我正在尝试在 Apollo 中实现中继连接,但规范存在一些问题。

架构如下所示:

type PageInfo 
  startCursor: String!,
  endCursor: String!,
  hasNextPage: Boolean!,  
  hasPreviousPage: Boolean!


type User : Node 
  id: ID!
  firstname: String
  lastname: String


type UserConnection : Connection 
  pageInfo: PageInfo!
  edges: [UserEdge!]!


type UserEdge : Edge 
  cursor: String!
  node: User!


extend type Query 
  users(first: Int, after: ID, order: String): UserConnection

假设我在 db 中有 100 个用户; 当我用 limit ex.users(first: 10) 查询时,PageInfo.endCursor 指的是第 10 条边还是第 100 条?

更多问题:

1.我是否应该再次查询以获取hasPreviousPage,hasNextPage。

2.有没有类似结构的代码示例(带有解析器)?

3.有graphql聊天(gitter、irc)吗?

【问题讨论】:

【参考方案1】:

endCursor 指的是第 10 个,即它等于结果中最后一条边的光标字段。

    一般来说,像这样的基于光标的分页不是双向的。所以你不能同时知道hasNextPagehasPreviousPage。但是,无论您要获取哪个,都不需要在另一个查询中发出它,在一个查询中获取尽可能多的数据,这就是重点!

    现在肯定有很多 Relay 分页的例子,我不知道有什么。

    Apollo 和 GraphQL 本身都有一个松弛的团队。 apollographql.slack.comgraphql.slack.com

【讨论】:

谢谢。我还找到了一个可以回答我更多问题的示例。 github.com/nodkz/graphql-compose-connection/blob/master/src/…

以上是关于Apollo 的 GraphQL 中继连接规范的主要内容,如果未能解决你的问题,请参考以下文章

如何使用带有 Typescript 的泛型将中继(graphql)连接映射到边缘节点

在 GraphQL 中构建中继规范查看器

如何在没有 Apollo Server 但使用 express-graphql 的情况下使用 apollo-datasource-rest

使用 Apollo Server 模拟中继式分页

在中继分页graphql上滚动时合并以前的数据

如何更改graphene-python(中继)中的连接参数(之后,之前)?