Udostępnij przez


Interfejs API sieci szkieletowej dla edytora GraphQL

Interfejs API Fabric dla GraphQL udostępnia graficzne środowisko programistyczne, które umożliwia interaktywne tworzenie, testowanie i wyświetlanie wyników zapytań i mutacji GraphQL.

Kto używa edytora GraphQL

Edytor GraphQL jest niezbędny w następujących celach:

  • Deweloperzy aplikacji prototypują i testują zapytania względem danych sieci Szkieletowej przed ich zaimplementowaniem w aplikacjach
  • Inżynierowie danych eksplorujący struktury danych lakehouse i magazynu oraz weryfikujący projekty schematów GraphQL
  • Współautorzy obszaru roboczego Fabric testujący uprawnienia dostępu do danych i rozwiązujący problemy z zapytaniami
  • Deweloperzy analizy biznesowej uczący się struktury interfejsu API i tworzenia wzorców dostępu do danych dla aplikacji niestandardowych
  • Zespoły programistyczne współpracujące w zakresie tworzenia zapytań i rozwiązywania problemów z dostępem do danych w obszarach roboczych usługi Fabric

Użyj edytora zawsze, gdy musisz interaktywnie opracowywać, testować lub debugować zapytania GraphQL względem źródeł danych sieci Szkieletowej.

Wprowadzenie do edytora GraphQL

Wykonaj następujące kroki, aby rozpocząć korzystanie z edytora GraphQL:

  1. Otwórz element interfejsu API GraphQL — przejdź do obszaru roboczego w Fabric i otwórz element interfejsu API GraphQL.

  2. Uzyskaj dostęp do edytora — wybierz pozycję Zapytanie w lewym dolnym rogu ekranu portalu.

    Zrzut ekranu przedstawiający miejsce wyświetlania opcji Zapytanie w lewym dolnym rogu ekranu Fabric.

  3. Napisz zapytanie — wpisz zapytania GraphQL bezpośrednio na karcie Zapytanie . Użyj funkcji IntelliSense ze skrótami klawiaturowymi:

    • Windows: CTRL + spacja
    • macOS: Cmd + spacja

    Zrzut ekranu edytora interfejsu API przedstawiający kartę Zapytanie podzieloną na okienka Uruchom, Zmienne zapytania i Wyniki.

  4. Wykonaj zapytanie — wybierz pozycję Uruchom , aby wykonać zapytanie i pobrać dane ze źródła danych.

Generowanie kodu

Edytor interfejsu API automatycznie generuje standardowy kod języka Python lub Node.js, który odzwierciedla zapytanie GraphQL lub mutację, którą obecnie testujesz w edytorze. W miarę tworzenia prototypów i uściślania zapytań, generowany kod jest aktualizowany. Gdy wyniki będą zadowalające, możesz wyświetlić i skopiować wygenerowany kod, aby uruchomić go lokalnie na potrzeby testowania lub użyć go ponownie w procesie tworzenia aplikacji.

Ważne

Wygenerowany kod używa poświadczeń przeglądarki interakcyjnej i powinien być używany tylko do celów testowych. W środowisku produkcyjnym zawsze zarejestruj aplikację w Microsoft Entra i użyj odpowiednich client_id oraz zakresów. Możesz znaleźć kompletny przykład z przykładowym kodem na stronie Connect Applications.

Aby rozpocząć pracę:

  1. Napisz zapytanie — wprowadź następujące przykładowe zapytanie (lub własne) w edytorze zapytań:

    query {
      addresses(first: 5) {
         items {
            AddressID
            City
            StateProvince
            CountryRegion
         }  
      }
    }
    
  2. Uruchom zapytanie — wybierz pozycję Uruchom , aby wykonać zapytanie i sprawdź, czy działa poprawnie w edytorze przed kontynuowaniem.

  3. Generuj kod — wybierz przycisk Generuj kod , a następnie wybierz preferowany język programowania (Python lub JavaScript/Node.JS):

    Zrzut ekranu edytora interfejsu API przedstawiający listę rozwijaną, aby wybrać język programowania dla wygenerowanego kodu.

  4. Następnie możesz skopiować wygenerowany kod i zapisać go jako plik w folderze lokalnym. W zależności od wybranego języka wykonaj następujące szybkie kroki, aby przetestować lokalnie:

