まだコードは1文字も書いていない。
とりあえず
$ git clone git://github.com/miyagawa/psgi-specs.git $ git clone git://github.com/miyagawa/Plack.git
してPSGIのspecとPlackのREADMEを読む。
Rackとほぼ同じ。
- psgiにおけるアプリケーションとは、単なるコードリファレンス。
- このcoderefは、$envという一つの引数を受け取る。
- $envはhashrefになっていて、Requestの内容はすべてこのHashに入っている。
- CGIでいう環境変数的なものは、
$env->{REQUEST_METHOD}とかでとれる。 - CGIでいうstdin的なものは、
$env->{'psgi.input'}をreadするととれる。 - アプリケーション中のエラーは
$env->{'psgi.erros'}にprintする。 - Responseはcoderefからreturnで返す。フォーマットはarrayrefで、
[ status, headers, body ]。 - headersはhashrefじゃなくてarrayref。
[X-FOO => 100, X-BAR => 200]みたいな感じで。 - bodyは、arrayrefか、getlineとcloseメソッドを実装したオブジェクト。
Middlewareというのは、アプリケーションのwrapper。サーバとアプリ(coderef)の間にはさまって、サーバに対してはアプリのように振る舞い、アプリに透過的に便利な機能を提供する。
以上specを読んだだけで書いてるので間違った記述が含まれるかも知れません。
今からなんかしら動かす。