GitHub APIusersは、 、orgsおよびのアクティビティ イベントの機能を提供しますrepos。APIは、1 ページあたり30 で合計 300 の 10 ページまでのページネーションをサポートします。レート制限は、ヘッダーを使用して実現されます。この API をポーリングして、最新のアクティビティを取得しようとしています。ただし、前述のように Github でサポートされている設計のため、このスキームは非常に非効率的です。でリクエストをしたとしましょうeventseventsETAGpage-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-2ETAGpage-2page-1page-2page-1events
eventsラウンド間の新しい数がpoll30 (1 ページの最大項目数) を超えると、状況はさらに悪化します。この場合、最新の新しい 30 イベントより前のイベントがpage-2直接スリップします。私だけpollがオンの場合、にpage-1スリップしたこれらのイベントが失われpage-2ます。私の頭に浮かぶ唯一の解決策は、イベント全体のキャッシュを保持してから、すべてのページをスイープすることです。ただし、これは非常に非効率的で望ましくない方法であり、イベント通知 API の目的を無効にします。
一部のgithub-devがこれに答えてくれることを願っています