使用GraphQL(v4 API)在GitHub中搜索代码

Eri*_*oda 17 github github-api graphql

我正在使用GitHub的GraphQL API来搜索包含特定单词的文件/代码.一个简单的(人为的)搜索示例,在这种情况下,在"食谱"(回购)中为"someuser"(回购的所有者)找到文件中的"牛肉"一词如下所示:

{
  search(query: "beef repo:someuser/recipes", type: REPOSITORY, first: 10) {
    repositoryCount
    edges {
      node {
        ... on Repository {
          name
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我在GitHub的GraphQL Explorer(https://developer.github.com/v4/explorer/)中尝试了这个并且从搜索中得到零结果是不正确的,因为我可以确认这个词(上例中的"牛肉")是在repo中的文件中:

{
  "data": {
    "search": {
      "repositoryCount": 0,
      "edges": []
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当我通过curl使用GitHub的REST API(v3)尝试这个时,我肯定会得到结果:

curl --header 'Accept: application/vnd.github.v3.raw' https://api.github.com/search/code?q=beef+repo:someuser/recipes
Run Code Online (Sandbox Code Playgroud)

...所以我知道查询(REST v3 API)是有效的,我的理解是GraphQL(v4)API中的查询字符串与REST(v3)API的查询字符串相同.

我的问题是:

  1. 我是否错误地使用了GitHub GraphQL(v4)API,或者我是否未正确指定查询字符串,或者我是否尝试使用尚不支持的功能?
  2. 有没有一个如何做到这一点的例子,有人可以提供(或链接)说明如何搜索特定单词的代码?

sre*_*vas 12

Type: CODE尚不支持.你现在无法使用graphql搜索代码.

你的理解是正确的.只是你错过了一件.您正在进行的搜索正在发生type: REPOSITORY.如果你用你的搜索替换

search(query: "beef", type: REPOSITORY, first: 10) {

你会得到所有名字中都有牛肉的回购品.

  • 我们现在4年了:) (6认同)
  • 三年后做到这一点 (3认同)
  • 5年!:))))) (3认同)
  • 更新:6年了!! (3认同)
  • 两年后,仍然不支持“ type:CODE”,我们仍然需要使用v3 API。 (2认同)