Webserver -Gateway -Schnittstelle
Das Webserver -Gateway -Schnittstelle (WSGI, ausgesprochen Whiskey[1][2] oder Wiz-Ghee[3]) ist einfach Konvention anrufen zum Webserver Anfragen an weiterleiten an Web Applikationen oder Frameworks geschrieben in der Python -Programmiersprache. Die aktuelle Version von WSGI, Version 1.0.1, ist in angegeben Python Enhancement Vorschlag (Pep) 3333.[4]
WSGI wurde ursprünglich 2003 als PEP-333 angegeben.[5] PEP-3333, veröffentlicht im Jahr 2010, aktualisiert die Spezifikation für Python 3.
Hintergrund
Im Jahr 2003 Python Webrahmen wurden typischerweise nur dagegen geschrieben CGI, Fastcgi, mod_python, oder ein anderer Brauch API von einem bestimmten Webserver.[6] Zum Zitieren von Pep 333:
Python verfügt derzeit über eine Vielzahl von Webanwendungs -Frameworks wie Zope, Quixote, Webware, Skunkweb, PSO und Twisted Web -, um nur einige zu nennen. Diese Vielzahl von Auswahlmöglichkeiten kann ein Problem für neue Python -Benutzer sein, da im Allgemeinen ihre Auswahl an Web -Framework ihre Auswahl der verwendbaren Webserver einschränken und umgekehrt ... dagegen, obwohl Java genauso viele Webanwendungs -Frameworks hat Die "Servlet" -API von Java ermöglicht es für Anwendungen, die mit einem Java -Webanwendungs -Framework geschrieben wurden, um auf jedem Webserver ausgeführt zu werden, der die Servlet -API unterstützt.
WSGI wurde somit als Implementierungsneutral geschaffen Schnittstelle zwischen Webservern und Webanwendungen oder Frameworks, um die gemeinsame Grundlage für die Förderung der Förderung tragbar Entwicklung von Webanwendungen.[4]
Spezifikationsübersicht
Die WSGI hat zwei Seiten:
- das Server/Gateway -Seite. Dies wird häufig vollständige Webserver -Software ausgeführt, wie z. Apache oder Nginxoder ist ein leichtgewichtiger Anwendungsserver, der mit einem Webserver kommunizieren kann, wie z. Flup.
- Die Anwendung/Framework -Seite. Dies ist ein Python Callable, der vom Python -Programm oder -Rahmen geliefert wird.
Zwischen dem Server und der Anwendung kann es einen oder mehrere geben WSGI Middleware -Komponenten, die beide Seiten der API implementieren, typischerweise im Python -Code.
WSGI gibt nicht an, wie der Python -Interpreter gestartet werden sollte, und wie das Anwendungsobjekt geladen oder konfiguriert werden sollte, und verschiedene Frameworks und Webserver erreichen dies auf unterschiedliche Weise.
WSGI Middleware
Eine WSGI -Middleware -Komponente ist eine Python -Callable, die selbst eine WSGI -Anwendung ist, kann jedoch Anforderungen durch Delegieren von anderen WSGI -Anwendungen bearbeiten. Diese Anwendungen können selbst WSGI -Middleware -Komponenten sein.[7]
Eine Middleware -Komponente kann Funktionen wie:[7]
- Wenn Sie eine Anforderung an verschiedene Anwendungsobjekte basierend auf dem Ziel weitergeben URL, nachdem das geändert wurde Umgebungsvariablen entsprechend.
- Ermöglichen, dass mehrere Anwendungen oder Frameworks nebeneinander ausführen Prozess
- Lastverteilung und Fernverarbeitung durch Weiterleiten von Anforderungen und Antworten über a Netzwerk
- Durchführung von Inhalten nach der Verarbeitung, z. B. Bewerbung Xslt Stylesheets
Beispiele
Beispielanwendung
Ein WSGI-kompatibles "Hallo Welt!"Anwendung geschrieben in Python:
def Anwendung(Umwelt, start_response): start_response("200 ok", [('Inhaltstyp', "Text/Ebene")])) Ertrag b'Hallo Welt!\n'
Wo:
- Zeile 1 definiert eine Funktion[8] genannt
Anwendung
, was zwei Parameter benötigt,Umwelt
undstart_response
.Umwelt
ist ein Wörterbuch, das enthält CGI -Umgebungsvariablen sowie andere Anforderungsparameter und Metadaten unter gut definierten Schlüssel.[9]start_response
ist selbst ein Anruf, das zwei Positionsparameter nimmt,Status
undresponse_Headers
. - Zeile 2 Anrufe
start_response
Angabe von "200 OK" als HTTP-Status und als "Content-Typ" -Ponaktionsheader. - Zeile 3 macht die Funktion zu a Generator. Der Körper der Reaktion wird als iterable zurückgegeben Byte -Saiten.
Beispiel für das Aufrufen einer Anwendung
Ein vollständiges Beispiel für einen WSGI -Netzwerkserver liegt außerhalb des Rahmens dieses Artikels. Im Folgenden finden Sie eine Skizze, wie man eine WSGI -Anwendung aufrufen und seine HTTP -Statuslinie, Antwortheader und Reaktionsbehörde als Python -Objekte abrufen würde.[10] Details zur Konstruktion des Umwelt
DICT wurde weggelassen.
aus io importieren Bytesio def call_application(App, Umwelt): Status = Keiner Header = Keiner Karosserie = Bytesio() def start_response(rstatus, raaders): nicht lokal Status, Header Status, Header = rstatus, raaders app_iter = App(Umwelt, start_response) Versuchen: zum Daten in app_iter: behaupten Status ist nicht Keiner und Header ist nicht Keiner, \ "start_response () wurde nicht genannt" Karosserie.schreiben(Daten) endlich: wenn Hasattr(app_iter, 'nah dran'): app_iter.nah dran() Rückkehr Status, Header, Karosserie.Wert erhalten() Umwelt = {...} # "Environ" -Dikte Status, Header, Karosserie = call_application(App, Umwelt)
WSGI-kompatible Anwendungen und Frameworks
Zahlreich Webrahmen Unterstützen Sie WSGI:
- Bjoern
- Blauer
- Bobo[11]
- Flasche
- Cherrypy
- Django[12]
- Eventlet[13]
- Fastwsgi
- Flasche
- Falcon (Web Framework) [14]
- Gevent-Fastcgi[15]
- Google App Engine's WebApp2
- Gunicorn
- Prestans[16]
- mod_wsgi zum Gebrauch mit Apache[17]
- Netius
- pycnisch[18]
- Paste Komponentenwebob ist speziell eine WSGI -Erweiterung. Es wurde von der übernommen Pylons -Projekt.
- Pylonen
- Pyramide
- Restlite[19]
- Tornado
- Trac
- Turbuears
- Uliweb[20]
- UWSGI
- Kellnerin[21]
- web.py[22]
- Web2py
- Webschicht[23]
- Werkzug[24]
- Radicale[25]
Derzeit sind Wrapper für verfügbar Fastcgi, CGI, Scgi, AJP (mit flups), Twisted.WebApache (mithilfe mod_wsgi oder mod_python), Nginx (Verwenden Sie ngx_http_uwsgi_module),[26] und Microsoft IIS (mit Wastcgi,[27] isapi-wsgi,[28] Pyisapie,[29] oder an ASP Tor).
Siehe auch
- Asgi - Der spirituelle Nachfolger von WSGI und Unterstützung für asynchron
- Gestell – Rubin Webserverschnittstelle
- PSGI – Perl Webserver -Gateway -Schnittstelle
- Scgi - Einfache gemeinsame Gateway -Schnittstelle
- JSGI – JavaScript Webserver -Gateway -Schnittstelle
Verweise
- ^ Simionato, Michele (11. Juni 2007). "Eine Einführung in die Webprogrammierung mit WSGI".
- ^ Edge, Jake (9. Juli 2019). "Mit Mikroframeworks herumspielen". Lwn.
- ^ Goldberg, Kevin (2016-05-09). "Eine Einführung in Python WSGI -Server für die Leistung | AppDynamics". Anwendungsleistung Überwachung Blog | AppDynamics. Abgerufen 2020-08-20.
- ^ a b "PEP 3333 - Python Web Server Gateway Interface v1.0.1". Python.org. Abgerufen 2018-04-04.
- ^ "PEP 333 - Python Web Server Gateway Interface v1.0". Python.org. Abgerufen 2018-04-04.
- ^ "Frontpage - Python Wiki". Python.org. Abgerufen 2017-01-27.
- ^ a b "PEP 3333 - Python Web Server Gateway Interface v1.0.1". Python.org. Abgerufen 2018-04-04.
- ^ d.h. "eine Funktion, Methode, Klasse oder eine Instanz mit a
__Anruf__
Methode" - ^ "PEP 3333 - Python Web Server Gateway Interface v1.0.1". Python.org. Abgerufen 2018-04-04.
- ^ "WSGI Middleware - Alan Christopher Thomas - Minted - Pythonkc". Youtube. 2015-08-28. Archiviert vom Original am 2021-12-12. Abgerufen 2017-01-27.
- ^ "プエラリアジェル の 効果 は?". Bobo.digicool.com. Abgerufen 2017-01-27.
- ^ "Django ohne Mod_Python und WSGI -Unterstützung | Weblog | Django". Djangoproject.com. 2005-07-18. Abgerufen 2017-01-27.
- ^ "WSGI - WSGI -Server - Eventlet 0.20.1 Dokumentation". Eventlet.net. Abgerufen 2017-01-27.
- ^ "Falcon - Bare -Metal -Web -API -Framework für Python". Abgerufen 2017-10-22.
- ^ "Gevent-Fastcgi 1.0.2.1: Python-Paketindex". Pypi.python.org. 2015-12-06. Abgerufen 2017-01-27.
- ^ "Anomalie/Prestans: Ein WSGI-konforme REST Micro-Framework". Github.com. Abgerufen 2017-01-27.
- ^ "Google Code Archiv - Langzeitspeicher für Google Code -Projekthosting". Code.google.com. Abgerufen 2017-01-27.
- ^ "Pycnic Framework". Pycnic.nullism.com. Abgerufen 2017-01-27.
- ^ "TheIntencity/Restlite: Leichte Rastful-Server-Tools in Python". Github.com. Abgerufen 2017-01-27.
- ^ "Limodou/Uliweb: Einfache und einfache Python -Web -Framework". Github.com. Abgerufen 2017-01-27.
- ^ "Kellnerin Dokumentation". docs.pylonproject.org. Abgerufen 2018-09-26.
- ^ "Willkommen zu". Web.py. 2009-09-11. Abgerufen 2017-01-27.
- ^ "Weblayer - Weblayer v0.4.3 Dokumentation". Pakete.python.org. Abgerufen 2017-01-27.
- ^ "Willkommen | Werkzug (die Python WSGI Utility Library)". Werkzug.pocoo.org. Abgerufen 2017-01-27.
- ^ "Caldav und CardDav Server - Ein einfacher Kalender und Kontaktserver". Radicale.org. Abgerufen 2017-01-27.
- ^ "Modul ngx_http_uwsgi_module". Nginx.org. Abgerufen 2017-01-27.
- ^ "Python -Tools für Visual Studio - Dokumentation". Pytools.codeplex.com. Abgerufen 2017-01-27.
- ^ "Google Code Archiv - Langzeitspeicher für Google Code -Projekthosting". Code.google.com. Abgerufen 2017-01-27.
- ^ "Python Isapi -Erweiterung für IIS Download | SourceForge.net". Pyisapie.sourceforge.net. 2012-04-24. Abgerufen 2017-01-27.
Externe Links
- PEP 333 - Python Web Server Gateway -Schnittstelle
- PEP 3333 - Python Web Server Gateway Interface v1.0.1
- WSGI Metaframework
- Umfassendes Wiki über alles WSGI
- WSGI -Tutorial
- Python Standard Library Modul Wsgiref
- Erste Schritte mit WSGI
- NWSGI - .NET -Implementierung der Python WSGI -Spezifikation für Ironpython und IIS
- Gevent-Fastcgi-Server mit der Gevent Coroutine-basierten Netzwerkbibliothek implementiert