gpt4 book ai didi

graphql - 连接中的不透明游标应该在不同的字段参数中保持稳定吗?

转载 作者:行者123 更新时间:2023-12-02 18:41:15 24 4
gpt4 key购买 nike

RANGE_ADD 突变需要 edgeName,以便它可以将新边插入到客户端连接中。作为其查询的一部分,它还包括光标

问题是服务器无法知道客户端在生成边缘响应时可能将哪些参数应用于连接。

这是否意味着光标应该是稳定的?

最佳答案

一般来说,当连接使用不同的参数时,游标不需要相同。例如,如果我这样做:

{
namedFriends: friends(orderby:NAME first:5) {
edges { cursor, node { id } }
}
favoriteFriends: friends(orderby:FAVORITE first:5) {
edges { cursor, node { id } }
}
}

可能会使用不同的后端来服务这两个连接,因为我们可能为这两个排序使用不同的后端;因此,对于同一个 friend ,光标可能会有所不同,因为他们可能需要为不同的后端编码不同的信息。

但这使得执行突变时变得棘手:

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.
}
}
}

这是我们突变的常见模式。如果您遇到任何问题,请告诉我;在开发返回突变边缘的模式时,我们仔细考虑了“参数改变光标”的情况,以确保有一个可能的解决方案(当我们提出关于边缘字段的参数想法时),但它还没有在实践中出现了这么多,所以如果您遇到棘手的情况,一定要告诉我,我们可以而且应该重新审视这些假设/要求!

关于graphql - 连接中的不透明游标应该在不同的字段参数中保持稳定吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32613879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com