GraphQL分页:光标VS偏移

问题描述 投票:2回答:1

我们要重建基于REST的服务后端应用程序,因为我们有很多,我们决定创新和尝试GraphQL服务嵌套的水平。

我们开始做简单的事情,该项目看起来非常有前途,但我们开始面临像分页现实世界的问题。在REST,分页方法是简单的,我们用GET方法与像pageSizepageNumber一些参数(或offset),我们建立SQL查询来执行此分页。

在GraphQL我们解决以下相同的方法问题,例如,具有此查询:

users(size:5 offset:2) {
  id
  name
}

这种方法看起来很容易实现,但更深的挖掘,我们发现,“最好”的模式来实现,这是一个连接,查询应该是这样的,其经过:

users(first:2) {
  totalCount
  edges {
    node {
      name
    }
    cursor
  }
  pageInfo {
    endCursor
    hasNextPage
  }
}

我们的数据持久化在关系数据库中,因此我看不出光标是如何帮助(除非也许如果我使用自动增量ID?)。

这是为什么复杂的方法,推荐了一个简单的吗?而且还什么光标和endCursor将被存储?我误解我的学习之路的东西吗?

java groovy graphql graphql-java
1个回答
2
投票

Connection规范最初是为继电器(Facebook的GraphQL客户端)创建的。后来开发了自己的生活,现在被认为是最好的做法,无论是客户端的。但是(这是一个巨大的,但),它最肯定不会很好地映射到每个用例。

如果你看到在实施Connection分页样式值,你有两个选择:

1)治疗after作为偏移(意味着数目将被传递),并且first作为限制:

SELECT * FROM ORDER BY timestamp OFFSET $after LIMIT $first

同为beforelast,只是不同的方向。

2)另一种方法是把after / before作为排序列(所以实际的(混淆)值将被传递)的最后看到的值:

SELECT * FROM ORDER BY timestamp WHERE timestamp > $after LIMIT $first

也就是说,如果你不从Connection方法中获益,随意忽略它。特别是如果你不使用,即使作为接力客户端。这是完全可选的事情,不应该被塞进它不属于。

© www.soinside.com 2019 - 2024. All rights reserved.