GraphQL Connections for Relay有哪些限制?

时间:2016-07-14 08:59:13

标签: connection graphql relay

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

这个包完全遵循Relay Cursor Connections Specification(https://facebook.github.io/relay/graphql/connections.htm),添加了很多:filter arg(用于过滤记录)和sort arg(用于按唯一索引排序记录)。

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

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

2)光标在具有不同args的一个连接中是唯一的吗?

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

3)如果Relay在一个连接中获得类似的游标,它会抛出错误吗?

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

1 个答案:

答案 0 :(得分:1)

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

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

2)光标在具有不同args的一个连接中是唯一的吗?

  

EG。在UserConnection中我有过滤器arg。我希望显示所有用户   在第一个列表中和在第二个列表中的在线用户(同时列出2个   在页面上)。一个具有相同光标的用户可能存在于两个列表中。

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

3)如果Relay在一个连接中获得类似的游标,它会抛出错误吗?

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

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

Base64是我们按惯例做的事情,不是因为它是强制性的,为了更清楚地说明游标应该被认为是不透明的令牌,其内部结构不应该被依赖。它们是特定于实现的。所以,我相信如果你愿意,你可以使用JSON字符串,但Base64编码有一些好处。