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 und start_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 und response_Headers.
  • Zeile 2 Anrufe start_responseAngabe 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:

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
  • GestellRubin Webserverschnittstelle
  • PSGIPerl Webserver -Gateway -Schnittstelle
  • Scgi - Einfache gemeinsame Gateway -Schnittstelle
  • JSGIJavaScript Webserver -Gateway -Schnittstelle

Verweise

  1. ^ Simionato, Michele (11. Juni 2007). "Eine Einführung in die Webprogrammierung mit WSGI".
  2. ^ Edge, Jake (9. Juli 2019). "Mit Mikroframeworks herumspielen". Lwn.
  3. ^ 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.
  4. ^ a b "PEP 3333 - Python Web Server Gateway Interface v1.0.1". Python.org. Abgerufen 2018-04-04.
  5. ^ "PEP 333 - Python Web Server Gateway Interface v1.0". Python.org. Abgerufen 2018-04-04.
  6. ^ "Frontpage - Python Wiki". Python.org. Abgerufen 2017-01-27.
  7. ^ a b "PEP 3333 - Python Web Server Gateway Interface v1.0.1". Python.org. Abgerufen 2018-04-04.
  8. ^ d.h. "eine Funktion, Methode, Klasse oder eine Instanz mit a __Anruf__ Methode"
  9. ^ "PEP 3333 - Python Web Server Gateway Interface v1.0.1". Python.org. Abgerufen 2018-04-04.
  10. ^ "WSGI Middleware - Alan Christopher Thomas - Minted - Pythonkc". Youtube. 2015-08-28. Archiviert vom Original am 2021-12-12. Abgerufen 2017-01-27.
  11. ^ "プエラリアジェル の 効果 は?". Bobo.digicool.com. Abgerufen 2017-01-27.
  12. ^ "Django ohne Mod_Python und WSGI -Unterstützung | Weblog | Django". Djangoproject.com. 2005-07-18. Abgerufen 2017-01-27.
  13. ^ "WSGI - WSGI -Server - Eventlet 0.20.1 Dokumentation". Eventlet.net. Abgerufen 2017-01-27.
  14. ^ "Falcon - Bare -Metal -Web -API -Framework für Python". Abgerufen 2017-10-22.
  15. ^ "Gevent-Fastcgi 1.0.2.1: Python-Paketindex". Pypi.python.org. 2015-12-06. Abgerufen 2017-01-27.
  16. ^ "Anomalie/Prestans: Ein WSGI-konforme REST Micro-Framework". Github.com. Abgerufen 2017-01-27.
  17. ^ "Google Code Archiv - Langzeitspeicher für Google Code -Projekthosting". Code.google.com. Abgerufen 2017-01-27.
  18. ^ "Pycnic Framework". Pycnic.nullism.com. Abgerufen 2017-01-27.
  19. ^ "TheIntencity/Restlite: Leichte Rastful-Server-Tools in Python". Github.com. Abgerufen 2017-01-27.
  20. ^ "Limodou/Uliweb: Einfache und einfache Python -Web -Framework". Github.com. Abgerufen 2017-01-27.
  21. ^ "Kellnerin Dokumentation". docs.pylonproject.org. Abgerufen 2018-09-26.
  22. ^ "Willkommen zu". Web.py. 2009-09-11. Abgerufen 2017-01-27.
  23. ^ "Weblayer - Weblayer v0.4.3 Dokumentation". Pakete.python.org. Abgerufen 2017-01-27.
  24. ^ "Willkommen | Werkzug (die Python WSGI Utility Library)". Werkzug.pocoo.org. Abgerufen 2017-01-27.
  25. ^ "Caldav und CardDav Server - Ein einfacher Kalender und Kontaktserver". Radicale.org. Abgerufen 2017-01-27.
  26. ^ "Modul ngx_http_uwsgi_module". Nginx.org. Abgerufen 2017-01-27.
  27. ^ "Python -Tools für Visual Studio - Dokumentation". Pytools.codeplex.com. Abgerufen 2017-01-27.
  28. ^ "Google Code Archiv - Langzeitspeicher für Google Code -Projekthosting". Code.google.com. Abgerufen 2017-01-27.
  29. ^ "Python Isapi -Erweiterung für IIS Download | SourceForge.net". Pyisapie.sourceforge.net. 2012-04-24. Abgerufen 2017-01-27.

Externe Links