Udostępnij przez


Samouczek: wywoływanie funkcji danych użytkownika z poziomu aplikacji konsolowej języka Python

Funkcje danych użytkownika sieci szkieletowej można wywoływać z aplikacji zewnętrznych, wysyłając żądania HTTP do publicznego punktu końcowego funkcji. Dzięki temu można zintegrować logikę biznesową usługi Fabric z aplikacjami internetowymi, skryptami automatyzacji, mikrousługami lub dowolnym systemem poza środowiskiem sieci szkieletowej.

W tym samouczku nauczysz się następujących rzeczy:

  • Rejestrowanie aplikacji Entra firmy Microsoft na potrzeby uwierzytelniania
  • Uzyskaj publiczny adres URL funkcji i włącz dostęp publiczny
  • Tworzenie aplikacji konsolowej języka Python wywołującej funkcję
  • Omówienie schematu odpowiedzi i kodów stanu HTTP

Wymagania wstępne

Tworzenie aplikacji Microsoft Entra

Aby wywołać funkcje danych użytkownika z aplikacji zewnętrznej, musisz zarejestrować aplikację w identyfikatorze Entra firmy Microsoft. Ta rejestracja aplikacji udostępnia poświadczenia używane przez aplikację w języku Python do uwierzytelniania.

  1. Przejdź do centrum administracyjnego firmy Microsoft Entra i zarejestruj aplikację, wykonując kroki opisane w przewodniku Szybki start: rejestrowanie aplikacji za pomocą platformy tożsamości firmy Microsoft.

  2. Wartości w aplikacji Microsoft Entra, identyfikator aplikacji (klienta) oraz identyfikator katalogu (dzierżawy), są wyświetlane w polu Podsumowanie. Zapisz te wartości, ponieważ są one wymagane później.

  3. Na liście Zarządzaj wybierz pozycję Uprawnienia interfejsu API, a następnie Dodaj uprawnienia.

  4. Dodaj usługę PowerBI, wybierz pozycję Delegowane uprawnienia, a następnie wybierz pozycję UserDataFunction.Execute.All lub element. Execute.All permissions(Wykonywanie.Wszystkie uprawnienia). Upewnij się, że zgoda administratora nie jest wymagana.

  5. Wróć do ustawienia Zarządzaj i wybierz pozycję Uwierzytelnianie>Dodaj aplikację jednostronicową platformy>.

  6. W celach programowania lokalnego dodaj http://localhost:3000 w obszarze Identyfikatory URI przekierowania i upewnij się, że aplikacja jest włączona dla przepływu kodu autoryzacji z kluczem dowodowym dla wymiany kodu (PKCE). Wybierz przycisk Konfiguruj, aby zapisać zmiany. Jeśli aplikacja napotka błąd związany z żądaniami między źródłami, dodaj platformę aplikacji mobilnych i desktopowych w poprzednim kroku z tym samym identyfikatorem URI przekierowania.

  7. Wróć do Authentication, przewiń w dół do Ustawienia zaawansowane i w obszarze Zezwalaj na przepływy klientów publicznychwybierz opcję Tak dla Włącz następujące przepływy mobilne i na komputery stacjonarne.

Tworzenie aplikacji konsolowej

Teraz, gdy masz rejestrację aplikacji, utwórz aplikację konsolową języka Python, która uwierzytelnia się i wywołuje funkcję danych użytkownika.

Pobierz adres URL funkcji do wywołania

Każda funkcja danych użytkownika ma unikatowy publiczny adres URL, który służy jako punkt końcowy interfejsu API REST. Aby można było wywołać funkcję z aplikacji zewnętrznej, należy włączyć dostęp publiczny i uzyskać adres URL.

Aby uzyskać adres URL funkcji:

  1. W portalu Fabric otwórz element funkcji danych użytkownika.

  2. Upewnij się, że jesteś w trybie tylko uruchamiania, a nie w trybie rozwoju.

  3. W Eksploratorze usługi Functions umieść kursor nad nazwą funkcji i wybierz wielokropek (...).

  4. Wybierz Właściwości.

  5. W okienku Właściwości upewnij się, że dostęp publiczny jest włączony. Jeśli nie, wybierz przełącznik, aby go włączyć.

  6. Skopiuj publiczny adres URL do użycia w aplikacji języka Python.

    Zrzut ekranu przedstawiający okienko Właściwości z włączonym dostępem publicznym i polem Publiczny adres URL.

    Wskazówka

    Jeśli dostęp publiczny jest już włączony, możesz pominąć okienko Właściwości. W Eksploratorze funkcji wybierz wielokropek (...) obok nazwy funkcji i wybierz pozycję Kopiuj adres URL funkcji. Spowoduje to skopiowanie tego samego adresu URL co publiczny adres URL w okienku Właściwości.

  7. W kodzie aplikacji zastąp FUNCTION_URL symbol zastępczy skopiowanymi adresami URL.

