【问题标题】:GitHub graphQL API multiple queries on organizations & repositoriesGitHub graphQL API 对组织和存储库的多个查询
【发布时间】:2018-12-05 10:26:37
【问题描述】:

我正在尝试使用 graphQL 从 GitHub 获取多个组织和存储库数据。我在下面编写的代码仅获得 1 个组织和存储库。 我想使用两个 Array [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
        }
      }
    }
  }
}

将不胜感激。 谢谢

【问题讨论】:

    标签: github github-graphql


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      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 查询。

      【讨论】:

      • 感谢您的快速回答,尽管我已经这样做了。但在我看来,使用 ID 数组一点也不舒服,就像在有 DNS 时使用 ip。我正在寻找一个解决方案,我将能够传递一个组织和存储库名称的数组,它更方便。可能他们还没有。也许这就是现在的答案。
      • ID 数组更接近于使用 MAC 地址(或某些唯一标识符的概念),因为存储库/组织名称可以更改。使用 ID 将处理用户修改名称。另外,您可以批处理 ID 数组以避免进行多个查询,这对于两个应用程序处理/实现来说也可能更有效。
      猜你喜欢
      • 1970-01-01
      • 2018-03-26
      • 2018-09-09
      • 2018-09-01
      • 1970-01-01
      • 2018-06-15
      • 2019-08-20
      • 2020-09-26
      • 2021-04-26
      相关资源
      最近更新 更多