通过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/

スクリーンショット 2018-12-09 22.00.04.png

试着动一下。

这次我将尝试编写一个查询,以获取与我的项目相关的团队可以访问的存储库列表。

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": "所有者/リポジトリ名"
                    }
                  }
          ・
          (長いので省略)
          ・
                ]
              }
            }
          },
          ・
          (長いので省略)
          ・
        ]
      }
    }
  }
}

以这种方式,您可以轻松获取所需的信息。

スクリーンショット 2018-12-09 22.02.24.png

查询说明

查询 {
GraphQL有两种类型,即”Query”和”Mutation”。
“Query”用于获取数据,”Mutation”用于修改数据。
由于我们想要获取数据,所以使用query。

通过给定的登录参数获取组织对象。此处必须提供login参数,将组织的账户名作为参数输入。

获取组织中存在的团队对象。
您可以通过在查询中放入与团队名称相关的字符串来筛选。
由于我们的项目有团队命名规则,所以我们将搜索词设定为引发相关问题的内容。
first将显示列表中的前n项。由于最多只能指定100项,所以如果超过这个数目,您可以使用after(返回指定游标后的列表元素)来更改显示范围以进行处理。

edges{
由于teams具有多个团队的数据,所以要访问每个数据,需要通过边缘进行访问。
边缘具有识别节点的信息,如光标等。

节点{
包含团队的数据(例如,团队名称等团队本身的信息)。
}

总结

试用这样的用法后,我发现通过一个查询就可以获得想要的信息,并且explorer的使用体验也相当好。同时,我也第一次接触到了GraphQL,我觉得它实现了简单而无废的API请求,这非常吸引人。

在开发游戏时,由于规格变更,API的修改会发生,每次都需要付出相应的适应成本。因此,我在考虑着是否可以解决这些问题,并且希望能更深入地理解GraphQL。

广告
将在 10 秒后关闭
bannerAds