Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
- Visual Studio Code instalado en el equipo local.
- Python 3.11 instalado en el equipo local.
- Una cuenta de Microsoft Fabric. Puede registrarse para obtener una evaluación gratuita.
- Un área de trabajo de Fabric.
- Un elemento de funciones de datos de usuario publicado. Para obtener instrucciones, consulte Creación de funciones de datos de usuario en Visual Studio Code o Creación de funciones de datos de usuario en el portal.
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.
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.
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.
En la lista Administrar, seleccione permisos de APIy luego Agregar permiso.
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.
Vuelva a la configuración Administrar y seleccione Autenticación>Agregar una> de plataforma.
Para fines de desarrollo local, agregue
http://localhost:3000en 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.Vuelva a Autenticación, desplácese hasta Configuración avanzada y, en Permitir flujos de clientes públicos, seleccione Sí 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:
En el portal de Fabric, abra la opción de funciones de datos de usuario.
Asegúrese de que está en modo Ejecutar solo , no en Modo de desarrollo .
En el explorador de Functions, mantenga el puntero sobre el nombre de la función y seleccione los puntos suspensivos (...).
Selecciona Propiedades.
En el panel Propiedades, asegúrese de que el acceso público está habilitado. Si no, seleccione el interruptor para activarlo.
Copie la dirección URL pública para su uso en la aplicación de Python.
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.
En el código de la aplicación, reemplace el
FUNCTION_URLmarcador 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.
Cree una carpeta para la aplicación de Python, por ejemplo
my-data-app.Abra la carpeta en Visual Studio Code.
Abra la paleta de comandos (Ctrl+Mayús+P) y busque Python: Crear entorno.
Seleccione venv como tipo de entorno.
Seleccione Python 3.11 como versión del intérprete.
Abra un nuevo terminal en Visual Studio Code (Ctrl+').
Active el entorno virtual de Python:
Windows:
.venv\Scripts\activatemacOS/Linux:
source .venv/bin/activateInstale 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.
Cree un archivo denominado
app.pyen la carpeta del proyecto.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
InteractiveBrowserCredentialpor motivos de simplicidad, que abre un explorador para el inicio de sesión interactivo. En el caso de las aplicaciones de producción, paseclient_idytenant_iddesde su aplicación registrada de Microsoft Entra aInteractiveBrowserCredential, o use un tipo de credencial diferente, comoClientSecretCredential, 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,TimeoutyResponseTooLarge. -
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,
outputes una cadena. Si la función devuelve un diccionario,outputes un objeto JSON. -
errores: una lista de errores capturados durante la ejecución. Cada error incluye un objeto
name, un objetomessage, y opcionalmente un objetopropertiesque 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. |