Caso de Estudio Real: Solución para un Proyecto Gubernamental

Caso de Estudio Real: Solución para un Proyecto Gubernamental

2025-04-27 18:12:55

Requerimiento del Cliente (Gobierno)

  • Desarrollar una API para listar empresas registradas por sectores como Tecnología, Salud, Agricultura, entre otros.

  • La API debe permitir:

    • Consultar todas las empresas.

    • Filtrar empresas por sector económico.

  • La solución debe estar alojada en la nube (Azure).

  • La base de datos debe escalar con facilidad.

    1. Subes el proyecto a GitHub.

      El backend debe ser desarrollado en Python.


      Tecnologías Utilizadas

      • Azure Cosmos DB: Base de datos NoSQL distribuida globalmente.

      • Azure Web App: Servicio de hospedaje para aplicaciones web.

      • Python + Flask: Micro-framework ligero para desarrollar la API REST.

      • Particionamiento: Uso de particiones lógicas en Cosmos DB para optimizar consultas.


      Arquitectura de la Solución

      • Backend API: Desarrollado con Flask, desplegado en Azure Web App.

      • Base de datos: Azure Cosmos DB, particionada por el campo sector.

      • Escalabilidad: Cosmos DB Serverless para optimización de costos.




      Estructura del Proyecto

      /api-empresas
        |- app.py
        |- requirements.txt
        |- config.py
       
      config.py o seed_db

      from azure.cosmos import CosmosClient, PartitionKey
      from faker import Faker


      # CONFIGURACIÓN DE COSMOS DB
      endpoint = "https://tu-cosmos-db.documents.azure.com:443/"
      key = "tu-key"  
      client = CosmosClient(endpoint, key)


      # CREACIÓN DE BASE DE DATOS
      db_name = "EmpresasDB"
      database = client.create_database_if_not_exists(id=db_name)


      # CREACIÓN DE CONTENEDOR
      container_name = "EmpresasPorSector"

      # Partición basada en sector empresarial
      container = database.create_container_if_not_exists(
          id=container_name,
          partition_key=PartitionKey(path="/sector"),
          offer_throughput=None  # Serverless
      )

      # GENERACIÓN DE DATOS FALSOS DE EMPRESAS

      fake = Faker()

      # Lista de sectores empresariales
      sectores_fijos = [
          "Tecnología", "Salud", "Educación", "Finanzas", "Construcción",
          "Alimentos", "Turismo", "Transporte", "Moda", "Energía",
          "Agricultura", "Entretenimiento", "Bienes Raíces", "Telecomunicaciones", "Manufactura",
          "Consultoría", "Seguros", "Medio Ambiente", "Defensa y Seguridad", "Automotriz",
          "Logística", "Farmacéutico", "Minería", "Aeronáutica", "Publicidad"
      ]


      # Generamos empresas con sectores variados  
      # en este caso generamos 2000 - pueden ser mas o menos

      for _ in range(1563):
          nombre_empresa = fake.company()
          direccion = fake.address()
          telefono = fake.phone_number()
          sector = fake.random_element(elements=sectores_fijos)

          item = {
          # ID único para cada uno
              "id": fake.uuid4(),      
              "nombre_empresa": nombre_empresa,
              "direccion": direccion,
              "telefono": telefono,
              "sector": sector         # Clave de partición
          }

          # Insertamos en Cosmos DB
          container.create_item(body=item)

          print(f"[{sector}] ---> Empresa: {nombre_empresa}")

      print("--> Datos de empresas insertados -->")

      ¿Cómo Funciona?

      • Particiones: Cada empresa tiene un campo sector. Cosmos DB agrupa internamente los datos por este valor, lo que permite buscar solo en la partición correcta sin recorrer toda la base.

      • Consultas Eficientes: Gracias al uso de particiones, las consultas son rápidas y económicas, ya que no se necesita escanear todas las particiones.

      • Escalabilidad: Si más empresas se agregan, Cosmos DB ajusta automáticamente los recursos necesarios.

        app.py

        from flask import Flask, jsonify
        from azure.cosmos import CosmosClient

        app = Flask(__name__)


        # CONFIGURACION COSMOSDB

        endpoint = "https://tu-cosmos-db.documents.azure.com:443/"
        key = "tu-key"

        client = CosmosClient(endpoint, key)

        db_name = "EmpresasDB"
        container_name = "EmpresasPorSector"

        database = client.get_database_client(db_name)
        container = database.get_container_client(container_name)


        # ENDPOINT PARA LLAMAR DATOS
        @app.route("/empresas", methods=['GET'])
        def all_data():
            query = "SELECT * FROM c"
            items = list(container.query_items(query=query,
                                               enable_cross_partition_query=True))
            return jsonify(items), 200
           


        if __name__ == '__main__':
            app.run()


      Recuerda:
      requirements.txt
      Flask
      azure-cosmos
      gunicorn

      Despliegue en Azure Web App

       

    2. Creas una Web App en Azure.

Azure hace el despliegue automático y tu API queda pública

Resultados

  • API disponible en: https://api-empresas-gob.azurewebsites.net/empresas

  • Consultas rápidas por sector: /empresas/

 

¿Qué se espera lograr con esta práctica?

Al finalizar este ejercicio, deberías ser capaz de:


Desarrollar una API REST funcional

  • Listar datos desde una base NoSQL.

  • Crear endpoints personalizados para filtrar datos.


Configurar y usar Cosmos DB como base de datos backend

  • Crear una base de datos y contenedor particionado.

  • Insertar datos y realizar consultas optimizadas.


Implementar y desplegar soluciones reales en Azure

  • Subir tu API a Azure Web App.

  • Configurar el entorno para producción.


Comprender el ciclo completo de una aplicación cloud

  • Desde la idea inicial, pasando por el desarrollo, hasta el despliegue.

  • Simular un proyecto consultor-cliente con una necesidad real.


Aplicar lo aprendido en futuros proyectos propios o laborales

  • Crear APIs similares para otras entidades o sectores.

  • Aprovechar Azure para automatizar, escalar y gestionar aplicaciones modernas.


💡 Valor agregado de esta práctica:

  • No necesitas experiencia previa en Azure: la práctica te guía paso a paso.

  • Aprendes a usar herramientas reales que son demandadas en el mundo laboral.

  • Construyes una base sólida para explorar temas más avanzados como:

    • CI/CD en Azure DevOps.

    • Seguridad con Azure Active Directory.

    • Integración de inteligencia artificial en APIs.


¿Quién debería seguir esta práctica?

  • Desarrolladores backend que desean aprender sobre despliegue en la nube.

  • Consultores de TI que buscan soluciones escalables para clientes.

  • Estudiantes de programación que quieren experiencia práctica.

  • Emprendedores tecnológicos que desean prototipar APIs de forma rápida y eficiente.

Volver