HTTP::EngineでのMiddlewareの実装イメージ
http://blog.yappo.jp/yappo/archives/000628.html
おぉ、そういえばmooseなんだなぁというのをこれを見て思い出しました。yappoさんが書いてる例のように、request lifecycleをmetaを触ってhookすることはできるので、Middlewareの実装方法はなんかわかった気がしました。
Middlewareの実装のイメージは、
- engineのインスタンス渡して、hookしたいものにmodifire追加
- Middleware isa Engineみたいな関係にして、Middlewareをデコレータとしてwrap
- Middlewareで多重にwarpしたEngine(WSGIではappとかいってるやつ)をrunして動かす
こうすれば、SessionとかAuth用のMiddlewareは作れそうですね。
MooseX::Object::Pluggableみたいな形で、MiddlewareをDevel::REPLのPluginっぽく扱ってrequest lifecycleをhookするというほうが、Mooseっぽいのかなぁという気も少ししたのですが、WSGIのMiddlewareのイメージからはずれちゃうのかもしれないですね。
Middlewareまわりの仕様を理解するために、Rackの実装でも今度みてみようかなぁと。
# HTTPx::Middleware::Session, HTTPx::Middleware::Authとかがあると、本当にフレームワーク開発は楽になりそうですね。