Cuando decidí que mi Trabajo Especial de Grado sería la implementación de un API Gateway escrito en Go, sabía que no iba a ser un proyecto sencillo. La mayoría de las empresas utilizan soluciones ya consolidadas como Kong, NGINX o incluso servicios en la nube como AWS API Gateway, y no es casualidad: detrás de ese componente hay un sinfín de problemas resueltos que normalmente pasan desapercibidos. Asumir el reto de desarrollarlo desde cero significó enfrentarme a esa complejidad en carne propia.
El primer desafío fue definir el alcance. Un Gateway real en producción puede manejar balanceo de carga, autenticación federada, limitación de peticiones, métricas avanzadas y un sinfín de funcionalidades más. Incluirlo todo habría sido imposible en un trabajo académico, así que tuve que aprender a priorizar. El foco estuvo en crear un sistema que centralizara el acceso a los servicios, que incorporara control de roles, trazabilidad, versionado de las APIs y pruebas básicas de concurrencia. Esa decisión de renunciar a la perfección y quedarme con lo esencial fue mucho más difícil de lo que parece, porque cada vez que encontraba algo interesante en la literatura técnica, sentía la tentación de integrarlo.
El uso de Golang también me puso a prueba. Su simplicidad es engañosa a pesar de trabajar a diario con este lenguaje de programación: desarrollar un Gateway requería manejar múltiples solicitudes concurrentes, crear middlewares capaces de interceptar y redirigir tráfico, y garantizar que un error en una ruta no comprometiera todo el sistema. Fue la primera vez que sentí de verdad el peso de construir software que no puede fallar, porque un Gateway roto significa que nada detrás de él funciona. Cada panic no manejado o cada timeout sin control era un recordatorio de esa responsabilidad.
La parte de persistencia con PostgreSQL se trataba de modelar usuarios, permisos, logs de auditoría y versiones de aplicaciones, todo en una estructura que resistiera el crecimiento futuro. Diseñar la base de datos fue un ejercicio constante de equilibrio entre normalización y rendimiento, y recuerdo que más de una vez tuve que rehacer relaciones enteras porque descubrí que, en escenarios de carga, ciertas consultas no eran viables.
El frontend con React e Inertia fue otro mundo. Aunque mi formación era más fuerte en backend, necesitaba una interfaz administrativa que mostrara la gestión de aplicaciones y roles de manera intuitiva. Fue completamente un reto entender cómo hacer convivir la lógica de Go con un renderizado que no dependiera de un API REST tradicional. Resolver la sincronización entre estado, vistas y datos me obligó a leer bastante documentación y a cometer muchos errores antes de llegar a algo consistente.
Uno de los obstáculos más importantes fue el versionado de las APIs. Al principio parecía algo trivial, pero en la práctica tuve que tomar decisiones sobre si manejarlo por encabezados HTTP o por rutas con prefijos como /v1.0.0/app
. Terminé soportando ambas modalidades, y eso implicó escribir un resolutor de versiones que pudiera discriminar de manera confiable entre diferentes formatos de petición. Fue tedioso y propenso a errores, pero fue de esas partes del proyecto que me dieron la sensación de estar construyendo algo realmente sólido.
Si algo me dejó este proceso, es que lo más difícil no fue el código en sí, sino la integración de todas las piezas: arquitectura, seguridad, bases de datos, interfaz y pruebas. Construir un Gateway fue un rompecabezas donde cada decisión técnica arrastraba consecuencias en otro módulo. Aprendí a aceptar errores, a rediseñar componentes y a documentar con precisión, porque sin ese orden el proyecto se habría vuelto inmanejable.
Hoy, viendo el sistema terminado, no pienso en él como un reemplazo de las grandes soluciones del mercado. Lo pienso como una experiencia intensiva en la que tuve que convertirme en arquitecto, desarrollador, tester y administrador de sistemas al mismo tiempo. Fue agotador, frustrante y lleno de tropiezos, pero también fue la forma más honesta de aprender cómo funciona de verdad un API Gateway desde dentro.