Web Server Gateway Interface
Web Server Gateway Interface は、Pythonプログラミング言語向けの、WebサーバとWebアプリケーションないしフレームワークとの間の簡潔で統一されたインタフェースを定義する。
基本的な概念
Python には多様な Webアプリケーションフレームワークが存在する。このことは、新しい Python ユーザーにとって問題になることがある。 一般的に Web フレームワークの選択が使用できるWebサーバを制限してしまったり、その逆の制限があったりするためである。
WSGI はWebサーバとWebアプリケーションないしフレームワークとの間の簡潔で統一されたインタフェースを提示するものである。
仕様の概要
WSGI のインターフェイスには二つの側面がある。"サーバ"ないし"ゲートウェイ"側と、"アプリケーション"ないし"フレームワーク"側である。サーバー側はアプリケーション側によって提供される呼び出し可能なオブジェクト(通常関数やメソッド)を呼び出す。さらに WSGI は ミドルウェア の考え方を提供する。WSGI サーバーと WSGI アプリケーションの "中間に"挿入できるよう、WSGIミドルウェアは両方の側の API を実装する。ミドルウェアはサーバーの観点からはアプリケーションとして動作し、アプリケーションの観点からはサーバーとして動作する。
"ミドルウェア"コンポーネントは以下のような機能を実行する:
- 目標の URL にもとづき、環境変数を適宜変更し、リクエストを別のアプリケーションのオブジェクトに回送する
- 複数のアプリケーションやフレームワークが同じプロセスの中で同居しながら動作できるようにする
- リクエストとレスポンスをネットワーク上で転送することによる負荷分散と遠隔処理
- XSLスタイルシートの適用などの、コンテンツの後処理の実行
アプリケーションの例
WSGI 互換 "Hello World" アプリケーション:
def app(environ, start_response): start_response('200 OK', [('Content-Type', 'text/plain')]) return ['Hello World\n']
WSGI 互換のアプリケーションおよびフレームワーク
WSGIをサポートするWebアプリケーションフレームワークは多数存在する:
ラッパー
サーバーやゲートウェイは、HTTPのクライアントから受ける、アプリケーションに対する各リクエスト毎にアプリケーションを呼び出す。
現在、FastCGI, CGI, SCGI, AJP (flup を使用), mod_python および Microsoft IIS (ASP ゲートウェイを使用)に対してラッパーが利用可能である。
また直接アプリケーションをロードできる Apache モジュール mod_wsgi [2]が現在開発中である。
外部リンク
- PEP 333 インターフェイス標準の定義(英語)
- WSGI メタフレームワーク(英語)
- WSGI のすべてにわたる分かりやすい wiki(英語)