HTTP キャッシングを使用するだけでユースケースに十分でしょうか? HTTP キャッシングの目的は、すでに新しい応答がある場合に要求を作成しない方法を提供することだけではなく、キャッシュに既にある応答が有効かどうかを (サーバーが完全な応答を送信することなく) 迅速に検証できるようにすることでもあります。新鮮な場合は再度応答します)。
GitHub API の応答を見ると、GitHub が関連する HTTP ヘッダー (ETag、Last-modified、Cache-control) を正しく設定していることがわかります。
したがって、次のように GET を実行するだけです。
GET https://api.github.com/users/izuzak/repos
これは次を返します。
200 OK
...
ETag:"df739f00c5053d12ef3c625ad6b0fd08"
Last-Modified:Thu, 14 Feb 2013 22:31:14 GMT
...
次回は、同じリソースに対して GET を実行しますが、実際には条件付き GET になるように、関連する HTTP キャッシュ ヘッダーも提供します。
GET https://api.github.com/users/izuzak/repos
...
If-Modified-Since:Thu, 14 Feb 2013 22:31:14 GMT
If-None-Match:"df739f00c5053d12ef3c625ad6b0fd08"
...
見よ、サーバーは 304 Not modified 応答を返し、HTTP クライアントはその応答をキャッシュからプルします。
304 Not Modified
したがって、GitHub API は HTTP キャッシングを正しく行うので、それを使用する必要があります。確かに、HTTP キャッシングもサポートする HTTP クライアントを使用する必要があります。最善の方法は、304 Not modified 応答を受け取った場合、GitHub は残りの API 呼び出しクォータを減らさないことです。参照: https://docs.github.com/en/rest/overview/resources-in-the-rest-api#conditional-requests
GitHub API もCache-Control: private, max-age=60
ヘッダーを設定するため、60 秒の鮮度があります。つまり、60 秒以内に行われた同じリソースへのリクエストはサーバーに対して行われません。
リポジトリ内の何かが変更された場合に確実に変更されるリソース (たとえば、HEAD の sha を示すリソース) に対して単一の条件付き GET 要求を使用することについてのあなたの推論は、合理的に聞こえます。確かに変更されていないため、個々のファイルを確認する必要はありません。