Compartilhar via


Tutorial: Invocar funções de dados do usuário de um aplicativo de console do Python

Para invocar itens de função de dados do Usuário do Fabric de um aplicativo de console no Python, você pode enviar solicitações HTTP para o endpoint da função que deve ser executada. Neste início rápido, você aprenderá a configurar um aplicativo Python usando o Visual Studio Code.

Pré-requisitos

Criar um aplicativo do Microsoft Entra

As etapas a seguir explicam como configurar o suporte para um aplicativo ReactJS no Microsoft Entra.

  1. Registre um aplicativo usando as etapas descritas em Início Rápido: Registrar um aplicativo com a plataforma de identidade da Microsoft.

  2. Os valores da ID e da ID do Diretório (locatário) do aplicativo Microsoft Entra aparecem na caixa Resumo. Registre esses valores porque eles são necessários posteriormente.

  3. Na lista Gerenciar, selecione Permissões de API e, em seguida, Adicionar permissão.

  4. Adicione o Serviço do PowerBI, selecione Permissões Delegadas e selecione UserDataFunction.Execute.All ou item. Permissões Execute.All . Confirme se o consentimento do administrador não é necessário.

  5. Volte para a configuração Gerenciar e selecione Autenticação>Adicionar um> plataforma.

  6. Para fins de desenvolvimento local, adicione http://localhost:3000 em Redirecionar URIs e confirme se o aplicativo está habilitado para o fluxo de código de autorização com Proof Key for Code Exchange (PKCE). Selecione o botão Configurar para salvar as alterações. Se o aplicativo encontrar um erro relacionado a solicitações entre origens, adicione a plataforma de aplicativos móveis e de área de trabalho na etapa anterior com o mesmo URI de redirecionamento.

  7. De volta a Autenticação, role para baixo até Configurações Avançadas e, em Permitir fluxos de cliente públicos, selecione Sim para Habilitar os fluxos móveis e de área de trabalho a seguir.

Criar um aplicativo de console

  1. A função deve ser acessível publicamente. No Gerenciador de Funções, passe o mouse sobre o nome da função e selecione o ícone de reticências (...) exibido e selecione Propriedades. No painel Propriedades que é aberto, habilite Acesso público. Você também deve anotar a URL pública a ser usada em seu aplicativo Python.

  2. Crie uma nova pasta para seu aplicativo Python, por exemplo my-data-app. Abra a pasta no Visual Studio Code.

  3. Configure o ambiente virtual do Python no Visual Studio Code. Para criar ambientes locais no Visual Studio Code, abra a paleta de comandos com Ctrl+Shift+P, pesquise e selecione o comando Python: Criar Ambiente.

    • O comando apresenta uma lista de tipos de ambiente e seleciona o venv.
    • Selecione o interpretador do Python versão Python 3.11.
  4. Execute o comando a seguir para ativar o ambiente virtual no terminal do Visual Studio Code.

    venv\Scripts\activate.bat
    
  5. Em seguida, execute o comando para instalar as bibliotecas Python necessárias para este exemplo.

    pip install azure-identity, requests 
    
  6. Crie um arquivo app.py e use o código para invocar o item de funções de dados do usuário.

    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)
    
    

    Observação

    O exemplo é somente para fins de desenvolvimento. Atualize o aplicativo para usar a autenticação da ID do Microsoft Entra antes de usar o aplicativo para um caso de uso de produção.

Invocando uma função de um aplicativo externo

As funções podem ser invocadas emitindo uma chamada REST para a URL do ponto de extremidade. Selecione a função que você deseja invocar no Gerenciador de Funções e selecione Copiar URL da Função. Você também pode ativar ou desativar a capacidade de usar essa URL externamente no menu Propriedades.

Captura de tela mostrando como depurar localmente com pontos de interrupção.

Em seguida, use essa URL em seu aplicativo para invocar a função. Consulte Invocar funções de dados do usuário de um aplicativo

Esquema de saída

Ao invocar uma função de dados de usuário de um aplicativo externo, o esquema de saída terá o seguinte formato:

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

As seguintes propriedades são retornadas:

  • functionName: o nome da função que foi executada.
  • invocationId: a ID de invocação para execução de uma função.
  • status: O resultado da execução da função e dos valores com suporte sãoSucceeded, , BadRequeste FailedTimeoutResponseTooLarge.
  • saída: o valor de saída retornado pela função.
  • erros: se algum erro tiver sido capturado, isso retornará uma lista de cada erro com seu nome, mensagem de erro e propriedades de erro.

Códigos de resposta

A função retornará os seguintes códigos HTTP como resultado da execução.

Código de resposta Mensagem Descrição
200 Êxito A solicitação foi bem-sucedida.
400 Solicitação incorreta A solicitação não era válida. Essa resposta pode ser devido a valores de parâmetro de entrada ausentes ou incorretos, tipos de dados ou nomes. Essa resposta também pode ser causada pela desativação do acesso público para uma função.
403 Proibido A resposta foi muito grande e a invocação falhou.
408 Tempo limite da solicitação A solicitação falhou devido à execução levar mais de 200 segundos.
409 Conflito A solicitação não pôde ser concluída devido a um estado conflitante. Isso pode ser causado por uma exceção sem tratamento ou um erro com as credenciais do usuário.
422 Solicitação incorreta A solicitação falhou devido a um UserThrownError gerado na função.
500 Erro interno do servidor A solicitação falhou devido a um erro interno no serviço.

Depuração e teste

Depure o aplicativo no Visual Studio Code usando o depurador python. Adicione pontos de interrupção se necessário para depurar se houver algum problema. Saiba mais

Próximas etapas