通过GitHub GraphQL API一次性获取任意信息
这篇文章是Akatsuki Advent Calendar 2018第10天的文章。
触动
在使用GitHub上的任意信息进行提取时,我之前使用脚本来多次执行REST API,但根据所说的,如果使用GraphQL API,可以简单地获取所需信息,所以我将写下实际尝试过的内容。
为了帮助大家了解它可以以这种方式使用,我将主要通过使用它来进行进展。
GraphQL API的使用方法
GitHub GraphQL API可以在Explorer中轻松执行。
https://developer.github.com/v4/explorer/
试着动一下。
这次我将尝试编写一个查询,以获取与我的项目相关的团队可以访问的存储库列表。
query {
organization(login: "組織のアカウント名"){
name,
login,
teams(query: "検索ワード",first: 100){
totalCount,
edges{
node{
name,
repositories(first: 100){
totalCount,
edges{
node{
nameWithOwner
}
}
}
}
}
}
}
}
执行此操作将返回如下的数据。
{
"data": {
"organization": {
"name": "組織名",
"login": "組織のアカウント名",
"teams": {
"totalCount": 9,
"edges": [
{
"node": {
"name": "チーム名",
"repositories": {
"totalCount": 32,
"edges": [
{
"node": {
"nameWithOwner": "所有者/リポジトリ名"
}
},
{
"node": {
"nameWithOwner": "所有者/リポジトリ名"
}
}
・
(長いので省略)
・
]
}
}
},
・
(長いので省略)
・
]
}
}
}
}
以这种方式,您可以轻松获取所需的信息。
查询说明
查询 {
GraphQL有两种类型,即”Query”和”Mutation”。
“Query”用于获取数据,”Mutation”用于修改数据。
由于我们想要获取数据,所以使用query。
通过给定的登录参数获取组织对象。此处必须提供login参数,将组织的账户名作为参数输入。
获取组织中存在的团队对象。
您可以通过在查询中放入与团队名称相关的字符串来筛选。
由于我们的项目有团队命名规则,所以我们将搜索词设定为引发相关问题的内容。
first将显示列表中的前n项。由于最多只能指定100项,所以如果超过这个数目,您可以使用after(返回指定游标后的列表元素)来更改显示范围以进行处理。
edges{
由于teams具有多个团队的数据,所以要访问每个数据,需要通过边缘进行访问。
边缘具有识别节点的信息,如光标等。
节点{
包含团队的数据(例如,团队名称等团队本身的信息)。
}
总结
试用这样的用法后,我发现通过一个查询就可以获得想要的信息,并且explorer的使用体验也相当好。同时,我也第一次接触到了GraphQL,我觉得它实现了简单而无废的API请求,这非常吸引人。
在开发游戏时,由于规格变更,API的修改会发生,每次都需要付出相应的适应成本。因此,我在考虑着是否可以解决这些问题,并且希望能更深入地理解GraphQL。