WSGIとは?
状態:-
閲覧数:536
投稿日:2018-08-20
更新日:2018-08-26
表記
片仮名
・ウィズギー
詳記
・Web Server Gateway Interface
Pythonにおける、「Webサーバ」と「Webアプリケーション」を接続する標準仕様を定めるもの
プログラミング言語Pythonにおいて、「Webサーバ」と「Webアプリケーション(もしくはWebアプリケーションフレームワーク)」を接続するための、標準化されたインタフェース定義
特徴
・WSGIに対応したWebアプリケーション(やフレームワーク)は、WSGIに対応した任意のWebサーバ上で運用できる
・アプリケーション側がWSGIに対応していれば、アプリケーションのコードに修正を加えることなく、WSGI対応サーバを自由に選択することができ、高い可搬性(ポータビリティ)が得られる
仕様の概要
WSGIには二つの側 — サーバ側とアプリケーション側が存在する
WSGIは、リクエスト情報・レスポンスヘッダ・レスポンス本文を、両者の間でどのようにやりとりするかをPythonのAPIとして定義している
WSGIサーバ(WSGIアプリケーションコンテナ)
WSGIアプリケーションを常駐させる
・HTTPクライアントからリクエストを受け取るごとに、WSGIアプリケーションのcallableオブジェクトを呼び出す
→ クライアントからのリクエストがアプリケーションへ転送される
WSGIアプリケーション
callableオブジェクト (__call__が定義されたオブジェクト) として定義する
処理の流れ
1.Webサーバ側が、クライアントからリクエストを受け取る
2.サーバ側は、callableオブジェクトを呼び出して、その引数として環境変数と1つのコールバック用callableオブジェクトを渡す
・Webサーバ側は、アプリケーション側がエントリポイントとして提供するcallableオブジェクト(関数やクラスインスタンスなど __call__ が定義されたオブジェクト)を呼び出して、その引数として環境変数と1つのコールバック用callableオブジェクトを渡す
3.アプリケーション側は、本文を生成するiterableオブジェクトを戻り値として返す
・アプリケーション側は、このコールバック用callableオブジェクトを呼び出すことでステータスコードとレスポンスヘッダをサーバ側に伝え、さらに本文を生成するiterableオブジェクト(イテレータやリストなど)を戻り値として返す
4.サーバ側は、クライアントへのレスポンスを生成
・サーバ側は、これらを用いてクライアントへのレスポンスを生成する
WSGI 互換のWebアプリケーションフレームワーク
WSGIをサポートするWebアプリケーションフレームワーク
Bottle
Django
Flask
Tornado
thinkAmi-sandbox/wsgi_webserver-sample
PythonでWSGI準拠のWebサーバを自作し、その上でBottleを動かしてみた
Pythonで一番小さいWEBフレームワークbottle.py その5(response,mimetype)
Pythonのモジュールとよく使うもの一覧