Python

  1. Utwórz plik o nazwie editor.py i wklej wygenerowany kod z powyższego przykładowego zapytania.

  2. Utwórz środowisko wirtualne, uruchamiając polecenie python -m venv .venv.

  3. Aktywuj venv, uruchamiając .venv\Scripts\activate lub source .venv/bin/activate.

  4. Zainstaluj wymaganą zależność, uruchamiając polecenie pip install azure-identity.

  5. Wykonaj kod za pomocą polecenia python editor.py.

  6. Zostanie wyświetlony monit o zalogowanie się za pośrednictwem okna przeglądarki w celu uwierzytelnienia żądania.

  7. Odpowiedź z interfejsu API jest wyświetlana w konsoli.

    {
    	"data": {
    		"addresses": {
    			"items": [
    				{
    					"AddressID": 9,
    					"City": "Bothell",
    					"StateProvince": "Washington",
    					"CountryRegion": "United States"
    				},
    				{
    					"AddressID": 11,
    					"City": "Bothell",
    					"StateProvince": "Washington",
    					"CountryRegion": "United States"
    				},
    				{
    					"AddressID": 25,
    					"City": "Dallas",
    					"StateProvince": "Texas",
    					"CountryRegion": "United States"
    				},
    				{
    					"AddressID": 28,
    					"City": "Phoenix",
    					"StateProvince": "Arizona",
    					"CountryRegion": "United States"
    				},
    				{
    					"AddressID": 32,
    					"City": "Montreal",
    					"StateProvince": "Quebec",
    					"CountryRegion": "Canada"
    				}
    			]
    		}
    	}
    }
    

Node.JS

  1. Utwórz plik o nazwie editor.js i wklej wygenerowany kod z powyższego przykładowego zapytania.

  2. W tym samym folderze co editor.jsutwórz package.json plik z następującą zawartością:

    {
      "type": "module",
      "dependencies": {}
    }
    
  3. Instalowanie Node.js na komputerze deweloperskim (w tym npm)

  4. Uruchom npm install @azure/identity lub podobne polecenie w wybranym menedżerze pakietów, aby zainstalować najnowszą wersję biblioteki tożsamości.

  5. Uruchom polecenie node editor.js , aby wykonać kod.

  6. Zostanie wyświetlony monit o zalogowanie się za pośrednictwem okna przeglądarki w celu uwierzytelnienia żądania.

  7. Odpowiedź z interfejsu API jest wyświetlana w konsoli.

    {
    	"data": {
    		"addresses": {
    			"items": [
    				{
    					"AddressID": 9,
    					"City": "Bothell",
    					"StateProvince": "Washington",
    					"CountryRegion": "United States"
    				},
    				{
    					"AddressID": 11,
    					"City": "Bothell",
    					"StateProvince": "Washington",
    					"CountryRegion": "United States"
    				},
    				{
    					"AddressID": 25,
    					"City": "Dallas",
    					"StateProvince": "Texas",
    					"CountryRegion": "United States"
    				},
    				{
    					"AddressID": 28,
    					"City": "Phoenix",
    					"StateProvince": "Arizona",
    					"CountryRegion": "United States"
    				},
    				{
    					"AddressID": 32,
    					"City": "Montreal",
    					"StateProvince": "Quebec",
    					"CountryRegion": "Canada"
    				}
    			]
    		}
    	}
    }
    

Opracowywanie zapytań i mutacji

W poniższych przykładach pokazano składnię zapytań GraphQL i mutacji przy użyciu przykładowych danych AdventureWorks. W tych przykładach założono, że pracujesz z usługą Fabric Data Warehouse, która obsługuje operacje zapisu (mutacje). Źródła danych dostępne za pośrednictwem punktów końcowych usługi SQL Analytics (takich jak Lakehouses i dublowane bazy danych) są tylko do odczytu i obsługują tylko zapytania, a nie mutacje.

