Writer API - Una formula open source

La tecnología siempre ha sido mi aliada, un mundo donde las ideas cobran vida y los retos son oportunidades para innovar. En esta ocasión enfrentaba un nuevo reto con una necesidad específica: encontrar una manera eficiente y automatizada de generar documentos personalizados en masa, mi emprendimiento principal apimarket.mx estaba en el proceso de lanzamiento de IDSE PRO, una plataforma destinada al sector profesional relacionados a cumplimiento empresarial del Instituto Mexicano del Seguro Social. Necesitaba firmar los contratos de mis clientes de manera digital, pero mi proveedor de firma electrónica no contaba con un servicio de generación de documentos en masa y el flujo requería que los contratos fueran generados dinámicamente dentro del proceso de activación de una suscripción, la interacción humana no tenía cavidad pues retrasaría el tiempo de compra impactando directamente en la intención de nuestros potenciales clientes, entonces opte por buscar un proveedor que contara con esta infraestructura de generación masiva de documentos, pero los precios eran algo excesivos y con políticas de expiración de créditos a máximo un año, lo cual era contraproducente pues era un azar saber si realmente se requerían miles, pero teníamos que estar preparados con créditos suficientes de sobra, así que tercerizar el servicio con todo lo que conllevar depender de la infraestructura de un tercero no era una opción y así inicio mi investigación de alternativas open source para solventar la necesidad.

#Mi historia con el Open source

Recuerdo que en mis inicios no consideraba compartir mis proyectos o aprendizajes. Tenía miedo de que alguien tomara “mi idea” y la utilizara para su propio beneficio. Todo cambió cuando conocí a mi socio Carlos, quien me repetía sin cesar la importancia de compartir conocimientos. Su filosofía era clara: si nosotros mismos nos beneficiábamos del trabajo que otros habían liberado, ¿por qué no brindar también nuestras aportaciones? Durante muchos meses reflexioné sobre esto. Recordé todas las ocasiones en las que tomé el trabajo de alguien más, lo adapté y me facilitó el camino. Esa conciencia me hizo sentir la necesidad de aportar mi granito de arena. Al final, comprendí que el open source no consiste en perder algo valioso; consiste en crear una comunidad de colaboración mutua, donde todos aprendemos y nos beneficiamos de manera colectiva.

#La Inspiración: Docassemble y la Búsqueda de una Solución Ideal

En mi investigación de alternativas open source, me topé con Docassemble, una herramienta increíblemente poderosa y bien diseñada. Su enfoque en formularios y generación de documentos fue una gran fuente de inspiración. Sin embargo, a medida que profundizaba, me di cuenta de que su complejidad y la necesidad de integrar interfaces no eran lo que buscaba para mi solución. Mi objetivo era algo diferente: un servicio ligero, sin interfaz gráfica, que funcionara exclusivamente a través de APIs y que pudiera personalizarse fácilmente para adaptarse a las necesidades de diversas empresas. Docassemble se convirtió en el empujón que me inspiró a imaginar algo más específico, algo que pudiera simplificar, optimizar y además adaptar a varios casos de uso, vaya, algo más dinámico.

Con todo ese aprendizaje, me aventuré a crear un nuevo proyecto: Writer API, un microservicio diseñado con Python para la generación masiva de documentos. Esta idea floreció de la necesidad de contar con un servicio flexible, ligero y 100% orientado a APIs que pudiera ajustarse a múltiples escenarios de uso.

#Los Retos del Desarrollo

Crear Writer API no fue un camino sencillo. Aunque ya tenía experiencia desarrollando soluciones de API en mi empresa, los retos técnicos y de diseño me llevaron a cuestionarme en cada paso. encontré un camino lleno de retos, enseñanzas, inspiración y, sobre todo, fue un recorrido en el que valoré, más que nunca, el trabajo de miles de desarrolladores que comparten su conocimiento de forma abierta y gratuita Estos fueron algunos de los más significativos:

  • Diseño Ligero y Modular: Crear una solución sin GUI (Interfaz grafica) requería priorizar la eficiencia y la facilidad de despliegue. Docker fue una elección obvia para garantizar portabilidad, pero integrar herramientas como LibreOffice, encargada de la conversion de plantillas a PDF y gestionar dependencias fue un reto considerable.

  • Validación Estricta con YAML: Usar YAML como el eje central para definir la lógica y los parámetros de los documentos fue una decisión clave. Garantizar que cada plantilla respetara las reglas definidas en su archivo YAML requirió un enfoque meticuloso y pruebas constantes para evitar inconsistencias.

  • Elección de un motor de plantillas eficiente: Jinja2 fue mi favorito por su ligereza y simplicidad de uso. Integrarlo con la generación de documentos resultó bastante fluido.

  • Conversión a PDF: Generar archivos DOCX con docxtpl fue relativamente sencillo, pero la conversión a PDF me ocasionó quebraderos de cabeza. Encontrar una solución confiable y “headless” que funcionara de forma consistente dentro de Docker exigió un buen número de pruebas y ajustes

  • Servicio REST: Diseñar un servicio con endpoints REST desde cero hubiera consumido demasiado tiempo. Afortunadamente, FastAPI simplificó enormemente la tarea, permitiendo exponer en pocas líneas de código todas las funcionalidades de Writer API.

  • Autenticación Segura: Finalmente, necesitaba un sistema de autenticación que fuera seguro pero también fácil de implementar para los desarrolladores. Me decanté por JSON Web Tokens (JWT), logrando un balance adecuado entre simplicidad y protección de datos.

#Mi Experiencia y la Filosofía Open Source

A lo largo de mi carrera como desarrollador y empresario, me he dado cuenta de que las soluciones más valiosas no suelen crearse en completo aislamiento. Surgen, en gran medida, de la experiencia y aportaciones de cientos de personas que, en algún momento, tuvieron necesidades similares y decidieron compartir su trabajo de forma abierta.

Writer API no existiría sin proyectos como FastAPI, Docker o Jinja2. Cada reto que superé se logró gracias a foros, documentación y el conocimiento abierto de otras personas. Esa es la verdadera magia del open source: una filosofía de colaboración y aprendizaje continuo, en la que todos somos simultáneamente estudiantes y mentores.

Me llena de orgullo poder devolver un poco de eso a la comunidad y, al mismo tiempo, anhelo que Writer API inspire a otros a desarrollar soluciones que faciliten procesos y ahorren tiempo en sus proyectos. Puedes acceder libremente al código fuente de Writer API y adaptarlo a tus propias necesidades: Repositorio de Writer API en GitHub

#Reflexiones Finales

Crear Writer API fue un viaje emocionante y, en muchos momentos, desafiante. Logré resolver un problema puntual para mi empresa y mis clientes, pero, sobre todo, descubrí la satisfacción de contribuir al ecosistema open source.

A veces olvidamos que la tecnología no se trata solo de líneas de código, sino de resolver problemas reales, conectar con otros y avanzar juntos. Mi esperanza es que este proyecto, y la filosofía detrás de él, inspiren a más personas a crear, colaborar y compartir. Al final, la nostalgia que siento hoy al mirar hacia atrás no es otra cosa que gratitud: por cada reto que me hizo crecer, por cada colaborador que me ofreció su ayuda y por el poderoso sentimiento de construir un futuro más abierto y libre para todos.

Gracias a quienes hacen del desarrollo un espacio de aprendizaje continuo. Sigamos transformando nuestras ideas en impactos positivos para el mundo.