Conexión de Python con Servidores Web: WSGI y ASGI

Clase 2 de 22Curso de Despliegue de Aplicaciones Python en la Nube

Resumen

¿Cómo se conectan las aplicaciones de Python con los servidores web?

Las aplicaciones de Python establecen comunicación con los servidores web mediante protocolos que facilitan el intercambio de información. Tradicionalmente, los servidores web retornan un HTML que el navegador interpreta para mostrar la página web. Pero las aplicaciones de Python tradicionales utilizan el protocolo WSGI (Web Server Gateway Interface) para manejar las solicitudes y respuestas. Sin embargo, con la evolución de Python hacia la programación asincrónica, el protocolo ASGI (Asynchronous Server Gateway Interface) se ha vuelto relevante. ASGI permite manejar múltiples solicitudes de manera simultánea sin la necesidad de esperar que todas estén listas.

¿Qué es el protocolo WSGI y cómo se implementa?

El protocolo WSGI actúa como un puente entre las aplicaciones de Python tradicionales y los servidores web. Una aplicación típica con WSGI recibe una solicitud (request), genera una respuesta (response) y la retorna para que el servidor web la procese.

Ejemplo básico de una aplicación WSGI con Unicorn

Para ilustrar el uso de WSGI, consideremos un ejemplo sencillo desarrollado en Visual Studio Code utilizando Unicorn, una librería que permite ejecutar aplicaciones de Python en servidores web:

def app(environ, start_response):
    status = '200 OK'
    headers = [('Content-type', 'text/plain; charset=utf-8')]
    start_response(status, headers)
    return [b"Hello WSGI World"]

Este fragmento de código define una aplicación que retorna un saludo básico. Unicorn se utiliza para manejar la ejecución y conexión al servidor:

  1. Crear un archivo WSGIApp.py con el código anterior.
  2. Instalar Unicorn con pip install gunicorn.
  3. Ejecutar la aplicación:
gunicorn --workers 2 --bind 127.0.0.1:8000 WSGIApp:app

Al acceder a http://127.0.0.1:8000, se verá el mensaje "Hello WSGI World".

¿Qué diferencia al protocolo ASGI?

El protocolo ASGI es esencial para aplicaciones asincrónicas construidas en Python. Facilita el manejo de múltiples solicitudes simultáneamente, optimizando la ejecución y aprovechando los beneficios del asincronismo.

¿Cuándo elegir WSGI o ASGI?

Elegir entre WSGI y ASGI depende de las necesidades y naturaleza de tu aplicación:

  • WSGI es ideal para aplicaciones síncronas, especialmente si usas frameworks como Django sin compatibilidad asincrónica.
  • ASGI es recomendable para aplicaciones asincrónicas, como aquellas desarrolladas con FastAPI. ES ideal si requieres manejar WebSockets o leer y escribir en disco de forma veloz.

¿Cuáles frameworks y librerías son adecuados para cada protocolo?

Python ofrece múltiples frameworks de desarrollo web, y cada uno está aliado con diferentes servidores, dependiendo sus características. Aquí algunos ejemplos:

  • Django: Puede funcionar con WSGI, utilizando uWSGI o con Unicorn. También es compatible con ASGI para implementar asincronismo.
  • FastAPI: No es compatible con uWSGI, requiere Unicorn para su ejecución asincrónica eficiente.

Es crucial elegir correctamente el protocolo y librería según las demandas de tu aplicación para garantizar un rendimiento óptimo.

Explora las numerosas opciones y configura tu entorno de desarrollo para satisfacer tus necesidades específicas. ¡Te animamos a seguir aprendiendo y a crear nuevas aplicaciones!