GitHub graphQL API对组织和存储库的多个查询

时间:2018-06-26 16:10:55

标签: github github-graphql

我正在尝试使用graphQL从GitHub获取多个组织和存储库数据。我在下面编写的代码仅获得1个组织和存储库。 我以为使用两个数组[String!]的变量,一个用于组织,第二个用于存储库。 所以

organization(login:"javascript") {...} 

应该是

organization(login:$organization) {...}

repository(owner:"javascript", name:"sorted-array") {...}

应该是

repository(owner:$organization, name:$repository) {...}

但是我找不到如何在下面的代码中实现变量。

query {
  rateLimit{
  cost
  remaining
  resetAt
 }
organization(login:"javascript") {
    repositories{
      totalCount
    }
  }
  repository(owner:"javascript", name:"sorted-array") {
    updatedAt
    branches: refs(refPrefix:"refs/heads/") {
      totalCount
    }
    tags: refs(refPrefix:"refs/tags/") {
      totalCount
    }
    releases {
      totalCount
    }
    object(expression:"master") {
      ... on Commit {
        committedDate
        history {
          totalCount
        }
      }
    }
  }
}

将感谢您的帮助。 谢谢

2 个答案:

答案 0 :(得分:1)

这是更新为使用变量的请求

query getOrg($owner: String!, $repo: String! ){
    organization(login:$owner) {
    repositories{
        totalCount
    }
  }
  repository(owner:$owner, name:$repo) {
    updatedAt
    branches: refs(refPrefix:"refs/heads/") {
      totalCount
    }
    tags: refs(refPrefix:"refs/tags/") {
      totalCount
    }
    releases {
      totalCount
    }
    object(expression:"master") {
      ... on Commit {
        committedDate
        history {
          totalCount
        }
      }
    }
  }
}

但是,使用GraphQL节点ID作为输入数组可能会更好地为您服务。使用组织或存储库的节点ID,类似...

query inputArray($id: [ID!]!){
  nodes(ids: $id){
    ...on Repository{
      id
    }
  }
}

请注意,API的GitHub V3支持返回GraphQL Node IDs,以帮助过渡到GraphQL查询。

答案 1 :(得分:1)

这是我的解决方案,希望对您有所帮助:) 第一个答案是将数组变量与组织“ Facebook”,“ JavaScript”和“ 存储库“ 360-Capture-SDK”,“排序数组”。 如果您有10个,20个或20个以上的组织/存储库,则将有很多时间从REST API中获取ID:)。

query inputArray($idOrg: [ID!]! $idRepo: [ID!]!){
  orgNode:nodes(ids: $idOrg){
    ...on Organization{
      name
    }
  }
  repNode:nodes(ids: $idRepo){
    ...on Repository{
      name
    }
  }
}

{
  "idOrg": ["MDEyOk9yZ2FuaXphdGlvbjY5NjMx","MDEyOk9yZ2FuaXphdGlvbjE3ODIxODA="],
  "idRepo":["MDEwOlJlcG9zaXRvcnk4Njg2MDg0Nw==","MDEwOlJlcG9zaXRvcnk5NzkxMTYy"]
}

第二个答案虽然麻烦,但却使用了更具可读性的方法。

query{
  FacebookOrg: organization(login: "facebook") {
    ...OrgInfo
  }

  JavaScriptOrg: organization(login: "javaScript") {
    ...OrgInfo
  }

  FacebookRep: repository(owner: "facebook" name:"360-Capture-SDK"){
    ...RepInfo
  }

  JavaScriptRep: repository(owner: "javaScript" name:"sorted-array"){
    ...RepInfo
  }
}

fragment OrgInfo on Organization {
  name
}

fragment RepInfo on Repository {
  name
}