Partager via


Tutoriel : Appeler des fonctions de données utilisateur à partir d'une application console Python

Pour appeler des éléments de fonction de données utilisateur Fabric à partir d’une application console dans Python, vous pouvez envoyer des requêtes HTTP au point de terminaison de fonction qui doit être exécuté. Dans ce guide de démarrage rapide, vous apprendrez à configurer une application Python à l’aide de Visual Studio Code.

Conditions préalables

Créer une application Microsoft Entra

Les étapes suivantes expliquent comment configurer la prise en charge d’une application ReactJS dans Microsoft Entra.

  1. Inscrivez une application en suivant les étapes décrites dans Démarrage rapide : Inscrire une application avec la plateforme d’identités Microsoft.

  2. Les valeurs d’ID et d’ID d’annuaire (locataire) de l’application Microsoft Entra s’affichent dans la zone Résumé. Enregistrez ces valeurs, car elles sont requises ultérieurement.

  3. Sous la liste Gérer, sélectionnez Autorisations d’API, puis Ajouter une autorisation.

  4. Ajoutez le service PowerBI, sélectionnez Autorisations déléguées, puis sélectionnez UserDataFunction.Execute.All ou élément. Autorisations Execute.All . Vérifiez que le consentement de l’administrateur n’est pas obligatoire.

  5. Revenez au paramètre Gérer et sélectionnez Authentification>Ajouter une> de plateforme.

  6. À des fins de développement local, ajoutez http://localhost:3000 sous URI de redirection, puis vérifiez que l’application est activée pour le flux de code d’autorisation avec la clé de preuve PKCE (Proof Key for Code Exchange). Sélectionnez le bouton Configurer pour enregistrer vos modifications. Si l’application rencontre une erreur liée aux requêtes inter-origines, ajoutez la plateforme Des applications mobiles et de bureau à l’étape précédente avec le même URI de redirection.

  7. Revenez à Authentification, faites défiler jusqu’à Paramètres avancés et, sous Autoriser les flux clients publics, sélectionnez Oui pour Activer les flux suivants pour mobile et bureau.

Créer une application console

  1. La fonction doit être accessible au public. Dans l'explorateur de fonctions, passez la souris sur le nom de la fonction et sélectionnez l'icône en forme de points de suspension (...) qui apparaît, puis sélectionnez Propriétés. Dans le volet Propriétés qui s’ouvre, activez Accès public. Vous devez également noter l’URL publique à utiliser dans votre application Python.

  2. Créez un nouveau dossier pour votre application Python, par exemple my-data-app. Ouvrez le dossier dans Visual Studio Code.

  3. Configurez l’environnement virtuel Python dans Visual Studio Code. Pour créer des environnements locaux dans Visual Studio Code, ouvrez la palette de commandes avec Ctrl+Maj+P, puis recherchez et sélectionnez la commande Python : Créer un environnement.

    • La commande présente une liste de types d’environnement et sélectionne venv.
    • Sélectionnez la version Python de l'interpréteur Python 3.11.
  4. Exécutez la commande suivante pour activer l’environnement virtuel dans le terminal Visual Studio Code.

    venv\Scripts\activate.bat
    
  5. Ensuite, exécutez la commande pour installer les bibliothèques Python nécessaires à cet exemple.

    pip install azure-identity, requests 
    
  6. Créez un fichier app.py et utilisez le code pour appeler l’élément de fonctions de données utilisateur.

    from azure.identity import InteractiveBrowserCredential
    import requests
    import json
    
    # Acquire a token
    # DO NOT USE IN PRODUCTION.
    # Below code to acquire token is to test the User data function endpoint and is for the purpose of development only.
    # For production, always register an application in a Microsoft Entra ID tenant and use the appropriate client_id and scopes.
    
    
    app = InteractiveBrowserCredential()
    scp = 'https://analysis.windows.net/powerbi/api/user_impersonation'
    result = app.get_token(scp)
    
    if not result.token:
        print('Error:', "Could not get access token")
    
    # Prepare headers
    headers = {
        'Authorization': f'Bearer {result.token}',
        'Content-Type': 'application/json'
    }
    
    FUNCTION_URL = '<REPLACE WITH USER DATA FUNCTION URL>'
    
    # Prepare the request data
    data = '{"name": "John"}' # JSON payload to send to the Azure Function
    headers = {
        #  "Authorization": f"Bearer {access_token}",
        "Content-Type": "application/json"
            }
    
    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()))
    except Exception as e:
        print({"error": str(e)}, 500)
    
    if __name__ == "__main__":
        app.run(debug=True)
    
    

    Remarque

    L'exemple est uniquement à des fins de développement. Mettez à jour l’application pour utiliser l’authentification Microsoft Entra ID avant d’utiliser l’application pour un cas d’utilisation de production.

