使用 GraphQL (v4 API) 在 GitHub 中搜索代码
Search for code in GitHub using GraphQL (v4 API)
我正在使用 GitHub 的 GraphQL API 来搜索包含特定单词的 files/code。一个简单的(人为的)搜索示例,在本例中是在位于 "recipes"(存储库)的文件中为 "someuser"(存储库的所有者)查找术语 "beef" 是如下所示:
{
search(query: "beef repo:someuser/recipes", type: REPOSITORY, first: 10) {
repositoryCount
edges {
node {
... on Repository {
name
}
}
}
}
}
我在 GitHub 的 GraphQL Explorer (https://developer.github.com/v4/explorer/) 中尝试了此操作,并从搜索中收到零结果,这是不正确的,因为我可以确认单词 ("beef" 在上面的例子)在 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.
我的问题是:
- 我是否错误地使用了 GitHub GraphQL (v4) API 或者我是否错误地指定了查询字符串,或者我是否正在尝试使用尚不支持的功能?
- 是否有人可以提供(或 link 提供)说明如何搜索特定单词的代码的示例?
尚不支持 Type: CODE
。您现在无法使用 graphql 搜索代码。
你的理解是对的。只是你少了一件。
您正在进行的搜索是针对 type: REPOSITORY
进行的。
如果您将搜索替换为
search(query: "beef", type: REPOSITORY, first: 10) {
您将获得所有名称中包含牛肉的回购协议。
如果您只想在名称中搜索 "beef" 而不是像
这样更改查询,则可以添加限定符
搜索(查询:"beef in:name",类型:REPOSITORY,第一个:10){
我正在使用 GitHub 的 GraphQL API 来搜索包含特定单词的 files/code。一个简单的(人为的)搜索示例,在本例中是在位于 "recipes"(存储库)的文件中为 "someuser"(存储库的所有者)查找术语 "beef" 是如下所示:
{
search(query: "beef repo:someuser/recipes", type: REPOSITORY, first: 10) {
repositoryCount
edges {
node {
... on Repository {
name
}
}
}
}
}
我在 GitHub 的 GraphQL Explorer (https://developer.github.com/v4/explorer/) 中尝试了此操作,并从搜索中收到零结果,这是不正确的,因为我可以确认单词 ("beef" 在上面的例子)在 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.
我的问题是:
- 我是否错误地使用了 GitHub GraphQL (v4) API 或者我是否错误地指定了查询字符串,或者我是否正在尝试使用尚不支持的功能?
- 是否有人可以提供(或 link 提供)说明如何搜索特定单词的代码的示例?
Type: CODE
。您现在无法使用 graphql 搜索代码。
你的理解是对的。只是你少了一件。
您正在进行的搜索是针对 type: REPOSITORY
进行的。
如果您将搜索替换为
search(query: "beef", type: REPOSITORY, first: 10) {
您将获得所有名称中包含牛肉的回购协议。
如果您只想在名称中搜索 "beef" 而不是像
这样更改查询,则可以添加限定符搜索(查询:"beef in:name",类型:REPOSITORY,第一个:10){