Partilhar via


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

Para invocar itens de função de dados de usuário Fabric a partir de uma aplicação de consola em Python, pode enviar pedidos HTTP para o endpoint da função que precisa ser executada. Neste guia de início rápido, você aprenderá a configurar um aplicativo Python usando o Visual Studio Code.

Pré-requisitos

Criar uma aplicação 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 Guia de início rápido: registrar um aplicativo com a plataforma de identidade da Microsoft.

  2. Os valores de ID do Aplicativo (cliente) e 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 APIe, em seguida, Adicionar permissão.

  4. Adicione o Serviço PowerBI, selecione Permissões delegadas e selecione UserDataFunction.Execute.All ou item. Executar todas as permissões. 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 PKCE (Proof Key for Code Exchange). Selecione o botão Configurar para salvar as alterações. Se o aplicativo encontrar um erro relacionado a solicitações de origem cruzada, adicione a plataforma de aplicativos móveis e de desktop na etapa anterior com o mesmo URI de redirecionamento.

  7. Voltar à Autenticação, role para baixo até Definições Avançadas e, em Permitir fluxos de clientes públicos, selecione Sim para Ativar os seguintes fluxos móveis e de ambiente de trabalho.

Criar um aplicativo de console

  1. A função deve ser acessível ao público. No explorador de funções, passe o cursor sobre o nome da função e selecione o ícone de reticências (...) que aparece e, em seguida, selecione Propriedades. No painel de Propriedades que se abre, ative o acesso público. Você também deve fazer uma nota do URL Pública para usar no seu aplicativo Python.

  2. Crie uma nova pasta para a sua aplicação Python, por exemplo, my-data-app. Abra a pasta no Visual Studio Code.

  3. Configure o ambiente virtual Python no Visual Studio Code. Para criar ambientes locais no Visual Studio Code, abra a paleta de comandos com Ctrl+Shift+P e, em seguida, procure e selecione o comando Python: Create Environment.

    • O comando apresenta uma lista de tipos de ambiente e seleciona venv.
    • Selecione a versão do interpretador Python Python 3.11.
  4. Execute o seguinte comando 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 ficheiro app.py e use o código para invocar as funções de dados do utilizador.

    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 é apenas para fins de desenvolvimento. Atualize o aplicativo para usar a autenticação Microsoft Entra ID 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 deseja invocar no explorador de Funções e selecione Copiar URL da Função. Você também pode ativar ou desativar a capacidade de usar este URL no menu Propriedades, externamente.

Captura de ecrã 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 utilizador de uma aplicação

Esquema de saída

Ao invocar uma função de dados do 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: O identificador de invocação para a execução de uma função.
  • status: O resultado da execução da função e os valores suportados são Succeeded, BadRequest, Failede TimeoutResponseTooLarge.
  • saída: O valor de saída retornado pela função.
  • erros: Se algum erro foi capturado, isto retornará uma lista de cada erro com seu nome, mensagem de erro e propriedades de erro.

Código de resposta

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

Código de resposta Message Descrição
200 Sucesso O pedido foi bem-sucedido.
400 Pedido Incorreto O pedido não era válido. Essa resposta pode ser devida a valores de parâmetros de entrada, tipos de dados ou nomes ausentes ou incorretos. Essa resposta também pode ser causada pelo acesso público desativado para uma função.
403 Proibido A resposta foi demasiado grande e a invocação falhou.
408 Tempo limite de solicitação O pedido falhou devido à execução demorar 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 não tratada ou um erro com as credenciais do usuário.
422 Pedido Incorreto 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. Mais informações

Próximos passos