Konfigurowanie projektu w języku Python

Utwórz projekt w języku Python ze środowiskiem wirtualnym i zainstaluj wymagane zależności.

  1. Utwórz nowy folder dla aplikacji w języku Python, na przykład my-data-app.

  2. Otwórz folder w programie Visual Studio Code.

  3. Otwórz paletę poleceń (Ctrl+Shift+P) i wyszukaj ciąg Python: Create Environment.

  4. Wybierz venv jako typ środowiska.

  5. Wybierz pozycję Python 3.11 jako wersję interpretera.

  6. Otwórz nowy terminal w programie Visual Studio Code (Ctrl+').

  7. Aktywuj środowisko wirtualne języka Python:

    Windows:

    .venv\Scripts\activate
    

    macOS/Linux:

    source .venv/bin/activate
    
  8. Zainstaluj wymagane biblioteki języka Python:

    pip install azure-identity requests
    

Dodawanie kodu aplikacji

Dodaj kod języka Python, który uwierzytelnia się za pomocą identyfikatora Entra firmy Microsoft i wywołuje funkcję danych użytkownika.

  1. Utwórz plik o nazwie app.py w folderze projektu.

  2. Dodaj następujący kod. Zastąp <REPLACE WITH USER DATA FUNCTION URL> publicznym adresem URL skopiowanym wcześniej.

    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}")
    

    Uwaga

    W tym przykładzie użyto InteractiveBrowserCredential dla uproszczenia, co powoduje otwarcie przeglądarki na potrzeby logowania interakcyjnego. W przypadku aplikacji produkcyjnych przekaż client_id i tenant_id z zarejestrowanej aplikacji Microsoft Entra do InteractiveBrowserCredential albo użyj innego typu poświadczeń, takiego jak ClientSecretCredential, dla uwierzytelniania typu service-to-service. Aby uzyskać więcej informacji, zobacz Biblioteka klienta usługi Azure Identity dla języka Python.

Uruchamianie aplikacji

Aby uruchomić aplikację, użyj następującego polecenia w terminalu:

python app.py

Zostanie otwarte okno przeglądarki umożliwiające zalogowanie się przy użyciu konta Microsoft. Po uwierzytelnieniu aplikacja wywołuje funkcję danych użytkownika i wyświetla odpowiedź.

Aby debugować aplikację w programie Visual Studio Code, ustaw punkty przerwania, klikając w rynnie obok numerów wierszy, a następnie naciśnij F5 , aby rozpocząć debugowanie. Aby uzyskać więcej informacji, zobacz Debugowanie języka Python w programie Visual Studio Code.

Schemat danych wyjściowych

Po wywołaniu funkcji danych użytkownika z aplikacji zewnętrznej treść odpowiedzi jest zgodna ze schematem JSON:

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

Odpowiedź zawiera następujące właściwości:

  • functionName: nazwa funkcji, która została wykonana.
  • invocationId: unikatowy identyfikator dla tego konkretnego wykonania funkcji. Użyteczne do rozwiązywania problemów i korelowania logów.
  • status: wynik wykonania funkcji. Możliwe wartości to Succeeded, , BadRequestFailed, Timeout, i ResponseTooLarge.
  • output: zwracana wartość funkcji. Typ danych i struktura zależą od zwracanych funkcji. Jeśli na przykład funkcja zwraca ciąg, output jest ciągiem. Jeśli funkcja zwraca słownik, output jest obiektem JSON.
  • błędy: lista błędów przechwyconych podczas wykonywania. Każdy błąd zawiera obiekt name, message oraz opcjonalnie properties, które zawierają pary klucz-wartość z bardziej szczegółowymi informacjami. Puste, gdy funkcja zakończy się pomyślnie.

Kody odpowiedzi

Funkcja zwraca następujące kody HTTP w wyniku wykonania.

kod odpowiedzi Message Opis
200 Powodzenie Żądanie zakończyło się pomyślnie.
400 Nieprawidłowe żądanie Żądanie nie było prawidłowe. Ta odpowiedź może być spowodowana brakującymi lub nieprawidłowymi wartościami parametrów wejściowych, typami danych lub nazwami. Reakcja ta może być spowodowana również wyłączeniem dostępu publicznego dla danej funkcji.
403 Zakazany Odpowiedź była zbyt duża, a wywołanie nie powiodło się.
408 Limit czasu żądania Żądanie nie powiodło się, ponieważ wykonanie trwa dłużej niż maksymalny dozwolony czas.
409 Konflikt Nie można zrealizować żądania z powodu konfliktowego stanu. Ten błąd może być spowodowany nieobsługiwanym wyjątkiem lub błędem z poświadczeniami użytkownika.
422 Nieprawidłowe żądanie Żądanie nie powiodło się z powodu błędu UserThrownError zgłoszonego w funkcji.
500 Wewnętrzny błąd serwera Żądanie nie powiodło się z powodu wewnętrznego błędu w usłudze.