Github からすべてのリポジトリのリストを取得して分析しようとしています。Restful API である v3.0 API を使用して仕事を開始し、星の数などの詳細情報が必要になったときに、v3.0 から GraphQL として提供される v4.0 に移行しました。現在、毎回 100 レコードを要求し、これを再帰的に実行して、すべてのレコードを取得できるようにしています。
問題は、ページネーションの仕事についてです。ページネーションを機能させるには、各リクエストの endCursor を取得する必要があり、次のリクエストでは、プロパティの後にこの値を入力する必要があります。問題は、データが適切にページ分割されていないことです。例えば:
- 最初のページ (カーソルなし) を要求すると、異なるレコードが生成されます。
- 同じカーソルでページを複数回リクエストすると、異なる結果も取得されます。
- また、単純にこれをチェックせずに次々とフェッチしようとすると、100 レコードごとに以前のリクエストとの重複が多くなり、ページネーションが正しく機能しません。
私が(nodejsアプリで)送信しているクエリは次のとおりです。
{
search(query: "is:public", type: REPOSITORY, first: 100, after: "Y3Vyc29yOjEwMA==") {
repositoryCount
userCount
wikiCount
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
edges {
node {
... on Repository {
databaseId
id
name
description
forkCount
isFork
issues {
totalCount
}
labels (first: 100) {
nodes {
name
}
}
languages (first: 100) {
nodes {
name
}
}
licenseInfo {
name
}
nameWithOwner
primaryLanguage {
name
}
pullRequests {
totalCount
}
watchers {
totalCount
}
stargazers {
totalCount
}
}
}
}
}
}
以前に言ったように、最初に、検索入力からパラメータ after を削除し、前のリクエストの endCursor を次のリクエストの after パラメータとして使用します。
カーソルの目的とその使用法を理解していないのですか、それとも Github 自体のバグ (意図的/意図的でない) ですか?