Reference til GQL-forespørgsels-API

Kør GQL-forespørgsler mod egenskabsgrafer i grafen i Microsoft Fabric ved hjælp af en RESTful HTTP-API. I denne reference beskrives HTTP-kontrakten: anmodnings- og svarformater, godkendelse, JSON-resultatkodning og fejlhåndtering.

Vigtigt

Denne artikel bruger udelukkende datasættet for eksempelgrafer på sociale netværk.

Oversigt

GQL-forespørgsels-API'en er et enkelt slutpunkt (RPC via HTTP), der accepterer GQL-forespørgsler som JSON-nyttedata og returnerer strukturerede, indtastede resultater. API'en er tilstandsløs, håndterer godkendelse og leverer omfattende fejlrapportering.

Nøglefunktioner

  • Enkelt slutpunkt – Alle handlinger bruger HTTP POST til én URL-adresse.
  • JSON-baseret – nyttedata for anmodninger og svar bruger JSON med omfattende kodning af indtastede GQL-værdier.
  • Stateless – Der kræves ingen sessionstilstand mellem anmodninger.
  • Type safe – Stærk, GQL-kompatibel indtastning med diskriminerede fagforeninger for værdirepræsentation.

Forudsætninger

Godkendelse

GQL-forespørgsels-API'en kræver godkendelse via ihændehavertokens.

Medtag dit adgangstoken i godkendelsesheaderen for hver anmodning:

Authorization: Bearer <your-access-token>

Generelt kan du hente ihændehavertokens ved hjælp af Microsoft Authentication Library (MSAL) eller andre godkendelsesflows, der er kompatible med Microsoft Entra.

Ihændehavertokens opnås ofte via to overordnede stier:

Brugerdelegeret adgang

Du kan hente ihændehavertokens til brugerdelegerede tjenestekald fra kommandolinjen via værktøjet Azure CLIaz.

Hent et ihændehavertoken for brugerdelegerede kald fra kommandolinjen ved at:

  • Kør az login
  • Derpå az account get-access-token --resource https://api.fabric.microsoft.com

Dette bruger værktøjet Azure CLIaz.

Når du bruger az rest til at udføre anmodninger, hentes ihændehavertokens automatisk.

Programadgang

Du kan få ihændehavertokens for ansøgninger, der er registreret i Microsoft Entra. Du kan finde flere oplysninger i Den hurtige introduktion til Fabric API .

API-slutpunkt

API'en bruger et enkelt slutpunkt, der accepterer alle forespørgselshandlinger:

POST https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/GraphModels/{GraphModelId}/executeQuery?preview=true

Hvis du vil hente {workspaceId} for dit arbejdsområde, kan du få vist alle tilgængelige arbejdsområder ved hjælp af az rest:

az rest --method get --resource "https://api.fabric.microsoft.com" --url "https://api.fabric.microsoft.com/v1/workspaces"

Hvis du vil hente {graphId}, kan du få vist alle tilgængelige grafer i et arbejdsområde ved hjælp af az rest:

az rest --method get --resource "https://api.fabric.microsoft.com" --url "https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/GraphModels"

Du kan bruge flere parametre til yderligere at indsnævre forespørgselsresultater:

  • --query 'value[?displayName=='My Workspace'] til kun at vise elementer med en displayName af My Workspace.
  • --query 'value[starts_with(?displayName='My')] til kun at vise elementer, hvis displayName starter med My.
  • --query '{query}' til kun at vise elementer, der svarer til den angivne JMESPath {query}. Se dokumentationen til Azure CLI på JMESPath om den understøttede syntaks til {query}.
  • -o table til at producere et tabelresultat.

Notat

Se afsnittet om brug af az-rest eller afsnittet om brug af krøller for at få oplysninger om, hvordan du udfører forespørgsler via API-slutpunktet fra en kommandolinje shell.

Anmodningsoverskrifter

Overskrift Værdi Required
Content-Type application/json Ja
Accept application/json Ja
Authorization Bearer <token> Ja

Anmodningsformat

Alle anmodninger bruger HTTP POST med en JSON-nyttedata.

Grundlæggende anmodningsstruktur

{
  "query": "MATCH (n) RETURN n LIMIT 100"
}

Anmod om felter

Felt Type Required Beskrivelse
query streng Ja Den GQL-forespørgsel, der skal udføres

Svarformat

Alle svar på vellykkede anmodninger bruger HTTP 200-status med JSON-nyttedata, der indeholder udførelsesstatus og resultater.

Svarstruktur

{
  "status": {
    "code": "00000",
    "description": "note: successful completion", 
    "diagnostics": {
      "OPERATION": "",
      "OPERATION_CODE": "0",
      "CURRENT_SCHEMA": "/"
    }
  },
  "result": {
    "kind": "TABLE",
    "columns": [...],
    "data": [...]
  }
}

Statusobjekt

