Middlewareをもう少し考えてみた
もう少しMiddlewareを考えてみたんですが、HTTP::Engineのコンストラクタのパラメータのrequest_handlerがCodeRefではなくて、クラスになっているとMiddlewareを作りやすいんじゃないかという気が少ししました。
イメージとしては以下のような感じ。
- RequestHandlerのようなクラスを用意して、それがCompositeできるようにする。- RequestHandlerはhandle_requestメソッドを持つ
- 各種MiddlewareはRequestHandler Roleをconsumeして、そのhandle_requestメソッドを実装する。次のrequest_handlerを呼ぶために自身が保持するRequestHandlerのインスタンスのhandle_requestメソッドを呼ぶ。
- RequestHandlerからはengineのインスタンスが参照できるようにして、metaをいじれるようにして、request lifecycleのhook pointへ処理を追加できるようにする。
- ただ、Engineのインスタンスをどこで保持したほうがいいのかがいまいちわからず。
- HTTP::EngineにはRequestHandlerのインスタンスを渡す
- coderefではなくて、RequestHandlerのインスタンスのhandle_requestメソッドを実行する形にする
Rackとかを見ると、このMiddlewareをCompositeさせるのに簡単なBuilderクラスを用意してるみたいですね。HTTPx::Builderとか用意してyamlに列挙したMiddleware郡を組み立てるイメージかなぁ。
# HEConいけなかったけど、動画とかどこかで見れるのかなぁ