graphql - 使用过滤器参数和排序时如何在 GraphQL / Relay 中使用(不透明)游标
问题描述
想象一下以下 GraphQL 请求:
{
books(
first:10,
filter: [{field: TITLE, contains: "Potter"}],
orderBy: [{sort: PRICE, direction: DESC}, {sort: TITLE}]
)
}
结果将返回一个带有 Relay 游标信息的连接。
光标是否应该包含filter
和orderBy
细节?
这意味着查询下一组数据仅意味着:
{
books(first:10, after:"opaque-cursor")
}
还是应该重复filter
and ?orderBy
在后一种情况下,用户可以指定会使不透明光标无效的不同filter
和/或细节。orderBy
我在 Relay 规范中找不到任何关于此的内容。
解决方案
我已经看到这样做有多种方式,但我发现使用基于光标的分页,您的光标仅存在于您的数据集中,并且更改过滤器会更改数据集,使其无效。
如果您使用的是 SQL(或没有基于游标的分页),那么您需要在游标中包含足够的信息才能恢复它。您的光标需要包含您的所有过滤器/订单信息,并且您需要禁止任何额外的过滤器。
如果他们与“filter / orderBy”一起发送“after”,您将不得不抛出错误。您可以选择检查参数是否与光标中的参数相同,以防出现用户错误,但根本没有用例来获取不同数据集的“第 2 页”。
推荐阅读
- reactjs - 在 React 中计算两个累积值的分数的优雅方法
- javascript - 如何屏蔽 Material-ui FilledInput
- git - 为 GitHub 上的拉取请求删除并重新创建了分支。我怎样才能重新打开/推送它?
- java - Java 方法覆盖列表
- powershell-3.0 - 搜索字符串并替换它
- mysql - 如何使用 nifi CaptureChangeMySQL?
- javascript - React 简化开关和条件渲染?
- angular - http请求后在html文件中显示属性(Angular)
- sql - 有没有办法用 t-sql 创建列的“枢轴组”?
- r - 如何从使用 lapply 函数获得的几个数据帧中只获取几列?