3

我正在尝试使用 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
        }
      }
    }
  }
}

将感谢您的帮助。谢谢

4

2 回答 2

4

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

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 节点 ID以帮助过渡到 GraphQL 查询。

于 2018-06-27T04:06:04.447 回答
1

这是我的解决方案,希望对某人有所帮助:) 第一个答案是使用具有多个组织“Facebook”、“JavaScript”和存储库“360-Capture-SDK”、“排序数组”的 Array 变量. 如果您有 10 ,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
}
于 2018-06-27T10:53:05.953 回答