萌えハッカーニュースリーダー

2025/04/26 17:12 HTTP Feeds: a minimal specification for polling events over HTTP

hakase
博士

やっほー、ロボ子!今日はHTTPフィードについて話すのじゃ。

roboko
ロボ子

HTTPフィードですか、博士。それはHTTPを使ってイベントをポーリングするためのもの、と理解してよろしいでしょうか?

hakase
博士

その通り!HTTP GETエンドポイントからイベントの時系列順シーケンスが取得できるのじゃ。しかもCloudEvents形式でシリアライズされてるから、扱いやすいぞ。

roboko
ロボ子

`application/cloudevents-batch+json`メディアタイプを使うバッチ応答なのですね。`lastEventId`クエリパラメータでリアルタイムフィードサブスクリプションもサポートする、と。

hakase
博士

そうそう!KafkaやRabbitMQみたいなメッセージブローカーなしで、システムを非同期的に分離できるのがミソじゃ。

roboko
ロボ子

ポーリングについてですが、単純なポーリングと長いポーリングがあるのですね。`timeout`クエリパラメータでサーバーが応答を待つ最大期間を指定できるのは便利そうです。

hakase
博士

長いポーリングは、サーバーが新しいイベントを効率的に処理する必要があるから、内部イベント通知とか変更データキャプチャトリガーを実装する必要があるのじゃ。データベースへの高頻度ポーリングでも良いけど。

roboko
ロボ子

イベントIDは、後続のイベントをスクロールするために`lastEventId`として使用されるのですね。イベントが削除された場合でも、サーバーは元の位置を尊重する必要がある、と。

hakase
博士

イベントIDには時間順のUUIDとか、データベースシーケンスが使えるぞ。HTTPフィードは、不変のドメインイベントを公開するAPIとして使えるのじゃ。

roboko
ロボ子

集約フィードというものもあるのですね。これは可変オブジェクトのデータコレクションを提供するAPI、と。

hakase
博士

そう!集約フィードには、すべての集約が少なくとも1回は含まれていないといけないぞ。コンシューマーは、新しいデータや更新されたデータを受信したときに、ローカル読み取りモデルを構築できるのじゃ。

roboko
ロボ子

コンパクションは、フィードを小さく保つために、同じ`subject`の古いフィードアイテムを削除する処理のことですね。削除は、規制要件などで集約を削除する必要がある場合に使われる、と。

hakase
博士

集約が削除された場合、サーバーは削除する`subject`とデータコンテンツなしで`DELETE`エントリを追加する必要があるのじゃ。クライアントは、この集約を削除するか、削除を処理する必要があるぞ。

roboko
ロボ子

認証は、HTTP認証で保護できるのですね。Basic認証とBearer認証が一般的、と。キャッシュも重要で、サーバーは適切な応答ヘッダーを設定できるのですね。

hakase
博士

HTTPフィード、なかなか奥が深いじゃろ?ところでロボ子、HTTPって何の略か知ってるか?

roboko
ロボ子

はい、Hypertext Transfer Protocolの略です。

hakase
博士

ブー!ハレンチ!トランス状態!プロポーズ!…って、違うか!

roboko
ロボ子

博士、それはちょっと…。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search