API PORTAFOLIO

Bienvenido a mi proyecto de una API web para gestionar mi portafolio.

Sobre el Proyecto

Este proyecto consiste en una API desarrollada en Python utilizando el framework Flask, diseñada para gestionar y presentar de manera dinámica la información de mi currículum vitae y portafolio. La API permite la actualización y visualización de datos como información personal, experiencia laboral, educación, habilidades y proyectos, facilitando la administración y presentación de mi perfil profesional.

Tecnologías Utilizadas

Python Python
Linux Linux
Json Html
Python CSS 5
Linux JAVASCRIPT
Python AWS CLOUDFRONT
Linux AWS S3
Json AWS ROUTE 53

Documentación Técnica

Componentes Principales

  • Frontend: Interfaz de usuario para el panel de administración, construida con HTML, CSS y JavaScript, que permite la gestión de la información del portafolio de manera intuitiva.
  • Backend: Backend: Desarrollado en Python con Flask, maneja las rutas de la API y la lógica de negocio, permitiendo operaciones CRUD (Crear, Leer, Actualizar, Eliminar) sobre las diferentes secciones del portafolio.
  • Almacenamiento de Datos: En lugar de utilizar una base de datos tradicional, la información se almacena en estructuras de datos en memoria durante la ejecución de la aplicación. Las imágenes, como fotos de perfil o proyectos, se gestionan directamente en el sistema de archivos, almacenándose en una carpeta específica dentro del proyecto.
  • Diagrama de Arquitectura

    La arquitectura del proyecto sigue una estructura cliente-servidor, donde el frontend interactúa con la API RESTful proporcionada por el backend. El despliegue se realiza en AWS, aprovechando servicios como EC2 para el alojamiento del servidor y S3 para el almacenamiento de recursos estáticos.

    Gestión de Datos

    La información del portafolio se mantiene en estructuras de datos en memoria mientras la aplicación está en ejecución. Al no utilizar una base de datos persistente, los datos se restablecen al estado inicial definido en el código cada vez que se reinicia el servidor. Las imágenes se almacenan en una carpeta específica dentro del proyecto y se gestionan directamente desde el sistema de archivos.

    Despliegue y Hosting

    El proyecto está desplegado en AWS, utilizando EC2 para el servidor de la aplicación y S3 para el almacenamiento de archivos estáticos. Se configura un balanceador de carga para gestionar el tráfico entrante y asegurar alta disponibilidad. Además, se implementan prácticas de seguridad como la configuración de grupos de seguridad y el uso de HTTPS para la comunicación segura.

    Costo de Funcionamiento

    El proyecto está diseñado para ser rentable y escalable, aprovechando los servicios de AWS con un modelo de pago por uso que minimiza los costos operativos.

    Para estimar los costos iniciales, se ha utilizado el AWS Pricing Calculator, y se monitorean los costos actuales con AWS Cost Explorer.

    En el futuro, se implementarán otras herramientas como AWS Budgets, AWS Cost Anomaly Detection, AWS Trusted Advisor y AWS Compute Optimizer para mejorar y optimizar el costo en el funcionamiento continuo de la plataforma.

  • Amazon EC2: Utilizado para alojar el backend de la API, con costos basados en el tipo de instancia y el tiempo de uso.
  • Amazon S3: Empleado para almacenar y servir archivos estáticos del frontend, con costos que dependen del almacenamiento utilizado y el tráfico de salida.
  • Transferencia de Datos: Costos asociados a la transferencia de datos desde EC2 y S3 hacia Internet.
  • Amazon RDS: Si se utiliza una base de datos, los costos se basan en el tipo de instancia, almacenamiento y transferencia de datos.
  • Estimación Mensual: Dependiendo del tráfico y del uso, el costo mensual promedio estimado es de 22€ a 25€, con capacidad de ajuste según el crecimiento del proyecto.

    Presupuesto

    Servicio Descripción Costo Aproximado (€/mes)
    Amazon EC2 Instancia t2.micro para alojar el backend de la API (24 horas × 30 días × $0.0116/hora) 8.35€
    Amazon S3 Almacenamiento y entrega del frontend estático (5 GB de almacenamiento y 3 GB de tráfico de salida) 0.13€
    Transferencia de Datos Desde EC2 y S3 hacia Internet (6 GB × $0.09/GB) 0.54€
    Amazon RDS Instancia db.t2.micro para la base de datos (si se utiliza) 15.00€

    Costo Total Aproximado: Sumando todos los servicios, el costo mensual promedio estimado es de 24.02€.

    Dependiendo del tráfico y del uso, el costo mensual puede ajustarse según el crecimiento del proyecto.

    Notas:

  • Escalabilidad: Los costos pueden ajustarse según el aumento en el volumen de tráfico o uso de la API.
  • Posibles Ahorros: Algunas optimizaciones, como la reducción de datos en Amazon S3 o el ajuste de tiempo de ejecución en Amazon EC2, pueden reducir el costo total.
  • Consideraciones de Ubicación: Los precios pueden variar ligeramente según la región de AWS seleccionada en Europa.
  • Proceso de Desarrollo

    Planificación

    El desarrollo de la API Web Portafolio se llevó a cabo siguiendo las mejores prácticas en ingeniería de software, asegurando calidad y eficiencia en cada etapa.

  • Análisis de Requisitos: Se definieron las funcionalidades esenciales de la API, incluyendo la gestión de información personal, experiencia laboral, educación, habilidades y proyectos.
  • Diseño de la Arquitectura: Se estableció una arquitectura cliente-servidor, donde el frontend interactúa con la API RESTful desarrollada en Flask.
  • Desarrollo del Backend: Se implementaron las rutas y lógica de negocio en Flask, permitiendo operaciones CRUD sobre las diferentes secciones del portafolio.
  • Desarrollo del Frontend: Se creó una interfaz de usuario intuitiva utilizando HTML, CSS y JavaScript, facilitando la gestión de la información del portafolio.
  • Pruebas y Validación: Se realizaron pruebas unitarias y de integración para asegurar el correcto funcionamiento de la API y la interfaz de usuario.
  • Despliegue: La aplicación se desplegó en AWS, utilizando EC2 para el servidor y S3 para el almacenamiento de archivos estáticos.
  • Mantenimiento: Se estableció un plan de mantenimiento para asegurar la actualización y mejora continua de la aplicación, incluyendo la implementación de medidas de seguridad y optimización de rendimiento.
  • Este enfoque estructurado garantizó la entrega de una solución robusta y escalable para la gestión y presentación de mi perfil profesional en línea.

    Retos y Soluciones

    Al desarrollar la API Web Portafolio, se presentaron diversos desafíos que fueron abordados con soluciones específicas para garantizar una aplicación robusta y eficiente

  • Gestión de Datos sin Base de Datos Persistente: Al no utilizar una base de datos tradicional, mantener la integridad y consistencia de los datos en memoria durante la ejecución de la aplicación se convirtió en un reto, especialmente ante posibles reinicios del servidor.
  • Solución: Se implementaron estructuras de datos en memoria bien definidas y se establecieron procedimientos de inicialización que cargan datos predeterminados al iniciar la aplicación. Además, se consideró la posibilidad de integrar una base de datos ligera en el futuro para persistir los datos sin complicar la arquitectura actual.
  • Almacenamiento y Gestión de Imágenes: Manejar las imágenes del portafolio, como fotos de perfil y proyectos, sin una base de datos que gestione referencias y metadatos, requería una estrategia eficiente para su almacenamiento y acceso.
  • Solución: Se creó una estructura de directorios organizada dentro del sistema de archivos del proyecto para almacenar las imágenes. Se implementaron funciones en Flask que permiten la carga, almacenamiento y recuperación de imágenes de manera segura, asegurando que las rutas de acceso sean dinámicas y se actualicen según las necesidades del usuario.
  • Despliegue en AWS y Configuración de Servicios: Configurar y desplegar la aplicación en AWS, integrando servicios como EC2 para el servidor y S3 para el almacenamiento de archivos estáticos, implicaba una curva de aprendizaje y la necesidad de asegurar una comunicación eficiente entre los servicios.
  • Solución: Se siguieron las mejores prácticas recomendadas por AWS para la configuración de instancias EC2 y buckets S3. Se establecieron políticas de seguridad adecuadas, incluyendo grupos de seguridad y roles de IAM, para controlar el acceso y garantizar la protección de los datos. Además, se configuró un balanceador de carga para distribuir el tráfico entrante y asegurar la alta disponibilidad de la aplicación.
  • Seguridad y Autenticación: Proteger la API contra accesos no autorizados y garantizar la integridad de los datos fue una preocupación constante, especialmente al manejar información personal y profesional.
  • Solución: Se implementaron mecanismos de autenticación basados en tokens, utilizando bibliotecas como Flask-JWT-Extended, que permiten la generación y validación de tokens seguros para controlar el acceso a las rutas de la API. Además, se configuró el uso de HTTPS para cifrar las comunicaciones entre el cliente y el servidor, protegiendo los datos transmitidos.
  • Escalabilidad y Rendimiento: Asegurar que la aplicación pueda manejar un aumento en la carga de usuarios y solicitudes sin degradar el rendimiento fue un aspecto crítico a considerar.
  • Solución: Se diseñó la arquitectura de la aplicación siguiendo principios de escalabilidad horizontal, permitiendo la adición de más instancias de EC2 según la demanda. Se implementaron técnicas de caché para reducir la carga en el servidor y se optimizaron las consultas y operaciones internas para mejorar la eficiencia.
  • Abordar estos desafíos con soluciones específicas permitió el desarrollo de una API Web Portafolio robusta, segura y preparada para adaptarse a futuras necesidades y escalabilidad.