1

我几乎完成了 NodeJS 的包https://github.com/nodkz/graphql-compose-connection,它允许为使用 graphql-compose 构建的 graphql 类型构建连接类型。

该软件包完全遵循中继光标连接规范 ( https://facebook.github.io/relay/graphql/connections.htm ),并添加了很多功能:filterarg(用于过滤记录)和sortarg(用于按唯一索引对记录进行排序)。

所以我有以下关于光标唯一性的问题:

1)游标在不同类型中应该是唯一的吗?

2) cursor 在具有不同参数的一个连接中是否应该是唯一的?

例如。在 UserConnection 我有过滤器 arg。我想在第一个列表中显示所有用户,在第二个列表中显示在线用户(页面上同时显示 2 个列表)。两个列表中可能存在一个具有相同光标的用户。

3)如果Relay在一个连接中得到相似的游标,会报错吗?

4) 游标应该是 base64 编码,还是可能包含字符串化的 json 对象?

4

1 回答 1

1

1)游标在不同类型中应该是唯一的吗?

如果您的问题是“游标应该是全局唯一的”,那么答案是否定的。它们不像 ID,ID 在 Relay 中必须是全局唯一的,以便于重新获取(用于区分)。游标可以像“100”或“101”这样简单,尽管在实践中通常包含比这更具描述性和/或结构化的东西。

2) cursor 在具有不同参数的一个连接中是否应该是唯一的?

例如。在 UserConnection 我有过滤器 arg。我想在第一个列表中显示所有用户,在第二个列表中显示在线用户(页面上同时显示 2 个列表)。两个列表中可能存在一个具有相同光标的用户。

这是特定于实现的事情。光标的指向是启用分页,其内容是任意的。简单地说,它应该包含足够的信息以及连接上的其他参数,以使服务器上的 GraphQL 模式能够确定它应该为下一个 ( after) 或上一个 ( before) 页面返回什么。

3)如果Relay在一个连接中得到相似的游标,会报错吗?

我不确定它是否会,但你可以试试看。即使它没有抛出错误,它也可能没有意义。游标的目的是允许您指定分页的相对起点,所以如果游标“x”出现在连接中的两个不同位置,“x 之后的前 10”是什么意思?

4) 游标应该是 base64 编码,还是可能包含字符串化的 json 对象?

Base64 是我们按照惯例做的事情,不是因为它是强制性的,而是为了更清楚地表明游标应该被视为不透明的标记,其内部结构不应该被依赖。它们是特定于实现的。因此,我相信您可以根据需要使用 JSON 字符串,但 Base64 编码有一些好处。

于 2016-07-15T14:20:32.917 回答