Web Server Gateway Interface definuje jednoduché a univerzální rozhraní (interface) mezi webovým serverem a webovou aplikací nebo frameworkem v programovacím jazyce Python. Poslední verze jazyka Python, 3.0, vydaná v prosinci 2008, je již podporována modulem mod_wsgi webového serveru Apache.
Myšlenka Webové frameworky] (frameworky pro psaní webových aplikací) dříve představovaly problém pro nové uživatele Pythonu, protože volba frameworku omezovala volbu použitelných webových serverů a naopak. Webové aplikace v Pythonu byly často tvořeny buď pro CGI, FastCGI, mod python nebo nějaké jiné vlastní API specifického webového serveru.
WSGIPEP 333, Python Web Server Gateway Interface v1.0 (někdy vyslovováno jako 'whiskey' nebo 'wiz-gee') bylo vytvořeno jako nízkoúrovňové (low-level) rozhraní mezi webovými servery a webovými aplikacemi nebo frameworky, jako základ pro vývoj přenositelných webových aplikací. WSGI je založeno na již existujícím standardu CGI (Common Gateway Interface).
Stručná specifikace
WSGI má dvě strany: serverovou nebo „gateway“, a aplikační nebo frameworkovou. Serverová strana spustí funkci (popř. metodu nebo spustitelný objekt), která byla poskytnuta aplikační stranou. WSGI také poskytuje koncept middleware: WSGI middleware implementuje obě strany API a může tak být vloženo „mezi“ WSGI server a WSGI aplikaci; middleware se pak z pohledu serveru jeví jako aplikace a z pohledu aplikace jako server.
Middleware komponenta může vykonávat různé funkce:
Předat požadavek jinému aplikačnímu objektu na základě cílové URL Umožňovat běh více aplikací nebo frameworků vedle sebe ve stejném procesu Vyvažovat zátěž a zprostředkovávat vzdálené zpracování přeposíláním požadavků a odpovědí přes síť Provádět dodatečné zpracování obsahu, např. aplikování XSLT předpisů
Ukázková aplikace
WSGI-kompatibilní aplikace Hello World v Pythonu:
def app(environ, start_response): start_response('200 OK', [('Content-Type', 'text/plain')]) yield 'Hello World\n'
Příklad zavolání aplikace
Příklad zavolání WSGI aplikace a získání její odpovědi:
def call_application(app, environ): body = [] status_headers = [None, None] def start_response(status, headers): status_headers[:] = [status, headers] return body.append app_iter = app(environ, start_response) try: for item in app_iter: body.append(item) finally: if hasattr(app_iter, 'close'): app_iter.close() return status_headers, status_headers, ''.join(body)
status, headers, body = call_application(app, {...environ...})
WSGI-kompatibilní aplikace a frameworky Existuje mnoho webových frameworků podporujících nebo založených na WSGI: CherryPy Django Django with WSGI support web2py (Obsahuje CherryPy wsgiserver s podporou SSL) TurboGears Tornado PyAMF Pylons web.py bottle.py BlueBream Google App Engine Werkzeug Flask
Obaly V současnosti jsou k dispozici WSGI obaly pro FastCGI, CGI, AJP (za použití modulu flup), Apache (použitím mod wsgi nebo mod python) a Microsoft IIS (použitím isapi-wsgi, PyISAPIe nebo ASP brány).
Reference
Související články Rack – rozhraní webového serveru v programovacím jazyce Ruby PSGI – Perl Web Server Gateway Interface
Externí odkazy Wiki o WSGI Paste - WSGI metaframework WSGI tutorial wsgiref – standardní modul Pythonu
Kategorie:World Wide Web Kategorie:Python