Поделиться через


Руководство. Вызов функций пользовательских данных из консольного приложения Python

Вы можете вызвать функции пользовательских данных Fabric из внешних приложений, отправив HTTP-запросы в общедоступную конечную точку функции. Это позволяет интегрировать бизнес-логику Fabric в веб-приложения, скрипты автоматизации, микрослужбы или любую систему за пределами среды Fabric.

Изучив это руководство, вы:

  • Регистрация приложения Microsoft Entra для проверки подлинности
  • Получение общедоступного URL-адреса функции и включение общедоступного доступа
  • Создание консольного приложения Python, вызывающего функцию
  • Общие сведения о схеме ответа и кодах состояния HTTP

Предпосылки

Создание приложения Microsoft Entra

Чтобы вызвать функции данных пользователей из внешнего приложения, необходимо зарегистрировать приложение в идентификаторе Microsoft Entra. Эта регистрация приложения предоставляет учетные данные, которые приложение Python использует для проверки подлинности.

  1. Перейдите на Центр администрирования Microsoft Entra и зарегистрируйте приложение, выполнив действия, описанные в кратком руководстве: регистрация приложения на платформе идентификации Microsoft.

  2. Значения идентификатора приложения приложения Microsoft Entra (клиента) и идентификатора каталога (клиента) отображаются в поле сводки. Запишите эти значения, так как они требуются позже.

  3. В списке Управление выберите Разрешения API, затем Добавить разрешение.

  4. Добавьте службу PowerBI, выберите делегированные разрешения и выберите UserDataFunction.Execute.All или item. Разрешения Execute.All . Убедитесь, что согласие администратора не требуется.

  5. Вернитесь к параметру "Управление" и выберите "Добавить проверку подлинности>">.

  6. Для локальных целей разработки добавьте http://localhost:3000 в URI перенаправления и убедитесь, что приложение включено для потока кода авторизации с ключом проверки подлинности для Exchange (PKCE). Нажмите кнопку "Настройка", чтобы сохранить изменения. Если приложение сталкивается с ошибкой, связанной с запросами между источниками, добавьте платформу мобильных и классических приложений на предыдущем шаге с тем же URI перенаправления.

  7. Вернитесь к проверке подлинности, прокрутите вниз до расширенные настройки и, в разделе Разрешить потоки общедоступных клиентов, выберите Да для Включить следующие потоки для мобильных и настольных приложений.

Создание консольного приложения

Теперь, когда у вас есть регистрация приложения, создайте консольное приложение Python, которое выполняет проверку подлинности и вызывает функцию данных пользователя.

Получение URL-адреса функции для вызова

Каждая функция данных пользователя имеет уникальный общедоступный URL-адрес, который служит в качестве конечной точки REST API. Прежде чем вызывать функцию из внешнего приложения, необходимо включить общедоступный доступ и получить URL-адрес.

Чтобы получить URL-адрес функции, выполните следующие действия:

  1. На портале Fabric откройте элемент функций пользовательских данных.

  2. Убедитесь, что вы работаете только в режиме запуска , а не в режиме разработки .

  3. В обозревателе функций наведите указатель мыши на имя функции и выберите многоточие (...).

  4. Выберите Свойства.

  5. В области свойств убедитесь, что общедоступный доступ включен. Если нет, выберите переключатель, чтобы включить его.

  6. Скопируйте общедоступный URL-адрес для использования в приложении Python.

    Снимок экрана: область свойств с включенным общедоступным доступом и полем

    Подсказка

    Если общедоступный доступ уже включен, можно пропустить панель свойств. В обозревателе функций выберите многоточие (...) рядом с именем функции и выберите URL-адрес функции копирования. Это копирует тот же URL-адрес, что и общедоступный URL-адрес в области свойств.

  7. В коде приложения замените заполнитель URL-адресом FUNCTION_URL , скопированным вами.

Настройка проекта Python

Создайте проект Python с виртуальной средой и установите необходимые зависимости.

  1. Например, my-data-appсоздайте новую папку для приложения Python.

  2. Откройте папку в Visual Studio Code.

  3. Откройте палитру команд (CTRL+SHIFT+P) и найдите Python: создать среду.

  4. Выберите venv в качестве типа среды.

  5. Выберите Python 3.11 в качестве версии интерпретатора.

  6. Откройте новый терминал в Visual Studio Code (CTRL+).

  7. Активируйте виртуальную среду Python:

    Виндоус:

    .venv\Scripts\activate
    

    macOS/Linux:

    source .venv/bin/activate
    
  8. Установите необходимые библиотеки Python:

    pip install azure-identity requests
    

