Rozhraní brány webového serveru - Web Server Gateway Interface
The Rozhraní brány webového serveru (WSGI, vyslovováno whisky[1][2] nebo WIZ-ghee[3]) je jednoduchý konvence volání pro webové servery předat žádosti webové aplikace nebo rámce napsáno v Programovací jazyk Python. Aktuální verze WSGI, verze 1.0.1, je uvedena v Návrh na vylepšení Pythonu (PEP) 3333.[4]
WSGI bylo původně uvedeno jako PEP-333 v roce 2003.[5] PEP-3333, publikovaný v roce 2010, aktualizuje specifikaci pro Python 3.
Pozadí
V roce 2003 Python webové rámce byly obvykle psány pouze proti CGI, FastCGI, mod_python, nebo nějaký jiný zvyk API konkrétního webový server.[6] Citovat PEP 333:
Python se v současné době může pochlubit širokou škálou rámců webových aplikací, jako je Zope, Quijote, Webware, SkunkWeb, PSO a Twisted Web - abychom jmenovali jen několik. Tato široká škála možností může být problémem pro nové uživatele Pythonu, protože obecně řečeno, jejich volba webového rámce omezí jejich výběr použitelných webových serverů a naopak ... Naopak, i když Java má stejně mnoho rámců webových aplikací k dispozici, „servletové“ API Java umožňuje aplikacím napsaným v jakémkoli prostředí webových aplikací Java běžet na jakémkoli webovém serveru, který podporuje API servletu.
WSGI byl tedy vytvořen jako agnostik implementace rozhraní mezi webovými servery a webovými aplikacemi nebo rámci na podporu společného základu pro přenosný vývoj webových aplikací.[4]
Přehled specifikací
WSGI má dvě strany:
- the serveru / strana brány. To je často spuštěn plný software webového serveru, jako je Apache nebo Nginx, nebo je lehký aplikační server, který může komunikovat s webovým serverem, jako je flup.
- strana aplikace / rámce. Toto je volání v Pythonu, dodávané programem nebo frameworkem Pythonu.
Mezi serverem a aplikací může být jeden nebo více WSGI komponenty middlewaru, které implementují obě strany API, obvykle v kódu Pythonu.
WSGI nespecifikuje, jak by měl být spuštěn překladač Pythonu, ani jak by měl být objekt aplikace načten nebo nakonfigurován, a různých frameworků a webových serverů to dosahuje různými způsoby.
Middleware WSGI
Součást middlewaru WSGI je volaná v Pythonu, která je sama aplikací WSGI, ale může zpracovávat požadavky delegováním na jiné aplikace WSGI. Tyto aplikace mohou samy o sobě být součástmi middlewaru WSGI.[7]
Komponenta middlewaru může provádět takové funkce jako:[7]
- Směrování požadavku na různé objekty aplikace na základě cíle URL, po změně proměnné prostředí podle toho.
- Umožnění spuštění více aplikací nebo rozhraní současně vedle sebe proces
- Vyrovnávání zatížení a dálkové zpracování, předáváním požadavků a odpovědí přes a síť
- Provádění následného zpracování obsahu, například použití XSLT šablony stylů
Příklady
Příklad aplikace
WSGI kompatibilní “Ahoj světe "aplikace napsaná v Krajta:
1 def aplikace(prostředí, start_response):2 start_response('200 OK', [('Typ obsahu', 'text / plain')])3 výtěžek b'Ahoj světe n'
Kde:
- Řádek 1 definuje funkci[8] pojmenovaný
aplikace
, který má dva parametry,prostředí
astart_response
.prostředí
je slovník obsahující Proměnné prostředí CGI stejně jako další parametry požadavku a metadata pod dobře definovanými klíči.[9]start_response
je volaná sama, přičemž má dva poziční parametry,postavení
ahlavičky odpovědí
. - Hovory na lince 2
start_response
, přičemž jako stav HTTP zadáte „200 OK“ a hlavičku odpovědi „Content-Type“. - Řádek 3 dělá z funkce a generátor. Tělo odpovědi je vráceno jako iterovatelná část bajtové řetězce.
Příklad volání aplikace
Celý příklad síťového serveru WSGI je mimo rozsah tohoto článku. Níže je uveden náčrt toho, jak by se dalo volat aplikaci WSGI a získat její stavový řádek HTTP, záhlaví odpovědí a tělo odpovědi jako objekty Pythonu.[10] Podrobnosti o tom, jak postavit prostředí
dikt byly vynechány.
z io import BytesIOdef call_application(aplikace, prostředí): postavení = Žádný záhlaví = Žádný tělo = BytesIO() def start_response(rstatus, záhlaví): nelokální postavení, záhlaví postavení, záhlaví = rstatus, záhlaví app_iter = aplikace(prostředí, start_response) Snaž se: pro data v app_iter: tvrdit postavení je ne Žádný a záhlaví je ne Žádný, \ „start_response () nebyl volán“ tělo.psát si(data) Konečně: -li hasattr(app_iter, 'zavřít'): app_iter.zavřít() vrátit se postavení, záhlaví, tělo.getvalue()prostředí = {...} # „Enviroment“postavení, záhlaví, tělo = call_application(aplikace, prostředí)
Aplikace a rámce kompatibilní s WSGI
![]() | Tato sekce může obsahovat nerozlišující, nadměrnýnebo irelevantní příklady.Září 2018) ( |
Četné webové rámce podpora WSGI:
- Bjoern
- BlueBream
- bobo[11]
- Láhev
- CherryPy
- Django[12]
- Eventlet[13]
- Baňka
- Falcon (webový rámec) [14]
- Gevent-FastCGI[15]
- Google App Engine webapp2
- Gunicorn
- prestans[16]
- mod_wsgi pro použití s Apache[17]
- netius
- pyknik[18]
- Vložit komponenta WebOb je konkrétně příponou WSGI. To bylo přijato Projekt stožárů.
- Stožáry
- Pyramida
- restlite[19]
- Tornádo
- Trac
- TurboGears
- Uliweb[20]
- uWSGI
- Servírka[21]
- web.py[22]
- web2py
- webový hráč[23]
- Werkzeug[24]
- Radicale[25]
Aktuálně jsou k dispozici obálky pro FastCGI, CGI, SCGI, AJP (pomocí flup), zkroucený. web, Apache (pomocí mod_wsgi nebo mod_python ), Nginx (pomocí ngx_http_uwsgi_module),[26] a Microsoft IIS (pomocí WFastCGI,[27] isapi-wsgi,[28] PyISAPIe,[29] nebo ASP brána).
Viz také
- ASGI - Duchovní nástupce WSGI, který přidává podporu pro asynchronní aplikace
- Nosič – Rubín rozhraní webového serveru
- PSGI – Perl Rozhraní brány webového serveru
- SCGI - Jednoduché rozhraní společné brány
- JSGI – JavaScript rozhraní brány webového serveru
Reference
- ^ Simionato, Michele (11. června 2007). „Úvod do webového programování pomocí WSGI“.
- ^ Edge, Jake (9. července 2019). „Naštvaný na mikrorámce“. LWN.
- ^ Goldberg, Kevin (09.05.2016). "Úvod do výkonu serverů Python WSGI | AppDynamics". Blog o sledování výkonu aplikací AppDynamics. Citováno 2020-08-20.
- ^ A b „PEP 3333 - Python Web Server Gateway Interface v1.0.1“. Python.org. Citováno 2018-04-04.
- ^ „PEP 333 - Python Web Server Gateway Interface v1.0“. Python.org. Citováno 2018-04-04.
- ^ "FrontPage - Python Wiki". Python.org. Citováno 2017-01-27.
- ^ A b „PEP 3333 - Python Web Server Gateway Interface v1.0.1“. Python.org. Citováno 2018-04-04.
- ^ tj. „funkce, metoda, třída nebo instance s a
__volání__
metoda" - ^ „PEP 3333 - Python Web Server Gateway Interface v1.0.1“. Python.org. Citováno 2018-04-04.
- ^ „Vytváření WSGI Middleware - Alan Christopher Thomas - raženo - PythonKC“. Youtube. 2015-08-28. Citováno 2017-01-27.
- ^ „プ エ ラ リ ア ジ ェ ル の 効果 は?“. Bobo.digicool.com. Citováno 2017-01-27.
- ^ "Django bez mod_python a podpora WSGI | Weblog | Django". Djangoproject.com. 2005-07-18. Citováno 2017-01-27.
- ^ „wsgi - server WSGI - dokumentace Eventlet 0.20.1“. Eventlet.net. Citováno 2017-01-27.
- ^ „Falcon - Bare-metal web API framework for Python“. Citováno 2017-10-22.
- ^ "gevent-fastcgi 1.0.2.1: Python Package Index". Pypi.python.org. 2015-12-06. Citováno 2017-01-27.
- ^ „anomálie / prestanty: Mikrorámce REST vyhovující WSGI“. GitHub.com. Citováno 2017-01-27.
- ^ „Google Code Archive - Long-term storage for Google Code Project Hosting“. Code.google.com. Citováno 2017-01-27.
- ^ „Pycnic Framework“. Pycnic.nullism.com. Citováno 2017-01-27.
- ^ "theintencity / restlite: Lehké serverové nástroje RESTful v Pythonu". GitHub.com. Citováno 2017-01-27.
- ^ „limodou / uliweb: jednoduchý a snadno použitelný webový rámec pythonu“. GitHub.com. Citováno 2017-01-27.
- ^ "servírka dokumentace". docs.pylonsproject.org. Citováno 2018-09-26.
- ^ "Vítejte v". Web.py. 2009-09-11. Citováno 2017-01-27.
- ^ "weblayer - dokumentace weblayer v0.4.3". Packages.python.org. Citováno 2017-01-27.
- ^ „Vítejte | Werkzeug (Python WSGI Utility Library)“. Werkzeug.pocoo.org. Citováno 2017-01-27.
- ^ „Server CalDAV a CardDAV - jednoduchý server pro kalendář a kontakty“. Radicale.org. Citováno 2017-01-27.
- ^ "Modul ngx_http_uwsgi_module". Nginx.org. Citováno 2017-01-27.
- ^ „Python Tools for Visual Studio - Documentation“. Pytools.codeplex.com. Citováno 2017-01-27.
- ^ „Google Code Archive - Long-term storage for Google Code Project Hosting“. Code.google.com. Citováno 2017-01-27.
- ^ "Stažení rozšíření Python ISAPI pro IIS | SourceForge.net". Pyisapie.sourceforge.net. 2012-04-24. Citováno 2017-01-27.
externí odkazy
- PEP 333 - Rozhraní brány webového serveru Python
- PEP 3333 - Python Web Server Gateway Interface v1.0.1
- WSGI metaframework
- Komplexní wiki o všem WSGI
- Výukový program WSGI
- Python standardní knihovní modul wsgiref
- Začínáme s WSGI
- NWSGI - .NET implementace specifikace Python WSGI pro IronPython a IIS
- Server Gevent-FastCGI implementován pomocí síťové knihovny založené na coroutinu gevent