将多个游标作为变量传递给 GitHub GraphQL API?

Ale*_*lex 6 github-api graphql

我正在根据组织 ID 列表查找组织成员。每个组织都有一个分页的成员列表,带有endCursor. 由于每个endCursor都不同,并且每个组织都有不同数量的成员(和不同数量的页面),我如何将不同的游标作为变量传回?如果是这样,每个游标如何与上一个查询中的组织 ID 相关联?

query($orgIds:[ID!]!, $page_cursor:String) { // not sure how to pass in the cursor when different length lists are returned
    nodes(ids:$orgIds) {
        ... on Organization {
            id
            members(first: 100, after: $page_cursor) {
            edges {
                node {
                    id
                }
            }
            pageInfo {
                endCursor
                hasNextPage
            }
        }    
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了http://graphql.org/learn/pagination/,但我没有看到任何与为同一个边列表传递多个游标相关的内容。

Lar*_*sen 4

我没有在 graphql 规范中找到有关如何为同一边缘列表提供游标数组的任何详细信息。GitHub 必须为此提供一个自定义功能。虽然我有一种感觉,但这并不完全是您想要的。

每个节点都存在一个游标,因此如果将游标字段添加到边缘请求中,您将获得请求中所有节点的游标。

edges {
    cursor
    node {
        id
    }
}
Run Code Online (Sandbox Code Playgroud)

响应会变成这样:

"edges": [
    {
      "cursor": "Y3Vyc29yOnYyOpLOAANaVM4AA1pU",
      "node": {
        "id": "MDQ6VXNlcjIxOTczMg=="
      }
    },
Run Code Online (Sandbox Code Playgroud)

请注意,如果将“first:100”参数更改为“first:5”,则 endCursor 是不一样的,因为 endCursor 将是 5 个第一个结果的最后一个节点的最后一个光标。

从光标 ID 到组织 ID 的唯一参考是从 GitHub 的 graphql API 返回的对象的结构。示例中的任何光标都是特定组织的子项。

从我的角度来看,如果以后需要的话,您的客户应该记住该参考资料。考虑到这一点,您可能只想简单地遍历单个组织的页面,然后再转到下一个组织。(仅提供 1 个组织公关请求,而不是数组)。