Web Server Gateway Interface

ikona
Tento článek potřebuje aktualizaci, neboť obsahuje zastaralé informace.
Můžete Wikipedii pomoci tím, že ho vylepšíte, aby odrážel aktuální stav a nedávné události. Historické informace nemažte, raději je převeďte do minulého času a případně přesuňte do části článku věnované dějinám.

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.

WSGI[1] (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[0], status_headers[1], ''.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[2]
  • web2py (web2py.com. Obsahuje CherryPy wsgiserver s podporou SSL)
  • TurboGears
  • Tornado (www.tornadoweb.org)
  • PyAMF
  • Pylons
  • web.py (webpy.org)
  • bottle.py (bottle.paws.de)
  • BlueBream
  • Google App Engine
  • Werkzeug (werkzeug.pocoo.org)
  • 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

V tomto článku byl použit překlad textu z článku Web Server Gateway Interface na anglické Wikipedii.

  1. PEP 333, Python Web Server Gateway Interface v1.0
  2. [1] Django with WSGI support

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 Archivováno 1. 4. 2021 na Wayback Machine.
  • Paste - WSGI metaframework
  • WSGI tutorial
  • wsgiref - standardní modul Pythonu