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

时间:2017-06-06 05:44:01

标签: 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
            }
        }    
    }
}

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

1 个答案:

答案 0 :(得分:1)

我没有在graphql规范中找到有关如何为同一边缘列表提供游标数组的任何细节。 GitHub必须为此提出自定义功能。虽然我觉得这不是你想要的。

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

edges {
    cursor
    node {
        id
    }
}

响应会变成这样:

"edges": [
    {
      "cursor": "Y3Vyc29yOnYyOpLOAANaVM4AA1pU",
      "node": {
        "id": "MDQ6VXNlcjIxOTczMg=="
      }
    },

请注意,如果你改变“first:100”参数让endCursor说“first:5”,那么endCursor就不一样了,因为endCursor将是5个第一个结果的最后一个节点的最后一个光标。

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

从我的角度来看,如果需要,您的客户应该记住该参考。考虑到这一点,您可能希望在进入下一个组织之前简单地遍历单个组织的页面。 (仅提供1个组织pr请求,而不是数组)。