GitHub APIusers
は、 、orgs
およびのアクティビティ イベントの機能を提供しますrepos
。APIは、1 ページあたり30 で合計 300 の 10 ページまでのページネーションをサポートします。レート制限は、ヘッダーを使用して実現されます。この API をポーリングして、最新のアクティビティを取得しようとしています。ただし、前述のように Github でサポートされている設計のため、このスキームは非常に非効率的です。でリクエストをしたとしましょうevents
events
ETAG
page-1
https://api.github.com/users/me/events/orgs/my-org?page=1
ETAG
このページのエントリを取得します。今、私は次に移動しpage-2
、
https://api.github.com/users/me/events/orgs/my-org?page=2
ETAG
この 2 ページ目の を取得します。同様に、サポートされている 10 ページすべてからイベントを取得できます。
ここで、組織の Github アカウントで何らかのアクティビティが実行されたとしましょう。新しいイベントが 1 つだけ発生したとします。この場合poll
、 API を使用するpage-1
とETAG
、変更されたページと新しいページがevent
含まれて返されます。その前と同様polling
に、変更されたページも送信されます。ただし、この変更は、以前は の最後のイベントでしたが、現在は の一番上に移動しています。この「次へのシフト」は、すべてのページで発生します。発生した新しいイベントの数を確認する方法はありません。唯一の解決策は、ポーリングを継続して最新のイベントを取得することです。ただし、このアプローチには、以下で説明する重大な欠陥があります。page-2
ETAG
page-2
page-1
page-2
page-1
events
events
ラウンド間の新しい数がpoll
30 (1 ページの最大項目数) を超えると、状況はさらに悪化します。この場合、最新の新しい 30 イベントより前のイベントがpage-2
直接スリップします。私だけpoll
がオンの場合、にpage-1
スリップしたこれらのイベントが失われpage-2
ます。私の頭に浮かぶ唯一の解決策は、イベント全体のキャッシュを保持してから、すべてのページをスイープすることです。ただし、これは非常に非効率的で望ましくない方法であり、イベント通知 API の目的を無効にします。
一部のgithub-devがこれに答えてくれることを願っています