¿Qué es Litestar?

Litestar es un framework web asíncrono basado en Python, diseñado para ser ligero y modular. Su arquitectura permite a los desarrolladores crear aplicaciones de alto rendimiento y escalabilidad con un enfoque en la simplicidad y la facilidad de uso. Al igual que otros frameworks modernos, Litestar se basa en las capacidades asincrónicas de Python para manejar múltiples solicitudes de manera eficiente, lo que lo hace ideal para aplicaciones que requieren alta concurrencia y baja latencia.

Litestar proporciona un conjunto de utilidades para simplificar operaciones comunes en el desarrollo de APIs, como la integración con SQLAlchemy para la gestión de bases de datos.

Instalación

Litestar está disponible en PyPI, puedes agregarlo como dependencia a un proyecto gestionado con uv:

uv add 'litestar[standard]'

La variación standard es necesaria para que instale uvicorn, que es el servidor necesario para levantar la aplicación y poder acceder a ella a través del navegador.

Creación de una Aplicación Básica

Para crear una aplicación, crea un archivo llamado app.py con lo siguiente:

from litestar import Litestar, get
 
 
@get("/")
async def hello() -> str:
    return "¡Hola mundo!"
 
 
@get("/bye")
async def bye() -> str:
    return "Adiós mundo"
 
 
app = Litestar([hello, bye])

En este ejemplo, se definen dos funciones hello y bye que retornan mensajes de texto. Al agregar el decorador @get a cada función, se especifica que estas manejarán solicitudes GET en las rutas definidas por el parámetro (”/” para hello y “/bye” para bye). En este contexto, estas funciones se denominan “endpoints”.

Para ejecutar esta aplicación, ejecuta el siguiente comando:

litestar run --reload

Este comando reconocerá automáticamente el archivo app.py que contiene la aplicación (la instancia de Litestar) con el nombre app. El parámetro --reload habilita la recarga automática, lo que significa que el servidor se reiniciará automáticamente para reflejar cualquier cambio que realices en el código.

Nombre de aplicación no estándar

El comando litestar reconoce automáticamente archivos llamados app o application como puntos de entrada de la aplicación (documentación). Si tu archivo o aplicación no tienen uno de estos nombres, puedes especificarlo mediante el parámetro --app. Alternativamente, puedes ejecutar el servidor manualmente con uvicorn <nombre_archivo>:<nombre_app>.

Una vez levantado el servidor, puedes visitar en tu navegador las direcciones http://localhost:8000/ y http://localhost:8000/bye para recibir las respuestas de los endpoints.

Litestar provee generación automática de documentación en http://localhost:8000/schema/swagger. Esta documentación permite visualizar los detalles de cada endpoint, y probarlos a través de una interfaz web.

Generadores de Documentación

Litestar soporta otros generadores de documentación de API además de Swagger, como Redoc, RapiDoc, Stoplight Elements y Scalar. Para activarlo puedes utilizar su plugin correspondiente:

from litestar import Litestar, get
from litestar.openapi import OpenAPIConfig
from litestar.openapi.plugins import ScalarRenderPlugin, SwaggerRenderPlugin
 
openapi_config = OpenAPIConfig(
    title="Mi API",
    version="1.0.0",
    render_plugins=[SwaggerRenderPlugin(), ScalarRenderPlugin()],
)
 
 
@get("/")
def root() -> dict:
    return {"message": "Hola, Mundo!"}
 
 
app = Litestar(
    route_handlers=[root],
    openapi_config=openapi_config,
)

Con esta configuración adicional, podrás acceder a la documentación generada por Scalar en http://localhost:8000/schema/scalar, y Swagger seguirá estando disponible en http://localhost:8000/schema/swagger.