PSGI-WebサーバーとPerl Webアプリケーション間のインターフェース

少し前までは、perl PSGI-Perl Web Server Gateway Interface SpecificationでWebサーバーとアプリケーション/フレームワークの間にインターフェース仕様がありました。 PSGIは、Webサーバーへの特定の接続方法を心配せずに、仕様用の単一のインターフェースを実装できるようにする抽象化レイヤーを追加します。 このようなアプリケーションは、PSGIをサポートするサーバーで実行できます。現時点では、Plack(サーバーとユーティリティのセット)、nginx(PSGIサポートおよび組み込みperlのパッチ)、およびmod_psgiのApacheです。



用途



PSGIアプリケーションは、環境変数を引数として使用してハッシュ参照を受け取り、応答を返す関数です。



リクエスト


アプリケーションに渡されるハッシュには、CGIのヘッダーの名前(REQUEST_METHOD、SCRIPT_NAME、QUERY_STRINGなど)に似た名前の変数と、HTTP要求からのヘッダー(HTTP_HOSTなどのHTTP_で始まる)が含まれます。 さらに、ハッシュにはPSGI固有の変数が含まれている必要があります。

また、ハッシュには追加の変数が含まれる場合があります。

アプリケーションは環境変数を分析し、サーバーの機能を考慮したり、サーバーがアプリケーションのニーズをサポートしていない場合に実行を完了したりできます(たとえば、起動したアプリケーションが非ブロッキングで、サーバーが同期スタイルで記述されている場合)。



答え


一般に、アプリケーションは、応答HTTPコード、ヘッダー、応答本文の3つの要素の配列への参照を返す必要があります。 応答HTTPコードは少なくとも100の整数である必要があります。ヘッダーは配列への参照として送信され、Content-Typeヘッダーが存在する必要があります(応答1xx、204、または304を除く)。 応答の本文は、文字列の配列(または行ごとに分離しない応答全体)への参照、またはIO ::ハンドルのようなオブジェクトまたはファイル記述子です。 遅延応答が必要な場合、アプリケーションは、応答のコールバックが送信される関数を返すことができます。



応用例


これは最も単純なPSGIアプリケーションです。

sub { [ 200 , [ 'Content-Type' => 'text/plain' ] , [ 'Hi, ' . shift -> { REMOTE_ADDR } ] ] }







ミドルウェア



ミドルウェアは通常のアプリケーションに似ていますが、環境変数とPSGIアプリケーションの応答という2つの引数を取ります。 ミドルウェアを使用して、このデータを分析したり(通常のアクセスログのメンテナンスなど)、変更したりできます。 X-PSGI-Usedヘッダーを応答に追加するミドルウェアの例を次に示します。

my $app = sub { [ 200 , [ 'Content-Type' => 'text/plain' ] , [ 'Hi, ' . shift -> { REMOTE_ADDR } ] ] } <br/>

my $middleware = sub { <br/>

my $env = shift ; <br/>

my $res = $app -> ( $env ) ; <br/>

push @ { $res -> [ 1 ] } , 'X-PSGI-Used' => 1 ; <br/>

return $res ; <br/>

} ;






CPANのPlackには、 かなり多数の多様なミドルウェアがあります。



サーバー



サーバーはPSGIアプリケーションの起動を提供し、環境変数を使用してハッシュをコンパイルし、それをアプリケーションに転送し、応答を処理する必要があります。 現在、いくつかのPSGIサーバーがあります。

Plack :: Server :: AnyEventおよびPlack :: Server :: Coroに個別に言及したい-これらのサーバーはファイルAIOをサポートしているため、それらに基づく小さな非ブロッキングPSGIアプリケーションを使用して、ブロッキングを完全になくして静的を配布できますが、AIOサポートはそうではありませんnginxで準備ができました。



フレームワークのサポート



現在、すべての一般的なWebフレームワークでPSGIがサポートされています。Catalyst、 CGI :: ApplicationHTTP :: EngineDancerMasonSquattingContinuityMaypoleTatsumaki



参照資料



PSGI / Plackウェブサイト

PSG CPAN仕様

PSGI :: FAQ

CPANのPlack



All Articles