连接中的不透明光标是不是应该在不同的字段参数中保持稳定?
Posted
技术标签:
【中文标题】连接中的不透明光标是不是应该在不同的字段参数中保持稳定?【英文标题】:Should the opaque cursors in connections be stable across different field args?连接中的不透明光标是否应该在不同的字段参数中保持稳定? 【发布时间】:2015-12-13 08:26:31 【问题描述】:RANGE_ADD
突变需要edgeName
,以便它可以将新边缘插入客户端连接。作为其查询的一部分,它还包括cursor
。
问题是服务器无法知道客户端在生成边缘响应时可能会将哪些参数应用于连接。
这是否意味着cursor
应该是稳定的?
【问题讨论】:
【参考方案1】:一般来说,当连接与不同的参数一起使用时,游标不需要相同。例如,如果我这样做了:
namedFriends: friends(orderby:NAME first:5)
edges cursor, node id
favoriteFriends: friends(orderby:FAVORITE first:5)
edges cursor, node id
可能会使用不同的后端来为这两个连接提供服务,因为这两个排序可能有不同的后端;因此,同一朋友的游标可能不同,因为它们可能需要为不同的后端编码不同的信息。
这使得在执行突变时变得很棘手:
mutation M
addFriend($input)
newFriendsEdge
cursor, node id // Which cursor is this?
在这种情况下,突变将从连接返回一条边,字段接受与连接相同的非分页参数很有用。所以在上述情况下,我们会这样做:
mutation M
addFriend($input)
newNamedFriendsEdge: newFriendsEdge(orderby:NAME)
cursor, node id // Cursor for namedFriends
newFavoriteFriendsEdge: newFriendsEdge(orderby:FAVORITE)
cursor, node id // Cursor for favoriteFriends
理想情况下,newFriendsEdge(orderby:FAVORITE)
和 favoriteFriends: friends(orderby:FAVORITE first:5)
的实现共享通用代码来生成游标。
请注意,虽然游标不需要相同,但作为服务器的实现细节,如果它们相同就可以了。通常,光标只是节点的 ID,这是发生这种情况的常见方式。在实践中,在这些情况下,如果连接上的参数不影响光标,我们会从突变的边缘字段中省略它;所以如果orderby
不影响光标,那么:
mutation M
addFriend($input)
newFriendsEdge
cursor, node id // orderby didn't exist on newFriendsEdge, so this cursor must apply to both.
这是我们突变的常见模式。如果您遇到任何问题,请告诉我;我们在开发突变返回边的模式时考虑了“参数更改光标”的情况,以确保有可能的解决方案(这是当我们提出关于边场想法的参数时),但它没有在实践中提出了这么多,所以如果你遇到棘手的问题一定要告诉我,我们可以而且应该重新审视这些假设/要求!
【讨论】:
以上是关于连接中的不透明光标是不是应该在不同的字段参数中保持稳定?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Javascript onkeyup() 更改 IE8 中的不透明度(再次)