教程:从 Python 控制台应用程序调用用户数据函数

若要从 Python 中的控制台应用程序中调用 Fabric 用户数据函数项,可以将 HTTP 请求发送到需要执行的函数终结点。 本快速入门介绍如何使用 Visual Studio Code 设置 Python 应用。

先决条件

创建 Microsoft Entra 应用

以下步骤说明如何在 Microsoft Entra 中配置 ReactJS 应用程序的支持。

  1. 使用快速入门:使用 Microsoft 标识平台注册应用程序中所述的步骤注册应用程序。

  2. Microsoft Entra 应用 应用程序(客户端)ID目录(租户)ID 值显示在“摘要”框中。 记录这些值,因为稍后需要这些值。

  3. 在“管理”列表下,选择“API 权限”,然后选择“添加权限”

  4. 添加 PowerBI 服务,选择 委派权限,然后选择 UserDataFunction.Execute.All项。Execute.All 权限。 确认不需要管理员同意。

  5. 返回到 “管理 ”设置,然后选择“ 身份验证>添加平台>单页应用程序”。

  6. 出于本地开发目的,请在“重定向 URI”下添加 http://localhost:3000,并确认应用程序是否已启用具有代码交换证明密钥 (PKCE) 的授权代码流 选择“配置”按钮以保存所做更改。 如果应用程序遇到与跨源请求相关的错误,请使用相同的重定向 URI 在上一步中添加 移动和桌面应用程序 平台。

  7. 返回到“授权”,向下滚动到“高级设置”,然后在“允许公共客户端流”下,对“启用以下移动和桌面流”选择“是”

创建控制台应用程序

  1. 函数必须可公开访问。 在 Functions 资源管理器中,将鼠标悬停在函数的名称上,然后选择显示的省略号图标 (...),然后选择“属性”。 在打开的“属性”窗格中,启用“公共访问”。 还应记下要在 Python 应用程序中使用的公共 URL

  2. 为 Python 应用创建新文件夹,例如 my-data-app。 在 Visual Studio Code 中打开文件夹。

  3. 在 Visual Studio Code 中设置 Python 虚拟环境。 若要在 Visual Studio Code 中创建本地环境,请使用 Ctrl+Shift+P 打开命令面板,然后搜索并选择 Python:创建环境命令。

    • 该命令提供环境类型列表并选择 venv
    • 选择 Python 解释器版本 Python 3.11
  4. 运行以下命令以在 Visual Studio Code 终端中激活虚拟环境。

    venv\Scripts\activate.bat
    
  5. 接下来,运行命令以安装此示例所需的 Python 库。

    pip install azure-identity, requests 
    
  6. 创建 app.py 文件,并使用代码调用用户数据函数项。

    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)
    
    

    注释

    此示例仅用于开发。 在将应用程序用于生产用例之前,更新应用程序以使用 Microsoft Entra ID 身份验证。

从外部应用程序调用函数

可以通过向终结点 URL 发出 REST 调用来调用函数。 选择要在 Functions 资源管理器中调用的函数,然后选择“复制函数 URL”。 还可以打开或关闭从“属性”菜单外部使用此 URL 的功能。

屏幕截图显示了如何使用断点在本地调试。

然后,在应用程序中使用此 URL 调用函数。 请参阅从应用程序调用用户数据函数

输出架构

从外部应用程序调用用户数据函数时,输出架构的格式如下:

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

将返回以下属性:

  • functionName:已执行的函数的名称。
  • invocationId:用于执行函数的调用 ID。
  • status:函数的执行和支持的值的结果为 SucceededBadRequestFailedTimeoutResponseTooLarge
  • output:函数返回的输出值。
  • errors:如果捕获到任何错误,则会返回所有错误的列表,其中包含每个错误的名称、错误消息和错误属性。

响应代码

由于执行,该函数将返回以下 HTTP 代码。

响应代码 Message 说明
200 成功 请求成功。
400 错误的请求 请求无效。 此响应可能是由于输入参数值、数据类型或名称缺失或不正确的。 此响应也可能由为函数关闭公共访问导致的。
403 已禁止 响应太大,调用失败。
408 请求超时 由于执行时间超过 200 秒,请求失败。
409 冲突 由于存在冲突状态,无法完成请求。 这可能是由未经处理的异常或用户凭据错误引起的。
422 错误的请求 请求由于函数中引发的 UserThrownError 而失败。
500 内部服务器错误 请求由于服务中的内部错误而失败。

调试和测试

使用 python 调试器在 Visual Studio Code 中调试应用程序。 如果需要,添加断点进行调试(如有任何问题)。 了解详细信息

后续步骤