Condividi tramite


Esercitazione: Richiamare le funzioni dei dati utente da una console Python

Per richiamare gli elementi della funzione dati utente di Fabric da un'applicazione console in Python, è possibile inviare richieste HTTP all'endpoint della funzione che deve essere eseguito. Questa guida introduttiva illustra come configurare un'app Python con Visual Studio Code.

Prerequisiti

Creare un'app Microsoft Entra

I passaggi seguenti illustrano come configurare il supporto per un'applicazione ReactJS in Microsoft Entra.

  1. Registrare un'applicazione usando i passaggi descritti in Avvio rapido: Registrare un'applicazione con Microsoft Identity Platform.

  2. I valori ID applicazione (client) e ID Directory (tenant) dell'app Microsoft Entra vengono visualizzati nella casella Riepilogo. Registrare questi valori perché sono necessari in un secondo momento.

  3. Nell'elenco Gestisci selezionare autorizzazioni API , quindi Aggiungi autorizzazione.

  4. Aggiungere il servizio PowerBI, selezionare Autorizzazioni delegate e selezionare UserDataFunction.Execute.All o elemento. Autorizzazioni Execute.All . Verificare che il consenso dell'amministratore non sia obbligatorio.

  5. Tornare all'impostazione Gestisci e selezionare Autenticazione> Aggiungiun'applicazione a pagina singola>.

  6. Ai fini dello sviluppo locale, aggiungere http://localhost:3000 in URI di reindirizzamento e verificare che l'applicazione sia abilitata per il flusso del codice di autorizzazione con la chiave di prova per Lo scambio di codice (PKCE). Selezionare il pulsante Configura per salvare le modifiche. Se l'applicazione rileva un errore correlato alle richieste tra le origini, aggiungere la piattaforma applicazioni per dispositivi mobili e desktop nel passaggio precedente con lo stesso URI di reindirizzamento.

  7. Tornare a Authentication, scorrere verso il basso fino a Advanced Settings e, in Consenti flussi client pubblici, selezionare per Abilitare i flussi per dispositivi mobili e desktop seguenti.

Creare un'applicazione console

  1. La funzione deve essere accessibile pubblicamente. In Esplora funzioni passare il puntatore del mouse sul nome della funzione e selezionare l'icona con i puntini di sospensione (...) visualizzata, quindi selezionare Proprietà. Nel riquadro Proprietà visualizzato, abilita Accesso pubblico. È anche necessario prendere nota dell'URL pubblico da usare nell'applicazione Python.

  2. Crea una nuova cartella per l'app Python, ad esempio my-data-app. Aprire la cartella in Visual Studio Code.

  3. Configurare l'ambiente virtuale Python in Visual Studio Code. Per creare ambienti locali in Visual Studio Code, aprire il riquadro comandi con CTRL+MAIUSC+P, quindi cercare e selezionare il comando Python: Crea ambiente.

    • Il comando presenta un elenco di tipi di ambiente e seleziona venv.
    • Seleziona la versione dell'interprete Python 3.11.
  4. Eseguire il comando seguente per attivare l'ambiente virtuale nel terminale di Visual Studio Code.

    venv\Scripts\activate.bat
    
  5. Esegui quindi il comando per installare le librerie Python necessarie per questo esempio.

    pip install azure-identity, requests 
    
  6. Crea un file app.py e usa il codice per richiamare l'elemento delle funzioni dati utente.

    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)
    
    

    Nota

    L'esempio è solo a scopo di sviluppo. Aggiorna l'applicazione in modo che utilizzi l'autenticazione Microsoft Entra ID, prima di usare l'applicazione per un caso d'uso di produzione.

Chiamata di una funzione da un'applicazione esterna

Le funzioni possono essere richiamate eseguendo una chiamata REST all'URL dell'endpoint. Seleziona la funzione che si vuole richiamare in Esplora funzioni e seleziona Copia URL funzione. È anche possibile attivare o disattivare la possibilità di usare questo URL esternamente dal menu Proprietà.

Screenshot che mostra come eseguire il debug in locale con punti di interruzione.

Usa quindi questo URL nell'applicazione per richiamare la funzione. Vedi Richiamare le funzioni dei dati utente da un'applicazione

Schema di output.

Quando si richiama una funzione dati utente da un'applicazione esterna, lo schema di output avrà il formato seguente:

{
  "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*/
       }
     },
  ]
}

Vengono restituite le seguenti proprietà:

  • functionName: nome della funzione eseguita.
  • invocationId: ID chiamata per l'esecuzione di una funzione.
  • status: il risultato dell'esecuzione della funzione e i valori supportati sono Succeeded, BadRequest, FailedTimeout e ResponseTooLarge.
  • output: valore di output restituito dalla funzione.
  • errori: se sono stati acquisiti errori, verrà restituito un elenco di ogni errore con il nome, il messaggio di errore e le proprietà degli errori.

Codici di risposta

La funzione restituirà i codici HTTP seguenti in seguito all'esecuzione.

Codice della risposta Message Descrizione
200 Success La richiesta è riuscita.
400 Richiesta non valida Richiesta non valida. Questa risposta potrebbe essere dovuta a valori di parametri di input mancanti o non corretti, tipi di dati o nomi. Questa risposta potrebbe anche essere causata dalla disattivazione dell'accesso pubblico per una funzione.
403 Vietato La risposta era troppo grande e la chiamata non è riuscita.
408 Timeout richiesta La richiesta non è riuscita a causa dell'esecuzione che richiede più di 200 secondi.
409 Conflitto Impossibile completare la richiesta a causa di uno stato in conflitto. Ciò potrebbe essere causato da un'eccezione non gestita o da un errore con le credenziali utente.
422 Richiesta non valida La richiesta non è riuscita a causa di un userThrownError generato nella funzione.
500 Errore interno del server La richiesta non è riuscita a causa di un errore interno nel servizio.

Debugging e collaudo

Eseguire il debug dell'applicazione in Visual Studio Code usando il debugger Python. Aggiungei punti di interruzione se necessario per eseguire il debug in caso di problemi. Ulteriori informazioni

Passaggi successivi