通过GraphQL端点通过ID获取GitHub问题 [英] get github issues by their ids through graphql endpoints

查看:18
本文介绍了通过GraphQL端点通过ID获取GitHub问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用GraphQL从Github获取按ID列出的问题列表,但看起来我遗漏了什么,或者这是不可能的。

query ($ids:['517','510']!) {
  repository(owner:"owner", name:"repo") {
    issues(last:20, states:CLOSED) {
      edges {
        node {
          title
          url
          body
          author{
            login
          }
          labels(first:5) {
            edges {
              node {
                name
              }
            }
          }
        }
      }
    }
  }
}

以上查询给我的响应如下

{
  "errors": [
    {
      "message": "Parse error on "'" (error) at [1, 14]",
      "locations": [
        {
          "line": 1,
          "column": 14
        }
      ]
    }
  ]
}

请帮助我确定是否可能,或者我是否做错了什么。

推荐答案

可以使用aliases构建单个请求请求多个issue对象:

{
  repository(name: "material-ui", owner: "mui-org") {
    issue1: issue(number: 2) {
      title
      createdAt
    }
    issue2: issue(number: 3) {
      title
      createdAt
    }
    issue3: issue(number: 10) {
      title
      createdAt
    }
  }
}

Try it in the explorer

这提供了:

{
  "data": {
    "repository": {
      "issue1": {
        "title": "Support for ref's on Input component",
        "createdAt": "2014-10-15T15:49:13Z"
      },
      "issue2": {
        "title": "Unable to pass onChange event to Input component",
        "createdAt": "2014-10-15T16:23:28Z"
      },
      "issue3": {
        "title": "Is it possible for me to make this work if I'm using React version 0.12.0?",
        "createdAt": "2014-10-30T14:11:59Z"
      }
    }
  }
}

也可以使用fragments简化此请求以防止重复:

{
  repository(name: "material-ui", owner: "mui-org") {
    issue1: issue(number: 2) {
      ...IssueFragment
    }
    issue2: issue(number: 3) {
      ...IssueFragment
    }
    issue3: issue(number: 10) {
      ...IssueFragment
    }
  }
}

fragment IssueFragment on Issue {
  title
  createdAt
}

可以通过编程方式构建请求,如本例中的脚本:

import requests

token = "YOUR_TOKEN"
issueIds = [2,3,10]
repoName = "material-ui"
repoOwner = "mui-org"

query = """
query($name: String!, $owner: String!) {
  repository(name: $name, owner: $owner) {
    %s
  }
}

fragment IssueFragment on Issue {
  title
  createdAt
}
"""

issueFragments = "".join([
    """
    issue%d: issue(number: %d) {
      ...IssueFragment
    }""" % (t,t) for t in issueIds
])
r = requests.post("https://api.github.com/graphql",
    headers = {
        "Authorization": f"Bearer {token}"
    },
    json = {
        "query": query % issueFragments,
        "variables": {
            "name": repoName,
            "owner": repoOwner
        }
    }
)
print(r.json()["data"]["repository"])

这篇关于通过GraphQL端点通过ID获取GitHub问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