Appel d'une fonction à partir d'une application externe

Les fonctions peuvent être invoquées en émettant un appel REST vers l'URL du point de terminaison. Sélectionnez la fonction que vous souhaitez appeler dans l'Explorateur de fonctions et sélectionnez Copier l'URL de la fonction. Vous pouvez également activer ou désactiver la possibilité d’utiliser cette URL en externe à partir du menu Propriétés.

Capture d'écran montrant comment déboguer localement avec des points d'arrêt.

Ensuite, utilisez cette URL dans votre application pour appeler la fonction. Consultez Appeler les fonctions de données utilisateur à partir d'une application

Schéma de sortie

Lors de l'appel d'une fonction de données utilisateur à partir d'une application externe, le schéma de sortie aura le format suivant :

{
  "functionName": "hello_fabric",
  "invocationId": "1234567890", 
  "status": "Succeeded | BadRequest | Failed | Timeout | ResponseTooLarge",
  "output": /*shows the result of the function dependeing on the output type*/,
  "errors": [
     {
       "name": "Error name",
       "message": "Error message",
       "properties": {
          /*Key value pairs custom to error*/
       }
     },
  ]
}

Les propriétés suivantes sont renvoyées :

  • functionName : Le nom de la fonction qui a été exécutée.
  • invocationId : L'ID d'appel pour l'exécution d'une fonction.
  • état : le résultat de l’exécution de la fonction et les valeurs prises en charge sont Succeeded, , BadRequestFailed, Timeout et ResponseTooLarge.
  • sortie : La valeur de sortie renvoyée par la fonction.
  • erreurs : Si des erreurs ont été capturées, cela renverra une liste de chaque erreur avec leur nom, leur message d'erreur et leurs propriétés d'erreur.

Codes de réponse

La fonction renverra les codes HTTP suivants à la suite de l'exécution.

Code de réponse Message Description
200 Success La demande a été réalisée avec succès.
400 Demande incorrecte La demande n’a pas été valide. Cette réponse peut être due à des valeurs de paramètre d’entrée manquantes ou incorrectes, des types de données ou des noms. Cette réponse peut également être due à la désactivation de l’accès public pour une fonction.
4:03 Interdit La réponse était trop grande et l’invocation a échoué.
408 Délai d’expiration de la demande La requête a échoué car l'exécution a pris plus de 200 secondes.
409 Conflit Impossible de terminer la requête en raison d’un état de conflit. Cela peut être dû à une exception non gérée ou à une erreur avec les informations d’identification de l’utilisateur.
422 Demande incorrecte La requête a échoué en raison d’un userThrownError déclenché dans la fonction.
500 Erreur interne du serveur La requête a échoué en raison d’une erreur interne dans le service.

Débogage et test

Déboguez l’application dans Visual Studio Code à l’aide du débogueur Python. Ajoutez des points d'arrêt si nécessaire pour déboguer d'éventuels problèmes. En savoir plus

Étapes suivantes