WAFの拡張ポイント

Sledge, Catalyst, Rails, Merbあたりを見て、フレームワークの拡張方法と拡張のポイントを考えてみました。

拡張するポイントは以下の5点。

  • Dispatcher
  • Controller
  • View
  • Middleware
  • (Context)

Server(Dispatcher)

  • PluginのHookポイント
    • AFTER_INIT
    • BEFORE_DISPATCH
      • Controllerのインスタンスにディスパッチしてactionを実行する前に、Pluginを実行する系。Controller毎のHookではないGlobalなHook
      • BEFORE_DISPATCHとかにAuthentication系のPlugin
    • AFTER_DISPATCH

View系のPlugin

  • PluginのHookポイント
    • AFTER_INIT
    • BEFORE_RENDER
      • Viewで結果をrenderingする前のPlugin
    • AFTER_RENDER
    • Viewで結果をrenderingする際のFilter

Controller系の拡張

Controller系はHook pointにHookするという形のPlugin形式ではなくて、RoleによるMixinによる拡張がいいかなと。それとFilterを組み合わせて使うという形にしようかなぁと思っている。

  • Controller::Role::XXX
    • MixinによるController拡張
    • Angelos::Controller::Role::FormValidator::Simple など
      • ここの仕様を検討する必要あり 。merbライクにするかってところだなぁ
  • before_filter, after_filter
    • Actionが実行される前後で実行されるFilter。
      • Catalystだと、begin, auto, endに対応するもの
      • Railsのbefore_filter, after_filter, Merbだとbefer, afterに対応するもの

Middleware

Context

  • CatalystのContext系のPluginをどうするかは少し考え中
    • 必要なのはi18n系くらいかなぁという気がしていて、あえてPluginにせずにcoreに組み込んじゃえばいいかなぁという気はする

上記で考えたHookについては、http://github.com/dann/angelos/tree/master に実装をいれてあります。