Articulo de referencia

Interfaz de puerta de enlace del servidor web

La Interfaz de Puerta de Enlace del Servidor Web ( WSGI , pronunciada whiskey [ 1 ] [ 2 ] o WIZ -ghee [ 3 ] ) es una convención de llamada simple para que los servidores web ree...

La Interfaz de Puerta de Enlace del Servidor Web ( WSGI , pronunciada whiskey [ 1 ] [ 2 ] o WIZ -ghee [ 3 ] ) es una convención de llamada simple para que los servidores web reenvíen solicitudes a aplicaciones o marcos web escritos en el lenguaje de programación Python . La versión actual de WSGI, la versión 1.0.1, está especificada en la Propuesta de Mejora de Python (PEP) 3333. [ 4 ]

WSGI se especificó originalmente como PEP-333 en 2003. [ 5 ] PEP-3333, publicado en 2010, actualiza la especificación para Python 3 .

Fondo

En 2003, los frameworks web de Python generalmente se escribían solo para CGI , FastCGI , mod_python o alguna otra API personalizada de un servidor web específico . [ 6 ] Para citar PEP 333:

Python cuenta actualmente con una amplia variedad de frameworks para aplicaciones web, como Zope, Quixote, Webware, SkunkWeb, PSO y Twisted Web, entre otros. Esta gran variedad de opciones puede resultar problemática para los nuevos usuarios de Python, ya que, por lo general, la elección de su framework limitará la disponibilidad de servidores web, y viceversa. Por el contrario, si bien Java dispone de la misma cantidad de frameworks para aplicaciones web, su API de "servlets" permite que las aplicaciones escritas con cualquier framework de Java se ejecuten en cualquier servidor web compatible con dicha API.

WSGI se creó así como una interfaz independiente de la implementación entre servidores web y aplicaciones o marcos web para promover una base común para el desarrollo de aplicaciones web portátiles . [ 4 ]

Descripción general de las especificaciones

La WSGI tiene dos caras:

  • el lado del servidor /pasarela. Este suele ejecutar un software de servidor web completo como Apache o Nginx , o es un servidor de aplicaciones ligero que puede comunicarse con un servidor web, como flup .
  • el lado de la aplicación/marco. Se trata de una función invocable de Python, proporcionada por el programa o marco de Python.

Entre el servidor y la aplicación, puede haber uno o más componentes de middleware WSGI , que implementan ambos lados de la API, normalmente en código Python.

WSGI no especifica cómo se debe iniciar el intérprete de Python, ni cómo se debe cargar o configurar el objeto de la aplicación, y los diferentes frameworks y servidores web lo consiguen de distintas maneras.

Middleware WSGI

Un componente de middleware WSGI es una función invocable de Python que, a su vez, es una aplicación WSGI, pero que puede gestionar las solicitudes delegando en otras aplicaciones WSGI. Estas aplicaciones también pueden ser componentes de middleware WSGI. [ 7 ]

Un componente de middleware puede realizar funciones como: [ 7 ]

  • Enrutar una solicitud a diferentes objetos de la aplicación en función de la URL de destino , tras modificar las variables de entorno correspondientemente.
  • Permitir que múltiples aplicaciones o marcos de trabajo se ejecuten en paralelo en el mismo proceso.
  • Balanceo de carga y procesamiento remoto, mediante el reenvío de solicitudes y respuestas a través de una red.
  • Realizar el postprocesamiento del contenido, como la aplicación de hojas de estilo XSLT.

Ejemplos

Ejemplo de aplicación

Una aplicación " Hola, mundo! " compatible con WSGI escrita en Python :

def aplicación ( entorno , respuesta_inicial ):start_response ( "200 OK" , [( "Content-Type" , "text/plain" )])yield b "¡Hola, mundo! \n "

Dónde:

  • La línea 1 define una función [ 8 ] llamada application, que toma dos parámetros, environy start_response. environes un diccionario que contiene variables de entorno CGI, así como otros parámetros de solicitud y metadatos bajo claves bien definidas. [ 9 ]start_response es una función invocable en sí misma, que toma dos parámetros posicionales, statusy response_headers.
  • La línea 2 llama a start_response, especificando "200 OK" como estado HTTP y un encabezado de respuesta "Content-Type".
  • La línea 3 convierte la función en un generador . El cuerpo de la respuesta se devuelve como un iterable de cadenas de bytes .

Ejemplo de cómo llamar a una aplicación

Un ejemplo completo de un servidor de red WSGI queda fuera del alcance de este artículo. A continuación, se muestra un esquema de cómo se llamaría a una aplicación WSGI y se recuperarían su línea de estado HTTP, los encabezados de respuesta y el cuerpo de la respuesta como objetos Python. [ 10 ]environ Se han omitido los detalles sobre cómo construir el diccionario.

from io import BytesIOdef call_application ( app , environ ): status = None headers = None body = BytesIO ()def start_response ( rstatus , rheaders ): estado no local , encabezados estado , encabezados = rstatus , rheadersapp_iter = app ( environ , start_response ) try : for data in app_iter : assert ( status is not None and headers is not None ), " start_response() no fue llamado" body.write ( data ) finally : if hasattr ( app_iter , " close " ) : app_iter.close ( ) return status , headers , body.getvalue ( )entorno = { ... } # dict "environ" status , headers , body = call_application ( app , environ )

Aplicaciones y marcos de trabajo compatibles con WSGI

Numerosos frameworks web son compatibles con WSGI:

