フィルタとバケットが分かった気がする
フィルタは、入力・出力を変更するために登録するフック関数。
バケットは、入力・出力の中身。
たとえば出力であれば、あるリクエストに対して以下のような出力フィルタスタックがあります。
filter1 |
filter2 |
filter3 |
filter4 |
my filter |
filter 5 |
my filterを、フィルタスタックに事前に登録しておくと、出力のたびに1つ上のfilter4から、my filterが呼ばれます。
その際にバケットグループというものを1つ上のフィルタから受け取ります。
受け取ったバケットグループの中身を書き換えて、次のfilter5に渡すと、fiter5から見ると、出力はすでに書き換わっていてそれに対して自分自身のフィルタ処理を行うことになります。
ポイントは2つあって
- フィルタがスタック上になっていて順々に呼び出されること。
- 出力は1つのリクエストに対して複数回起こることが多いので、細切れで出力が行なわれる。→フィルタは複数回呼ばれること。
2番目のフィルタが複数回呼ばれるというのが味噌で
「あいうえお」と出力するコンテンツでも
のように分割されて出力が読みだされるので、1回目・2回目の呼び出しの間に出力状態をどこかに保持しなければいけないということになります。
ノートにわかりやすい図を書いたのですが、デジタル化する手段がなかったのでtableになってて分かりづらいかも。