Добавление кода приложения

Добавьте код Python, который проходит проверку подлинности с помощью идентификатора Microsoft Entra и вызывает функцию данных пользователя.

  1. Создайте файл с именем app.py в папке проекта.

  2. Добавьте следующий код. Замените <REPLACE WITH USER DATA FUNCTION URL> с общедоступным URL-адресом, скопированным ранее.

    from azure.identity import InteractiveBrowserCredential
    import requests
    import json
    
    # Acquire a token using interactive browser authentication
    # This opens a browser window for the user to sign in with their Microsoft account
    credential = InteractiveBrowserCredential()
    scope = "https://analysis.windows.net/powerbi/api/user_impersonation"
    token = credential.get_token(scope)
    
    if not token.token:
        print("Error: Could not get access token")
        exit(1)
    
    # Prepare headers with the access token
    headers = {
        "Authorization": f"Bearer {token.token}",
        "Content-Type": "application/json"
    }
    
    FUNCTION_URL = "<REPLACE WITH USER DATA FUNCTION URL>"
    
    # Prepare the request data (modify to match your function's expected input)
    data = {"name": "John"}
    
    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(), indent=2))
    except Exception as e:
        print(f"Error: {e}")
    

    Примечание.

    В этом примере используется InteractiveBrowserCredential для простоты, который открывает браузер для интерактивного входа. Для рабочих приложений передайте client_id и tenant_id из зарегистрированного приложения Microsoft Entra в InteractiveBrowserCredential, или используйте другой тип учетных данных, например, ClientSecretCredential, для проверки подлинности между службами. Дополнительные сведения см. в разделе библиотека клиента для идентификации Azure в Python.

Запуск приложения

Чтобы запустить приложение, используйте следующую команду в терминале:

python app.py

Откроется окно браузера для входа с помощью учетной записи Майкрософт. После проверки подлинности приложение вызывает функцию данных пользователя и выводит ответ.

Чтобы отладить приложение в Visual Studio Code, установите точки останова, щелкнув в поле рядом с номерами строк, а затем нажмите F5, чтобы начать отладку. Дополнительные сведения см. в статье об отладке Python в Visual Studio Code.

Выходная схема

При вызове функции данных пользователя из внешнего приложения текст ответа следует этой схеме JSON:

{
  "functionName": "hello_fabric",
  "invocationId": "1234567890",
  "status": "Succeeded",
  "output": "Hello, John!",
  "errors": []
}

Ответ включает следующие свойства:

  • functionName: имя выполняемой функции.
  • invocationId: уникальный идентификатор для выполнения этой конкретной функции. Полезно для устранения неполадок и сопоставления журналов.
  • состояние: результат выполнения функции. Возможные значения: Succeeded, BadRequest, Failed, Timeoutи ResponseTooLarge.
  • выходные данные: возвращаемое значение функции. Тип данных и структура зависят от возвращаемой функции. Например, если функция возвращает строку, output это строка. Если функция возвращает словарь, output это объект JSON.
  • ошибки: список ошибок, захваченных во время выполнения. Каждая ошибка включает name, message и необязательный properties объект, содержащий пары "ключ-значение" с дополнительными сведениями. Пусто, когда функция завершается успешно.

Коды ответа

Функция возвращает следующие коды HTTP в результате выполнения.

Код ответа Message Описание
200 Success Запрос выполнен успешно.
400 ошибка запроса Запрос недействителен. Этот ответ может быть вызван отсутствием или неправильными значениями входных параметров, типами данных или именами. Этот ответ также может быть вызван отключением общедоступного доступа для функции.
Ошибка 403: Доступ запрещён Запрещено Ответ был слишком большим, и вызов завершился ошибкой.
408 Время ожидания запроса Сбой запроса произошёл из-за того, что выполнение заняло больше времени, чем предельно допустимый лимит.
409 Конфликт Не удалось выполнить запрос из-за конфликтующего состояния. Эта ошибка может быть вызвана необработанным исключением или ошибкой с учетными данными пользователя.
422 ошибка запроса Сбой запроса произошел из-за вызванного в функции исключения UserThrownError.
500 Внутренняя ошибка сервера Сбой запроса из-за внутренней ошибки в службе.