Hvert svar indeholder et statusobjekt med udførelsesoplysninger:

Felt Type Beskrivelse
code streng statuskode på seks tegn (000000 = succes)
description streng Statusmeddelelse, der kan læses af mennesker
diagnostics objekt Detaljerede diagnosticeringsposter
cause objekt Valgfrit underliggende årsagsstatusobjekt

Statuskoder

Statuskoder følger et hierarkisk mønster:

  • 00xxxx - Fuldførelse af succes
  • 01xxxx - Lykkedes med advarsler
  • 02xxxx – Lykkedes uden data
  • 03xxxx - Succes med oplysninger
  • 04xxxx og højere – fejl- og undtagelsesbetingelser

Du kan få flere oplysninger i referencen til GQL-statuskoder.

Diagnosticeringsposter

Diagnosticeringsposter kan indeholde andre nøgleværdipar, der yderligere angiver statusobjektet. Taster, der starter med et understregningstegn (_), er specifikke for grafen. GQL-standarden foreskriver alle andre nøgler.

Notat

Værdier i diagnosticeringsposten for nøgler, der er specifikke for grafen, er JSON-kodede GQL-værdier. Se Værdityper og kodning.

Årsager

Statusobjekter omfatter et valgfrit cause felt, når en underliggende årsag er kendt.

Andre statusobjekter

Nogle resultater kan rapportere andre statusobjekter som en liste i feltet (valgfrit). additionalStatuses

Hvis det er tilfældet, bestemmes det primære statusobjekt altid for at være det mest kritiske statusobjekt (f.eks. en undtagelsesbetingelse) som foreskrevet i GQL-standarden.

Resultattyper

Resultaterne bruger et forskelsbehandling foreningsmønster med feltet kind :

Tabelresultater

For forespørgsler, der returnerer tabeldata:

{
  "kind": "TABLE",
  "columns": [
    {
      "name": "name",
      "gqlType": "STRING",
      "jsonType": "string"
    },
    {
      "name": "age",
      "gqlType": "INT32",
      "jsonType": "number"
    }
  ],
  "isOrdered": true,
  "isDistinct": false,
  "data": [
    {
      "name": "Alice",
      "age": 30
    },
    {
      "name": "Bob",
      "age": 25
    }
  ]
}

Udeladte resultater

For handlinger, der ikke returnerer data (f.eks. katalog- og/eller dataopdateringer):

{
  "kind": "NOTHING"
}

Værdityper og kodning

API'en bruger et avanceret typesystem til at repræsentere GQL-værdier med præcis semantik. JSON-formatet for GQL-værdier følger et diskrimineret foreningsmønster.

Notat

JSON-formatet for tabelresultater realiserer det diskriminerede foreningsmønster ved at gqlType adskille og value opnå en mere kompakt repræsentation. Se Optimering af tabel serialisering.

Værdistruktur

{
  "gqlType": "TYPE_NAME",
  "value": <type-specific-value>
}

Primitive typer

GQL-type Eksempel Beskrivelse
BOOL {"gqlType": "BOOL", "value": true} Oprindelig JSON-boolesk
STRING {"gqlType": "STRING", "value": "Hello"} UTF-8-streng

Numeriske typer

Heltalstyper

GQL-type Interval JSON-serialisering Eksempel
INT64 -2⁶³ til 2⁶³-1 Tal eller streng* {"gqlType": "INT64", "value": -9237}
UINT64 0 til 2⁶⁴-1 Tal eller streng* {"gqlType": "UINT64", "value": 18467}

Store heltal uden for JavaScripts sikre område (-9.007.199.254.740.991 til 9.007.199.254.740.991) serialiseres som strenge:

{"gqlType": "INT64", "value": "9223372036854775807"}
{"gqlType": "UINT64", "value": "18446744073709551615"}

Flydende taltyper

GQL-type Interval JSON-serialisering Eksempel
FLOAT64 IEEE 754 binær64 JSON-nummer eller -streng {"gqlType": "FLOAT64", "value": 3.14}

Flydende tal-værdier understøtter IEEE 754-specialværdier:

{"gqlType": "FLOAT64", "value": "Inf"}
{"gqlType": "FLOAT64", "value": "-Inf"}
{"gqlType": "FLOAT64", "value": "NaN"}
{"gqlType": "FLOAT64", "value": "-0"}

Tidsmæssige typer

Understøttede tidsmæssige typer bruger ISO 8601-strengformater:

GQL-type Format Eksempel
ZONED DATETIME ÅÅÅÅ-MM-DDTHH:MM:SS[.ffffff]±HH:MM {"gqlType": "ZONED DATETIME", "value": "2023-12-25T14:30:00+02:00"}

Referencetyper for grafelementer

GQL-type Beskrivelse Eksempel
NODE Grafnodereference {"gqlType": "NODE", "value": "node-123"}
EDGE Grafkantreference {"gqlType": "EDGE", "value": "edge_abc#def"}