Actualmente, existen envoltorios disponibles para FastCGI , CGI , SCGI , AJP (usando flup), twisted.web , Apache (usando mod_wsgi o mod_python ), Nginx (usando ngx_http_uwsgi_module), [ 27 ] Nginx Unit (usando el módulo de lenguaje Python), [ 28 ] y Microsoft IIS (usando WFastCGI, [ 29 ] isapi-wsgi, [ 30 ] PyISAPIe, [ 31 ] o una puerta de enlace ASP ).

Véase también

Referencias

  1. Simionato, Michele (11 de junio de 2007). "Introducción a la programación web con WSGI" .
  2. Edge, Jake (9 de julio de 2019). "Experimentando con microframeworks" . LWN .
  3. Goldberg, Kevin (09/05/2016). "Introducción a los servidores WSGI de Python para el rendimiento | AppDynamics" . Blog de monitorización del rendimiento de aplicaciones | AppDynamics . Consultado el 20/08/2020 .
  4. 1 2 "PEP 3333 - Interfaz de puerta de enlace de servidor web Python v1.0.1" . Python.org . Consultado el 4 de abril de 2018 .
  5. "PEP 333 -- Interfaz de puerta de enlace de servidor web de Python v1.0" . Python.org . Consultado el 4 de abril de 2018 .
  6. "Página principal - Wiki de Python" . Python.org . Consultado el 27 de enero de 2017 .
  7. 1 2 "PEP 3333 -- Interfaz de puerta de enlace de servidor web Python v1.0.1" . Python.org . Consultado el 4 de abril de 2018 .
  8. es decir, "una función, método, clase o una instancia con un__call__método"
  9. "PEP 3333 -- Interfaz de puerta de enlace de servidor web Python v1.0.1" . Python.org . Consultado el 4 de abril de 2018 .
  10. "Creación de middleware WSGI - Alan Christopher Thomas - Minted - PythonKC" . YouTube . 28 de agosto de 2015. Archivado del original el 12 de diciembre de 2021. Consultado el 27 de enero de 2017 .
  11. "¿プエラリアジェルの効果は?" . Bobo.digicool.com . Consultado el 27 de enero de 2017 .
  12. "Django sin mod_python y soporte para WSGI | Blog | Django" . Djangoproject.com . 18 de julio de 2005. Consultado el 27 de enero de 2017 .
  13. "wsgi – Servidor WSGI — Documentación de Eventlet 0.20.1" . Eventlet.net . Consultado el 27 de enero de 2017 .
  14. "Falcon - Marco de trabajo de API web bare-metal para Python" . Consultado el 22 de octubre de 2017 .
  15. "gevent-fastcgi 1.0.2.1 : Índice de paquetes de Python" . Pypi.python.org . 2015-12-06 . Consultado el 2017-01-27 . 
  16. "anomaly/prestans: Un micro-framework REST compatible con WSGI" . GitHub.com . Consultado el 27 de enero de 2017 .
  17. "Archivo de Google Code: almacenamiento a largo plazo para el alojamiento de proyectos de Google Code" . Code.google.com . Consultado el 27 de enero de 2017 .
  18. "Pycnic Framework" . Pycnic.nullism.com . Consultado el 27 de enero de 2017 .
  19. "theintencity/restlite: Herramientas de servidor RESTful ligeras en Python" . GitHub.com . Consultado el 27 de enero de 2017 .
  20. "Socketify: Servidores de alto rendimiento para Http/Https y WebSockets para PyPy3 y Python3" . GitHub.com . Consultado el 12 de agosto de 2025 .
  21. "limodou/uliweb: Marco de trabajo web de Python simple y fácil de usar" . GitHub.com . Consultado el 27 de enero de 2017 .
  22. "documentación de camarera" . docs.pylonsproject.org . Consultado el 26 de septiembre de 2018 .
  23. "Bienvenido a" . Web.py. 11 de septiembre de 2009. Consultado el 27 de enero de 2017 .
  24. "weblayer — documentación de weblayer v0.4.3" . Packages.python.org . Consultado el 27 de enero de 2017 .
  25. "Bienvenido | Werkzeug (La biblioteca de utilidades WSGI de Python)" . Werkzeug.pocoo.org . Consultado el 27 de enero de 2017 .
  26. "Servidor CalDAV y CardDAV: un servidor sencillo de calendario y contactos" . Radicale.org . Consultado el 27 de enero de 2017 .
  27. "Módulo ngx_http_uwsgi_module" . Nginx.org . Consultado el 27 de enero de 2017 .
  28. "Configuración — Unidad NGINX" . Unit.nginx.org . Consultado el 4 de mayo de 2023 .
  29. "Herramientas de Python para Visual Studio - Documentación" . Pytools.codeplex.com . Consultado el 27 de enero de 2017 .
  30. "Archivo de Google Code: almacenamiento a largo plazo para el alojamiento de proyectos de Google Code" . Code.google.com . Consultado el 27 de enero de 2017 .
  31. "Descarga de la extensión ISAPI de Python para IIS | SourceForge.net" . Pyisapie.sourceforge.net . 24/04/2012 . Consultado el 27/01/2017 .
  • PEP 333 – Interfaz de puerta de enlace de servidor web Python
  • PEP 3333 – Interfaz de puerta de enlace de servidor web Python v1.0.1
  • Metaframework WSGI
  • Wiki completa sobre todo lo relacionado con WSGI.
  • Tutorial de WSGI
  • Módulo wsgiref de la biblioteca estándar de Python
  • Primeros pasos con WSGI
  • NWSGI archivado el 27/10/2013 en Wayback Machine : implementación .NET de la especificación WSGI de Python para IronPython e IIS.
  • Servidor Gevent-FastCGI implementado utilizando la biblioteca de red basada en corrutinas de Gevent.