Potencia tu app Python con Rust: Las lecciones de JustAPI
JustAPI: Cuando Python Se Encuentra con Rust yDeja de Hacer el Trabajo Sucio
Hay una pregunta que me persigue desde que probé este proyecto: ¿por qué tu framework web de Python se pasa la vida haciendo cosas que no tienen nada que ver con tu código?
Piénsalo. Cada vez que llega una petición, atraviesa capa tras capa —Starlette, uvicorn, el event loop de asyncio— antes de llegar a lo que realmente te importa. Serialización en Python, enrutamiento en Python, TLS en Python. Todo se ejecuta exactamente igual para cada solicitud, una y otra vez.
¿Y si ese trabajo repetitivo viviera en Rust? ¿Y si Python solo interviniera en el momento exacto donde tu lógica de negocio empieza?
Eso es ExactlyAPI.
Los Números No Son Lo Que Parecen
Antes de hablar de arquitectura, hablemos de rendimiento —porque las promesas sin contexto son marketing, no ingeniería.
El proyecto alcanza 766.000 peticiones por segundo en un hello-world básico. El router resuelve rutas en unos 51 nanosegundos con 500 endpoints configurados. El throughput async mejoró 14 veces al migrar a Tokio con soporte para CPython libre de GIL.
Ahora, ¿qué significa esto en la práctica? Si tu API maneja miles de solicitudes por segundo, estas mejoras se multiplican. Latencia más baja significa usuarios más felices. Mayor throughput significa servidores que dan más de sí.
Pero lo más interesante no son los números en sí. Es lo que no tienes que gestionar. No más uvicorn. No más Gunicorn. No más pila de middleware ASGI que debuggear a las tres de la mañana. Todo vive en Rust, y tu código Python es simplemente... tu código.
La Arquitectura: Python Como Excepción, No Como Regla
El camino de una petición es así: Kernel (epoll/io_uring) → Gestor de conexiones de Tokio → TLS via rustls → Parsing HTTP con Hyper → Router (radix trie de matchit) → Cadena de middleware (autenticación, CORS, rate-limiting) → Frontera con Python vía PyO3 → Tu handler → Serializador en Rust → Respuesta.
Observa dónde aparece Python: solo en el punto donde empieza tu lógica de aplicación. Todo lo anterior —todo lo que se ejecuta idénticamente para cada petición— es Rust.
El desarrollador de ExactlyAPI se impuso una regla durante el desarrollo: si algo puede implementarse en Rust, debe implementarse en Rust. No "puede ser más rápido en Rust". Puede implementarse. Python queda reservado para el pegamento entre los valores Rust y tus handlers.
Es una restricción que dio forma a todo el proyecto y lo diferencia genuinamente de otros frameworks que han añadido piezas de Rust como parches.
Qué Significa Esto Para Tu Día a Día
Aquí es donde esta aproximación se pone interesante para startups y equipos en crecimiento.
Tienes un framework completo —HTTP/1.1 y HTTP/2, TLS, routing con parámetros, serialización JSON, documentación OpenAPI automática— con 30 líneas de código que parecen Python de verdad:
from exactlyapi import ExactlyAPIApp
app = ExactlyAPIApp()
@app.get("/")
def hello():
return {"Hola": "Mundo"}
app.run()
Pero debajo de esa superficie familiar hay un servidor en Rust que gestiona TLS, maneja conexiones y serializa respuestas sin pisar Python jamás. La experiencia de desarrollo se mantiene Pythonica. El rendimiento runtime es de Rust.
Para equipos construyendo MVPs que quizás necesiten escalar después, esto importa. Escribes en Python hoy. Obtienes rendimiento de Rust sin reescribir nada cuando llegue el momento de asumir más carga.
El Factor IA: Un Compañero de Ingeniería, No un Reemplazo
Este proyecto se construyó con IA agéntica como participante activo —no como autocompletado, sino como guía de ingeniería que ayudó a diseñar la arquitectura, convertir decisiones en código, encontrar bugs y escribir tests.
Vale la pena hablar de esto con honestidad, porque cada vez es más común y rara vez se discute con transparencia.
El desarrollador describe el codebase en tres niveles: partes que entiende completamente, partes que maneja lo suficiente para mantener, y partes que la IA escribió y él revisó y testó pero no podría reproducir de memoria. Deja claro que esto es parte de cómo existe el proyecto.
Creo que es el enfoque correcto. Las herramientas de IA están acelerando el desarrollo en proyectos complejos, y fingir lo contrario no ayuda a nadie. La clave está en entender qué posees versus qué has delegado —y ser honesto al respecto.
La Conclusión Práctica
Frameworks como ExactlyAPI representan un cambio en cómo estamos pensando el rol de Python en sistemas de alto rendimiento. Python no va a desaparecer de la lógica de aplicación —su legibilidad y ecosistema son demasiado valiosos. Pero la asunción de que el framework mismo tiene que correr en Python está siendo cuestionada.
Tanto si ExactlyAPI se convierte en tu próximo framework como si se queda en un experimento interesante, la idea de fondo tiene valor: mira qué se ejecuta igual en cada petición de tu stack. Eso es territorio para Rust. Las partes que cambian, mantenlas en el lenguaje donde tu equipo sea más productivo.
La brecha entre "funciona" y "funciona bien" sigue reduciéndose. Los usuarios no notarán la arquitectura, pero sí notarán la latencia.
Dónde Estamos Ahora
ExactlyAPI va por la versión 2.0.10 con funcionalidades documentadas que incluyen WebSockets, SSE, tareas en segundo plano, un scheduler, acceso a bases de datos vía SQLx, y herramientas operativas como OpenTelemetry y métricas Prometheus. Está en PyPI con wheels para Linux, macOS, Windows y la build libre de GIL de CPython 3.14t.
Los números están en el repositorio. Los tests pasan. Los fallos están documentados. Ese tipo de transparencia ingenieril es el que deberíamos fomentar más.
Si estás construyendo APIs en Python y el rendimiento te importa, merece una mirada. El futuro de los frameworks web en Python quizás no se parezca a lo que usas hoy.