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

时间:2017-07-28 20:40:51

标签: github graphql github-api

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

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

我在GitHub的GraphQL资源管理器(https://developer.github.com/v4/explorer/)中尝试过此操作并且从搜索中得到零结果,这是不正确的,因为我可以确认单词("牛肉"在示例中上面的文件在repo:

{
  "data": {
    "search": {
      "repositoryCount": 0,
      "edges": []
    }
  }
}

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

curl --header 'Accept: application/vnd.github.v3.raw' https://api.github.com/search/code?q=beef+repo:someuser/recipes

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

我的问题是:

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

2 个答案:

答案 0 :(得分:10)

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

您的理解是正确的。只是你错过了一件。 您正在进行的搜索是针对type: REPOSITORY进行的。 如果用

替换搜索

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

你将得到所有以他们名字命名牛肉的回购品。

答案 1 :(得分:0)

如果要仅用名称搜索“牛肉”而不是像

那样更改查询,则可以添加限定词。

search(查询:“ beef in:name”,键入:REPOSITORY,第一个:10){

有关更多详细信息,请查看https://help.github.com/en/articles/searching-for-repositories#search-based-on-the-contents-of-a-repository