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