Open6
Github GraphQL API レート制限
レート制限は 1時間あたり 5,000ポイント
スコア計算について
GraphQL API v4は呼び出しのレート制限スコアを正規化されたポイントのスケールに基づいて計算します。 クエリのスコアは、親のコネクションやその子のfirst及びlast引数を計算に入れます。
・この式は、MySQLやElasticSearch、GitといったGitHubのシステムの潜在的な負荷を事前計算するために、親のコネクション及びその子のfirst及びlast引数を使います。
・新しいコネクションはそれぞれ独自のポイント値を持ちます。 ポイントは呼び出しからの他のポイントと組み合わされて、全体としてのレート制限スコアになります。
reteLimit オブジェクトのフィールドをクエリすることで、対象のクエリのレート制限のスコアを把握する事ができる。
当然、スコアを知るためのクエリにもスコア計算は適用される。
query {
viewer {
login
}
rateLimit {
limit
cost
remaining
resetAt
}
}
スコアの計算方法
- リソースを取得するために必要なリクエスト数を
first
,last
の引数の最大数を掛け合わせて計算する - 合計値を100で割り、結果を丸めた値がスコアとして消費される
次のクエリのスコアを計算してみる
- 最初に100件のプルリクエストを取得するためのリクエストは1回なので リクエスト数 = 1
- 100件のレビューとレビューリクエストを取得するために、100件のプルリクエストに接続する必要があるので リクエスト数 = 100
- 合計 = 101
- スコア = 101 / 100 = 1.01 = 1
query {
search(type: ISSUE, query: "react", last: 100) {
nodes {
... on PullRequest {
reviews(last: 100) {
totalCount
}
reviewRequests(last: 100) {
totalCount
}
}
}
}
}
次のクエリを Github Explorer で実行して答え合わせ
query {
search(type: ISSUE, query: "react", last: 100) {
nodes {
... on PullRequest {
reviews(last: 100) {
totalCount
}
reviewRequests(last: 100) {
totalCount
}
}
}
}
rateLimit {
cost
}
}
合ってる
{
"data": {
"search": {
"rateLimit": {
"cost": 1
}
}
}
}