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 个,即它等于结果中最后一条边的光标字段。
一般来说,像这样的基于光标的分页不是双向的。所以你不能同时知道hasNextPage
和hasPreviousPage
。但是,无论您要获取哪个,都不需要在另一个查询中发出它,在一个查询中获取尽可能多的数据,这就是重点!
现在肯定有很多 Relay 分页的例子,我不知道有什么。
Apollo 和 GraphQL 本身都有一个松弛的团队。 apollographql.slack.com
和 graphql.slack.com
【讨论】:
谢谢。我还找到了一个可以回答我更多问题的示例。 github.com/nodkz/graphql-compose-connection/blob/master/src/…以上是关于Apollo 的 GraphQL 中继连接规范的主要内容,如果未能解决你的问题,请参考以下文章
如何使用带有 Typescript 的泛型将中继(graphql)连接映射到边缘节点
如何在没有 Apollo Server 但使用 express-graphql 的情况下使用 apollo-datasource-rest