WAFに必要な要素
この1ヶ月はPerlとRubyのWAFのコードは大分読んで、必要な要素がわかったので、angelosのクラス構成をベースに簡単にまとめてみました。
http://github.com/dann/angelos/tree/master
WAF Core
- Application Class (Angelos.pm)
- WAF全体のsetup
- Component
- Controller
- View
- (Model)
- Component Loader
- Componentの読み込みと組み立て(Pluginの組み込み)
- mstがCatalystでDIコンテナを使いたいといっててのはここの部分ですね
- Engine
- Dispatcher
- Routing + Controllerへのdispatch
- HTTP::Router + α
- Routing + Controllerへのdispatch
- Engine拡張
- Middleware
- request handlerをwrap
- Middleware
- プラグイン機構 (Angelos::Class)
- Angelos::Class::Hookable
- hook機構によるプラグイン機構。MouseX::Plaggerizeからfork予定.
- Angelos::Class::Mixinable
- Mixin機構による拡張を実現するプラグイン機構。MooseX::Object::Pluggableのmouse port.
- Script
- フレームワーク系のhelper script管理クラス
- WAFに必要なその他の機能(必須ではない機能)
- Authorization+Authentication
- Session
- HTTP::Sessionベースで
- I18N
Session, Authentication, I18Nは、フレームワークのPluginという形に最終的にはなるかなと思ってます。Session, AuthenticationはMiddlewareレイヤでやるべきかは少し悩んではいますが。
フレームワーク周辺機能
Webアプリで必要になる要素はデフォルトで用意しておきたいなと思ってます。コア機能という形でいれこむかはさておき、WAFとconfigurationやモデルが共有できるような仕組みを提供したいと思っています。
angelosのクラス構成
ここ数日でangelosもWAFとしての骨格は整ってきたかなという印象です。コードもここ数日で大分整理したので、HTTP::Engineを使ったWAFの例としては参考にできる点もあるのではないかと思います。
現在のクラス構成は以下のようになっています。
. |-- Angelos | |-- CLI | | |-- Command.pm | | `-- Help.pm | |-- CLI.pm | |-- Class | | |-- Hookable | | | `-- Plugin.pm | | |-- Hookable.pm | | `-- Mixinable.pm | |-- Component | | `-- Loader.pm | |-- Component.pm | |-- Config | | |-- Loader.pm | | |-- Schema.pm | | `-- Validator.pm | |-- Config.pm | |-- Context | | `-- Mixin | |-- Context.pm | |-- Controller | | `-- Mixin | |-- Controller.pm | |-- Debug | | |-- Components.pm | | |-- MemoryUsage.pm | | `-- Routes.pm | |-- Dispatcher | | |-- Dispatch.pm | | `-- Routes | | `-- Builder.pm | |-- Dispatcher.pm | |-- Engine | | |-- ModPerl.pm | | |-- Plugin | | | `-- Session.pm | | `-- Plugin.pm | |-- Engine.pm | |-- Exception.pm | |-- Exceptions.pm | |-- Home.pm | |-- I18N.pm | |-- Logger.pm | |-- MIMETypes.pm | |-- Manual | | `-- Tutorial.pod | |-- Manual.pm | |-- Middleware | | |-- Builder.pm | | |-- Profile.pm | | `-- Unicode.pm | |-- Middleware.pm | |-- Script | | |-- Command | | | |-- Console | | | | `-- Plugin | | | |-- Console.pm | | | |-- Gen | | | | `-- Flavor | | | | `-- App.pm | | | |-- Gen.pm | | | |-- Po.pm | | | `-- Server.pm | | `-- Help.pm | |-- Script.pm | |-- SessionBuilder.pm | |-- Utils.pm | |-- View | | |-- Plugin | | `-- TT.pm | `-- View.pm |-- Angelos.pm
今後のTODO
今後は、以下のようなものを追加していきたいなと。
- WAFの基本機能の追加
- Controller: redirect, forward, detachなど。
- View
- displayメソッドの実装(merb likeな)
- Modelの統合
- どのように実現するか要検討
- Authorization+Authetication対応
- 今みている限りだとCatalystの認証機構のportが一番筋がよさそうです
- Job Queueへの対応
- $c依存にするか否かの決定