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とかがあると、本当にフレームワーク開発は楽になりそうですね。