Przejrzyj ten krótki fragment schematu GraphQL z AdventureWorks. Definiuje typ Product z zapytaniami do odczytu pojedynczego produktu lub wyświetlania listy wszystkich produktów oraz z mutacjami do tworzenia, aktualizowania lub usuwania produktów, obsługując wszystkie przypadki użycia CRUDL (tworzenie, odczyt, aktualizacja, usunięcie, lista).

{
  type Product {
    ProductID: Int!
    Name: String!
    ProductNumber: String!
    Color: String
    ListPrice: Float!
    SellStartDate: DateTime!
  }

  type Query {
    products(first: Int, filter: ProductFilterInput): ProductConnection
    products_by_pk(ProductID: Int!): Product
  }

  type Mutation {
    createProduct(Name: String!, ProductNumber: String!, ListPrice: Float!, SellStartDate: DateTime!): Product
    updateProduct(ProductID: Int!, Name: String, Color: String, ListPrice: Float): Product
    deleteProduct(ProductID: Int!): Boolean
  }
}

Odczytywanie danych uwidocznionych za pośrednictwem języka GraphQL przy użyciu dowolnego zapytania zdefiniowanego w schemacie. Zapytanie products_by_pk pobiera pojedynczy produkt według klucza podstawowego:

query MyQuery {
  products_by_pk(ProductID: 680) {
    ProductID
    Name
    ProductNumber
    Color
    ListPrice
  }
}

Odpowiedź:

{
  "data": {
    "products_by_pk": {
      "ProductID": 680,
      "Name": "HL Road Frame - Black, 58",
      "ProductNumber": "FR-R92B-58",
      "Color": "Black",
      "ListPrice": 1431.50
    }
  }
}

Użyj mutacji, takich jak createProduct, aby zapisać dane i stworzyć nowy produkt z wymaganymi parametrami.

mutation MyMutation {
  createProduct(
    Name: "Mountain Bike Helmet - Blue", 
    ProductNumber: "HE-M897-B", 
    ListPrice: 89.99,
    SellStartDate: "2025-01-01T00:00:00Z"
  ) {
    ProductID
    Name
    ProductNumber
    ListPrice
  }
}

Odpowiedź:

{
  "data": {
    "createProduct": {
      "ProductID": 1001,
      "Name": "Mountain Bike Helmet - Blue",
      "ProductNumber": "HE-M897-B",
      "ListPrice": 89.99
    }
  }
}

Zmienne zapytania

Użyj okienka Zmienne zapytania po prawej stronie karty Zapytanie , aby przekazać parametry jako zmienne do zapytań lub mutacji. Zmienne działają jak zmienne w innych językach programowania. Każda zmienna jest zadeklarowana przy użyciu nazwy używanej do uzyskiwania dostępu do przechowywanej w niej wartości. Korzystając z poprzedniego przykładu mutacji, zmodyfikujesz go nieznacznie, aby używać zmiennych zapytania.

mutation MyMutation ($name: String!, $productNumber: String!, $listPrice: Float!, $sellStartDate: DateTime!){
  createProduct(
    Name: $name, 
    ProductNumber: $productNumber, 
    ListPrice: $listPrice,
    SellStartDate: $sellStartDate
  ) {
    ProductID
    Name
    ProductNumber
    ListPrice
  }
}

Zdefiniuj zmienne w okienku Zmienne zapytania , korzystając z poniższego przykładu.

{
  "name": "Mountain Bike Helmet - Blue",
  "productNumber": "HE-M897-B",
  "listPrice": 89.99,
  "sellStartDate": "2025-01-01T00:00:00Z"
}

Zmienne ułatwiają odczytywanie, testowanie i modyfikowanie kodu mutacji. Ułatwiają również ponowne użycie tej samej mutacji z różnymi wartościami przez zmianę zmiennych.