Compartir a través de


Tutorial: Invocación de funciones de datos de usuario desde una aplicación de consola de Python

Puede invocar funciones de datos de usuario de Fabric desde aplicaciones externas mediante el envío de solicitudes HTTP al punto de conexión público de la función. Esto le permite integrar la lógica de negocios de Fabric en aplicaciones web, scripts de automatización, microservicios o cualquier sistema fuera del entorno de Fabric.

En este tutorial, usted hará lo siguiente:

  • Registro de una aplicación de Microsoft Entra para la autenticación
  • Obtención de la dirección URL pública de la función y habilitación del acceso público
  • Creación de una aplicación de consola de Python que llame a la función
  • Descripción del esquema de respuesta y los códigos de estado HTTP

Prerrequisitos

Crear una aplicación de Microsoft Entra

Para llamar a las funciones de datos de usuario desde una aplicación externa, debe registrar una aplicación en el identificador de Microsoft Entra. Este registro de aplicación proporciona las credenciales que usa la aplicación de Python para autenticarse.

  1. Vaya al Centro de administración de Microsoft Entra y registre una aplicación siguiendo los pasos descritos en Inicio rápido: Registro de una aplicación con la plataforma de identidad de Microsoft.

  2. Los valores de Id. de aplicación de aplicación de Microsoft Entra (cliente) e Id. de directorio (inquilino) aparecen en el cuadro Resumen. Registre estos valores porque son necesarios más adelante.

  3. En la lista Administrar, seleccione permisos de APIy luego Agregar permiso.

  4. Agregue el servicio PowerBI, seleccione Permisos delegados y seleccione UserDataFunction.Execute.All o elemento. Permisos Execute.All . Confirme que el consentimiento del administrador no es necesario.

  5. Vuelva a la configuración Administrar y seleccione Autenticación>Agregar una> de plataforma.

  6. Para fines de desarrollo local, agregue http://localhost:3000 en URI de redirección y confirme que la aplicación está habilitada para el flujo de código de autorización con clave de prueba para Intercambio de código (PKCE). Seleccione el botón Configurar para guardar los cambios. Si la aplicación encuentra un error relacionado con las solicitudes entre orígenes, agregue la plataforma aplicaciones móviles y de escritorio en el paso anterior con el mismo URI de redirección.

  7. Vuelva a Autenticación, desplácese hasta Configuración avanzada y, en Permitir flujos de clientes públicos, seleccione para Habilitar los siguientes flujos de dispositivos móviles y de escritorio.

Creación de una aplicación de consola

Ahora que tiene un registro de aplicación, cree una aplicación de consola de Python que autentique y llame a la función de datos de usuario.

Obtención de la dirección URL de la función que se va a invocar

Cada función de datos de usuario tiene una dirección URL pública única que actúa como punto de conexión de la API REST. Para poder llamar a la función desde una aplicación externa, debe habilitar el acceso público y obtener la dirección URL.

Para obtener la dirección URL de la función:

  1. En el portal de Fabric, abra la opción de funciones de datos de usuario.

  2. Asegúrese de que está en modo Ejecutar solo , no en Modo de desarrollo .

  3. En el explorador de Functions, mantenga el puntero sobre el nombre de la función y seleccione los puntos suspensivos (...).

  4. Selecciona Propiedades.

  5. En el panel Propiedades, asegúrese de que el acceso público está habilitado. Si no, seleccione el interruptor para activarlo.

  6. Copie la dirección URL pública para su uso en la aplicación de Python.

    Captura de pantalla que muestra el panel Propiedades con acceso público habilitado y el campo Dirección URL pública.

    Sugerencia

    Si el acceso público ya está habilitado, puede omitir el panel Propiedades. En el explorador de Functions, seleccione los puntos suspensivos (...) situados junto al nombre de la función y seleccione Copiar dirección URL de la función. Esto copia la misma dirección URL que la dirección URL pública en el panel de Propiedades.

  7. En el código de la aplicación, reemplace el FUNCTION_URL marcador de posición por la dirección URL que copió.

Configuración del proyecto de Python