Komplekse typer

De komplekse typer består af andre GQL-værdier.

Lister

Lister indeholder matrixer med værdier, der kan være null, med ensartede elementtyper:

{
  "gqlType": "LIST<INT64>",
  "value": [1, 2, null, 4, 5]
}

Særlige listetyper:

  • LIST<ANY> – Blandede typer (hvert element indeholder oplysninger om fuld type)
  • LIST<NULL> - Der må kun angives null-værdier
  • LIST<NOTHING> - Altid tom matrix

Stier

Stier kodes som lister over referenceværdier for grafelementer.

{
    "gqlType": "PATH",
    "value": ["node1", "edge1", "node2"]
}

Se Optimering af tabel serialisering.

Optimering af tabel serialisering

I forbindelse med tabelresultater optimeres værdi serialisering baseret på oplysninger om kolonnetype:

  • Kendte typer – Kun råværdien serialiseres
  • ANY columns – objekt med fuld værdi med typediskriminator
{
  "columns": [
    {"name": "name", "gqlType": "STRING", "jsonType": "string"},
    {"name": "mixed", "gqlType": "ANY", "jsonType": "unknown"}
  ],
  "data": [
    {
      "name": "Alice",
      "mixed": {"gqlType": "INT32", "value": 42}
    }
  ]
}

Fejlhåndtering

Transportfejl

Netværksfejl og HTTP-transportfejl resulterer i standard-HTTP-fejlstatuskoder (4xx, 5xx).

Programfejl

Fejl på programniveau returnerer altid HTTP 200 med fejloplysninger i statusobjektet:

{
  "status": {
    "code": "42001",
    "description": "error: syntax error or access rule violation",
    "diagnostics": {
      "OPERATION": "query",
      "OPERATION_CODE": "0",
      "CURRENT_SCHEMA": "/",
      "_errorLocation": {
        "gqlType": "STRING",
        "value": "line 1, column 15"
      }
    },
    "cause": {
      "code": "22007",
      "description": "error: data exception - invalid date, time, or, datetime
format",
      "diagnostics": {
        "OPERATION": "query",
        "OPERATION_CODE": "0",
        "CURRENT_SCHEMA": "/"
      }
    }
  }
}

Statuskontrol

Hvis du vil finde ud af, om det lykkedes, skal du kontrollere statuskoden:

  • Koder, der starter med 00, 01, 02, angiver, 03 om det lykkedes (med mulige advarsler)
  • Alle andre koder angiver fejl

Komplet eksempel med az rest

Kør en forespørgsel ved hjælp af az rest kommandoen for at undgå at skulle hente ihændehavertokens manuelt, f.eks.:

az rest --method post --url "https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/GraphModels/{GraphModelId}/executeQuery?preview=true" \
--headers "Content-Type=application/json" "Accept=application/json" \
--resource "https://api.fabric.microsoft.com" \
--body '{ 
  "query": "MATCH (n:Person) WHERE n.birthday > 19800101 RETURN n.firstName, n.lastName, n.birthday ORDER BY n.birthday LIMIT 100" 
}'

Komplet eksempel med krøller

I eksemplet i dette afsnit bruges værktøjet curl til at udføre HTTPS-anmodninger fra shell.

Vi antager, at du har et gyldigt adgangstoken gemt i en shellvariabel, f.eks.:

export ACCESS_TOKEN="your-access-token-here"

Tips

Se afsnittet om godkendelse for at få et gyldigt ihændehavertoken.

Kør en forespørgsel på følgende måde:

curl -X POST "https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/GraphModels/{GraphModelId}/executeQuery?preview=true" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
    "query": "MATCH (n:Person) WHERE n.birthday > 19800101 RETURN n.firstName, n.lastName, n.birthday ORDER BY n.birthday LIMIT 100" 
  }'

Bedste praksis

Følg disse bedste fremgangsmåder, når du bruger GQL-forespørgsels-API'en.

Fejlhåndtering

  • Kontrollér altid statuskoder – Antag ikke, at det lykkedes baseret på HTTP 200.
  • Fortolkning af fejloplysninger – Brug diagnosticering og årsagskæder til fejlfinding.

Security

  • Brug HTTPS – Send aldrig godkendelsestokens over ukrypterede forbindelser.
  • Roter tokens – Implementer korrekt tokenopdatering og udløbshåndtering.
  • Valider input – Sanitize og escaper korrekt alle brugerindgivne forespørgselsparametre, der sprøjtes ind i forespørgslen.

Værdirepræsentation

  • Håndter store heltalsværdier – Heltal kodes som strenge, hvis de ikke kan repræsenteres som JSON-tal oprindeligt.
  • Håndter specielle flydende talværdier – Flydende talværdier, der returneres fra forespørgsler, kan være Infinityværdier af typen , -Infinityeller NaN (ikke et tal).
  • Handle null-værdier – JSON null repræsenterer GQL null.