GitHub API
GitHub API
GitHub APIを使えば、GitHUbのWeb UI上で行っていた操作を自動化することができる。
Personal access token
APIの操作では認証にアクセストークを使用するので、あらかじめ作成しておく。
GitHubユーザのSettings -> Developer settings -> Personal access tokens
で生成
認証とレートリミット
Basic authentication
ベーシック認証。
1 | curl -u "username" https://api.github.com |
OAuth2 token (sent in a header)
OAuth2認証。GitHubはトークンを使った認証を推奨。
1 | curl -H "Authorization: token OAUTH-TOKEN" https://api.github.com |
レートリミット
For unauthenticated requests, the rate limit allows for up to 60 requests per hour. Unauthenticated requests are associated with the originating IP address, and not the user making requests.
未認証の場合、60req/hourのレートリミットがある。
For API requests using Basic Authentication or OAuth, you can make up to 5000 requests per hour. Authenticated requests are associated with the authenticated user, regardless of whether Basic Authentication or an OAuth token was used. This means that all OAuth applications authorized by a user share the same quota of 5000 requests per hour when they authenticate with different tokens owned by the same user.
認証した場合は、5000req/hourまで利用できる。
認証なしの場合
認証なしで実行した場合、X-RateLimit-Limit: 60
となっている。
1 | $curl -i https://api.github.com/users/octocat/orgs |
認証ありの場合
認証ありで実行した場合、X-RateLimit-Limit: 5000
となっている。
ベーシック認証の場合、curl -u
でユーザ名を指定。
1 | $curl -u ${GITHUB_USER} -i "https://api.github.com/users/${GITHUB_USER}/orgs" |
アクセストークンを使う場合、Authorization
ヘッダーでトークンを指定。
アクセストークン等は何度も使用するので、環境変数で設定する。
1 | $curl -H "Authorization: token ${GITHUB_TOKEN}" -i "https://api.github.com/users/${GITHUB_USER}/orgs" |
リポジトリ操作
トークンの権限
アクセストークンの権限でrepo
を許可しておく必要がある。
1 | repo Full control of private repositories |
リポジトリ作成
リポジトリ作成ではJSON形式で設定を行い、https://api.github.com/user/repos
にPOSTする。
1 | $ curl -H "Authorization: token ${GITHUB_TOKEN}" \ |
エラーの場合
1 | HTTP/1.1 400 Bad Request |
リポジトリ情報取得
1 | $ curl -H "Authorization: token ${GITHUB_TOKEN}" -i "https://api.github.com/repos/${GITHUB_USER}/test_repo" |
リポジトリ削除
アクセストークンの権限でdelete_repo
を許可しておく必要がある。
1 | $ curl -H "Authorization: token ${GITHUB_TOKEN}" -X DELETE -i "https://api.github.com/repos/${GITHUB_USER}/test_repo" |
権限がない場合は以下のエラーに。
1 | $ curl -H "Authorization: token ${GITHUB_TOKEN}" -i "https://api.github.com/repos/${GITHUB_USER}/test_repo" |