调用 GitHub API v4 GraphQL
总结
我正在描述GitHub API v4 GraphQL的以下内容。
v3 RESTとの比較
なぜ GraphQL なのか?
GraphQLクエリの例
実装例 ( bash )
実装例 ( python )
引用文献
关于v3 REST,我在下面撰写了一篇文章。
-
- GitHub API を 叩く – Qiita
- GitHubリポジトリのスター数でOSSランキングを作成する – Qiita
请参考PyFukuoka #7演讲时的资料,了解有关v4 GraphQL的内容。
通过Python快速入门图数据库 – 演讲人笔记
本文中的示例代码已放在以下位置。
loftkun/github-api-samples: 使用GitHub API的有用脚本。
V3对比V4
項目GitHub API v3 RESTGitHub API v4 GraphQLアーキテクチャRESTGraphQL認証オプション必須認証方式Basic or OAuth〃エンドポイント複数1つ
为什么选择GraphQL?
Github GraphQL API v4 | Github Developer Guide中提到了以下内容。
GraphQL lets you replace multiple REST requests with a single call to fetch the data you specify.
看起来可以将多个请求替换为一次调用有益处呢。
确实,v3 的每个PR或问题都有独立的终端点,但是在v4中,终端点只有一个,并且可以在查询中指定想要获取的PR或问题的条件。
GraphQL查询示例
这是一个搜索Python/Python-docs-ja的PR和Issue的查询示例。
query {
repository(owner:"python", name:"python-docs-ja") {
pullRequests(first: 2) {
nodes {
title
url
}
}
issues(last:2, states:CLOSED) {
edges {
node {
title
url
}
}
}
}
}
实现示例(bash)
这些示例存放在github-api-samples/demo.sh中。
这个例子展示了查询当前经过身份验证的用户信息。
# OAuthトークン
TOKEN=your_oauth_token
# Endpoint
API=https://api.github.com/graphql
curl -d @- -X POST -H "Authorization: bearer ${TOKEN}" "${API}" << EOF
{
"query": "query { viewer { login }}"
}
EOF
实现示例(Python)。
这些示例代码被放在了github-api-samples/demo.py文件中。
这个查询是用于搜索Python星标较多的存储库的示例。
def post(query):
headers = {"Authorization": "bearer " + token}
res = requests.post(endpoint, json=query, headers=headers)
if res.status_code != 200:
raise Exception("failed : {}".format(res.status_code))
return res.json()
# query
query={ 'query' : """
query {
search(query: "language:python stars:>=1000 sort:stars", type: REPOSITORY, first: 10) {
edges {
node {
... on Repository {
nameWithOwner
url
createdAt
description
stargazers{
totalCount
}
}
}
}
}
}
"""
}
# post
res = post(test)
print('{}'.format(json.dumps(res)))