Volver a home


📝 Blog

JavaScript a Python Mi experiencia migrando una solución en Vault

1. Introducción
¿Por qué decidí migrar de JavaScript a Python?
Breve descripción de la solución en Vault que manejaba con Node.js y Express.
Objetivo de la migración.

2. Principales diferencias entre JavaScript y Python
Tipado dinámico vs. tipado más limpio en Python.
Manejo de dependencias (npm vs. pip/poetry).
Async/Await en ambos lenguajes.

3. Cómo repliqué la funcionalidad en Python
Estructura de archivos: comparando la organización en ambos lenguajes.
Librerías clave en Python para reemplazar las de Node.js.
Reescribiendo la conexión a Vault con hvac en lugar de la API de Node.

4. Retos en la migración
Adaptando la inyección de dependencias.
Manejo de configuraciones y variables en Python vs. JavaScript.
Diferencias en testing y CI/CD.

5. Lecciones aprendidas y conclusiones
Beneficios de Python en este contexto.
¿Vale la pena migrar siempre?

---

1. Introducción

Cuando comencé a desarrollar una solución basada en Vault utilizando JavaScript y Node.js con Express, el principal objetivo era gestionar credenciales y secretos de forma segura en entornos de desarrollo y producción. Esta solución consistía en una API que interactuaba con Vault para almacenar y recuperar datos sensibles de manera eficiente.

A medida que el proyecto creció, comenzaron a surgir ciertos inconvenientes. Entre ellos, la necesidad de una mayor estabilidad en la gestión de dependencias, mejor tipado para evitar errores en tiempo de ejecución y un ecosistema más alineado con infraestructura como código (IaC). Fue entonces cuando consideré migrar la solución a Python, un lenguaje que ofrecía una sintaxis más limpia, mejor integración con herramientas como Terraform y Helm, y una gestión de dependencias más estable.

El objetivo de esta migración fue mejorar la mantenibilidad del proyecto, reducir la complejidad en la gestión de dependencias y optimizar la integración con herramientas DevOps sin perder funcionalidades clave.

2. Principales diferencias entre JavaScript y Python

Tipado dinámico vs. tipado más limpio en Python
JavaScript es un lenguaje dinámico que permite flexibilidad en el manejo de tipos, pero esto puede generar errores inesperados. Python, aunque también es dinámico, permite el uso de typing para definir tipos de forma explícita, lo que ayuda a mejorar la legibilidad y prevención de errores.

Manejo de dependencias (npm vs. pip/poetry)
En JavaScript, la gestión de dependencias se realiza con npm o yarn, donde los cambios en versiones pueden generar incompatibilidades. En Python, pip junto con virtualenv o poetry ofrece una gestión más estable y predecible.

Async/Await en ambos lenguajes
Node.js introdujo async/await para manejar operaciones asincrónicas de manera eficiente, lo que simplificó el uso de promesas. En Python, asyncio proporciona funcionalidad similar, aunque no todas las librerías lo soportan de manera nativa, lo que requiere adaptar el código según las necesidades.

3. Cómo repliqué la funcionalidad en Python

Estructura de archivos: comparando la organización en ambos lenguajes
En Node.js, la estructura del proyecto solía dividirse en carpetas como routes, controllers y services. En Python, utilicé una organización similar con routers, services y models dentro de FastAPI.

Librerías clave en Python para reemplazar las de Node.js
Para la conexión con Vault en Node.js, utilizaba node-vault. En Python, reemplacé esta librería con hvac, que ofrece funcionalidades similares pero con una mejor integración en entornos DevOps.

Reescribiendo la conexión a Vault con hvac en lugar de la API de Node
En Node.js, la conexión con Vault se realizaba mediante node-vault. En Python, el cliente hvac permitió una integración más robusta con configuraciones más claras y tipadas.

4. Retos en la migración

Adaptando la inyección de dependencias
Node.js cuenta con varias librerías para inyección de dependencias, mientras que en Python utilicé el sistema de dependencias de FastAPI, que es más explícito y estructurado.

Manejo de configuraciones y variables en Python vs. JavaScript
En Node.js, las configuraciones generalmente se almacenan en .env y se cargan con dotenv. En Python, opté por pydantic para manejar configuraciones de manera validada y tipada.

Diferencias en testing y CI/CD
En Node.js, Jest era mi framework de pruebas. En Python, usé pytest, que tiene una sintaxis simple y permite mejores estrategias de parametrización. Para CI/CD, la migración requirió ajustes en los pipelines de GitLab CI/CD, adaptándolos a Python y tox para ejecutar pruebas en múltiples entornos.

5. Lecciones aprendidas y conclusiones

Beneficios de Python en este contexto
Python ofrece una mejor integración con herramientas de infraestructura, una sintaxis más clara y una gestión de dependencias más estable. Además, FastAPI resultó ser una excelente alternativa a Express por su rendimiento y documentación automática.

¿Vale la pena migrar siempre?
La migración de JavaScript a Python no siempre es necesaria. Si un equipo ya está familiarizado con Node.js y no hay problemas graves de mantenibilidad, podría no ser justificable. Sin embargo, si se busca integración con DevOps, mejor manejo de configuraciones y estabilidad a largo plazo, Python puede ser una excelente opción.

Volver al listado