通过一次调用从 Github Graphql API 获取有关多个存储库的信息

Posted

技术标签:

【中文标题】通过一次调用从 Github Graphql API 获取有关多个存储库的信息【英文标题】:Get info about several repositories from Github Graphql API in a single call 【发布时间】:2020-04-11 02:45:40 【问题描述】:

我正在尝试创建对 Github GraphQL API 的查询,该查询接收存储库列表作为参数,并在单个 API 调用中返回这些存储库的信息,有人知道该怎么做吗?

类似这样的东西(我知道这行不通)

query myOrgRepos($repos: [String!]!) 
  search(query:"""
  repo in $repos
  """, type: REPOSITORY, first: 100) 
      repo: nodes 
          ... on Repository
              name
              description
              updatedAt
          
      
  

【问题讨论】:

我认为正确的方法是查询:"repo:org/repo1 repo:org/repo2 repo:org/repo3" 【参考方案1】:

我花了一些时间来理解你的评论,所以我会完整地发布答案。关键是在查询字符串中使用 Github 的高级搜索“语法”,示例见here。

以下查询将找到用户“github”的所有存储库以及用户“graphql”的graphql-js存储库:

query 
  search(query: "user:github repo:graphql/graphql-js" type: REPOSITORY first: 10) 
    nodes 
      ... on Repository 
        name
        description
        updatedAt
      
    
  

【讨论】:

【参考方案2】:

我对您的问题的理解是您想输入“已知”存储库的列表并输出有关它们的信息。在这种情况下,您可以形成以下类型的查询。


  nodes(ids: ["node_id_1", "node_id_2"]) 
    ... on Repository 
      nameWithOwner
      createdAt
    
  

这里的ids 是您感兴趣的存储库的node_ids。您可以通过单独的 GraphQL 调用获得这些,如下所示


  repository(owner: "owner", name: "name") 
    id
  

【讨论】:

以上是关于通过一次调用从 Github Graphql API 获取有关多个存储库的信息的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Apollo Server 端点获得完整的 GraphQL 架构?

从 curl 调用 GraphQL 端点意外失败

Github Automerge 失败通知(API v4 GraphQL 变异 enablePullRequestAutoMerge)

GraphQL 和 CSRF 保护

GraphQL:在一次网络调用中查询和变异

Apollo GraphQL:从服务器调用突变?