Cree un proyecto de Python con un entorno virtual e instale las dependencias necesarias.

  1. Cree una carpeta para la aplicación de Python, por ejemplo my-data-app.

  2. Abra la carpeta en Visual Studio Code.

  3. Abra la paleta de comandos (Ctrl+Mayús+P) y busque Python: Crear entorno.

  4. Seleccione venv como tipo de entorno.

  5. Seleccione Python 3.11 como versión del intérprete.

  6. Abra un nuevo terminal en Visual Studio Code (Ctrl+').

  7. Active el entorno virtual de Python:

    Windows:

    .venv\Scripts\activate
    

    macOS/Linux:

    source .venv/bin/activate
    
  8. Instale las bibliotecas de Python necesarias:

    pip install azure-identity requests
    

Adición del código de la aplicación

Agregue el código de Python que se autentica con el identificador de Entra de Microsoft y llame a la función de datos de usuario.

  1. Cree un archivo denominado app.py en la carpeta del proyecto.

  2. Agregue el código siguiente. Reemplace por <REPLACE WITH USER DATA FUNCTION URL> la dirección URL pública que copió anteriormente.

    from azure.identity import InteractiveBrowserCredential
    import requests
    import json
    
    # Acquire a token using interactive browser authentication
    # This opens a browser window for the user to sign in with their Microsoft account
    credential = InteractiveBrowserCredential()
    scope = "https://analysis.windows.net/powerbi/api/user_impersonation"
    token = credential.get_token(scope)
    
    if not token.token:
        print("Error: Could not get access token")
        exit(1)
    
    # Prepare headers with the access token
    headers = {
        "Authorization": f"Bearer {token.token}",
        "Content-Type": "application/json"
    }
    
    FUNCTION_URL = "<REPLACE WITH USER DATA FUNCTION URL>"
    
    # Prepare the request data (modify to match your function's expected input)
    data = {"name": "John"}
    
    try:
        # Call the user data function public URL
        response = requests.post(FUNCTION_URL, json=data, headers=headers)
        response.raise_for_status()
        print(json.dumps(response.json(), indent=2))
    except Exception as e:
        print(f"Error: {e}")
    

    Nota:

    En este ejemplo se usa InteractiveBrowserCredential por motivos de simplicidad, que abre un explorador para el inicio de sesión interactivo. En el caso de las aplicaciones de producción, pase client_id y tenant_id desde su aplicación registrada de Microsoft Entra a InteractiveBrowserCredential, o use un tipo de credencial diferente, como ClientSecretCredential, para la autenticación de servicio a servicio. Para más información, consulte Biblioteca cliente de Identidad de Azure para Python.

Ejecutar la aplicación

Para ejecutar la aplicación, use el siguiente comando en el terminal:

python app.py

Se abre una ventana del explorador para que inicie sesión con su cuenta Microsoft. Después de la autenticación, la aplicación llama a la función de datos de usuario e imprime la respuesta.

Para depurar la aplicación en Visual Studio Code, establezca puntos de interrupción haciendo clic en el margen junto a los números de línea y, a continuación, presione F5 para iniciar la depuración. Para más detalles, consulte Depuración de Python en Visual Studio Code.

Esquema de salida

Al invocar una función de datos de usuario desde una aplicación externa, el cuerpo de la respuesta sigue este esquema JSON:

{
  "functionName": "hello_fabric",
  "invocationId": "1234567890",
  "status": "Succeeded",
  "output": "Hello, John!",
  "errors": []
}

La respuesta incluye estas propiedades:

  • functionName: nombre de la función que se ejecutó.
  • invocationId: identificador único para esta ejecución de función específica. Resulta útil para solucionar problemas y correlacionar registros.
  • status: resultado de la ejecución de la función. Los valores posibles son Succeeded, BadRequest, Failed, Timeouty ResponseTooLarge.
  • output: valor devuelto de la función. El tipo de datos y la estructura dependen de lo que devuelve la función. Por ejemplo, si la función devuelve una cadena, output es una cadena. Si la función devuelve un diccionario, output es un objeto JSON.
  • errores: una lista de errores capturados durante la ejecución. Cada error incluye un objeto name, un objeto message, y opcionalmente un objeto properties que contienen pares clave-valor con más detalles. Vacía cuando la función se realiza correctamente.

Códigos de respuesta

La función devuelve los siguientes códigos HTTP como resultado de la ejecución.

Código de respuesta Mensaje Descripción
200 Success La solicitud fue exitosa.
400 Solicitud incorrecta La solicitud no era válida. Esta respuesta podría deberse a que faltan valores de parámetros de entrada, tipos de datos o nombres incorrectos. Esta respuesta también podría deberse a que el acceso público está desactivado para una función.
403 Prohibido La respuesta era demasiado grande y se produjo un error en la invocación.
408 Tiempo de espera de solicitud Error en la solicitud debido a que la ejecución tarda más tiempo que el tiempo máximo permitido.
409 Conflicto No se pudo completar la solicitud debido a un estado en conflicto. Este error podría deberse a una excepción no controlada o a un error con credenciales de usuario.
422 Solicitud incorrecta Error en la solicitud debido a un userThrownError generado en la función .
500 Error interno del servidor Error en la solicitud debido a un error interno en el servicio.