Hatena::Groupangelos

Angelos in Action RSSフィード

Fork me on GitHub
 | 

2009-09-05

アプリもPSGIプロトコルでcallしてほしい!

03:06 | アプリもPSGIプロトコルでcallしてほしい! - Angelos in Action を含むブックマーク はてなブックマーク - アプリもPSGIプロトコルでcallしてほしい! - Angelos in Action アプリもPSGIプロトコルでcallしてほしい! - Angelos in Action のブックマークコメント

PSGI化された後のHEで自分のイメージとあわないのは、ReqつくるところとApp(WAF)側でできないところなんですよね。上手く伝えきれてないような気もするので、少しまとめておきます。

WSGIだとアプリケーション側(WAF)もWSGIの仕様にそっていて、WSGIプロトコルアプリケーションが呼ばれます。なので、Requestの生成部分についてもアプリケーション(WAF側)の制御範囲になるので、このほうがWAF開発者にとってはいい仕様なんじゃないかなぁと思ったり。

以下がイメージです。 

Apache2
↓
PSGI::Impl::CGI
↓PSGI Protocol
PSGI::Middleware::DebugScreen
↓PSGI Protocol
Angelos::WSGI::Application
↓Angelos::Request
Angelos::Dispatcher

最後の部分は、以下のような感じで、envが渡される。

$app->call($env);

WAFのapplicationクラスのcallメソッド内では、

sub call {
   my ($self, $env) = @_;
   my $req = Angelos::Request->new($env);
   return dispatch_request($req);
}

リクエストは、リクエストビルダーとしての機能はRequestクラスを継承することで実現できると。

Angelos::Request extends ( PSGI::Request or HTTP::Engine::Request)

merb, railsの実装はこうなっているためRequestの拡張をWAF側で行うのが簡単なので、これは結構いいなぁと思ってます。

要するに、アプリケーションWSGIプロトコルでcallできるようになっていて、Requestの生成ハンドリング部分がアプリケーションにまかされているからいいなぁと。

それと、Requestは単純に作るのが面倒なのでユーティリティとしてPSGIかPSGIxのようなもので提供する形がいいんじゃないかなぁと。PSGIはプロトコル仕様であって、Requestを含めるべきではないという意見もあるかもしれないんですが。その場合は、PSGIxのような形で提供されるといいなぁと。

結論としては、以下のいずれかになるとWAF開発者的にはありがたいなぁと思いました。

  • PSGI::RequestをPSGIから切り離す場合、HEのインターフェースを追加してrequest handlerだけじゃなくてPSGIプロトコルでApp(WAF)のhandlerをcallしてくれる仕組みを用意する
    • 例えば、HEのinterfaceでrequest_handlerだけでなくて、psgi_handlerを渡せるようにするとか。
  • リクエストビルダーをPSGI or PSGIxなどで用意する

上記のいずれかであれば、WAF開発者的にはそれなりに拡張が用意にできるんじゃないかなぁと。

こうなっていると、Server Gatewayの開発者はWSGIの仕様にのっとってシンプルなインターフェースで開発ができ、WAF開発者もWSGIプロトコル仕様に乗っ取りWAFのアプリもMiddlewareのようなものとして扱われ、WSGIプロトコルで呼ばれ、Requestの生成をControlできるようになって、全員幸せなんじゃないかなぁと思うのです。

# 自分のRack, WSGIの理解は上記のような理解なんですが、それは違う!ポリシー的にこうすべきだ!みたいな話があれば教えてもらいたいなぁと。

 |