Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Kör GQL-frågor mot egenskapsdiagram i grafen i Microsoft Fabric med hjälp av ett RESTful HTTP-API. Den här referensen beskriver HTTP-kontraktet: format för begäran och svar, autentisering, JSON-resultatkodning och felhantering.
Viktigt!
Denna artikel använder uteslutande dataset för sociala nätverk som exempel på graf.
Översikt
GQL Query API exponerar en REST-endpoint som accepterar GQL-frågor som JSON-payloads och returnerar strukturerade, typade resultat. Den stöder fortsättningspolling för frågor som inte avslutas under den initiala förfrågan.
Viktiga funktioner
- Enskild slutpunkt – Alla åtgärder använder HTTP POST till en URL.
- JSON-baserad – Nyttolaster för begäran och svar använder JSON med omfattande kodning av typade GQL-värden.
- Continuation polling – Långvariga frågor kan fortsätta över flera HTTP-förfrågningar.
- Typsäker – Stark, GQL-kompatibel typning med diskriminerade fackföreningar för värderepresentation.
Förutsättningar
- Du behöver ett diagram som innehåller data, inklusive noder och kanter (relationer). Se grafens snabbstart för att skapa och läsa in ett exempeldiagram.
- Du bör känna till egenskapsdiagram och en grundläggande förståelse för GQL, inklusive strukturen för körningsresultat och resultat.
- Du måste installera och konfigurera verktyget Azure CLI
azför att logga in på din organisation. Kommandoradsexempel i den här artikeln förutsätter användning av ett POSIX-kompatibelt kommandoradsgränssnitt, till exempel bash.
Authentication
GQL Query API kräver autentisering via ägartoken.
Inkludera din åtkomsttoken i auktoriseringshuvudet för varje begäran:
Authorization: Bearer <your-access-token>
I allmänhet kan du hämta ägartoken med hjälp av Microsofts autentiseringsbibliotek (MSAL) eller andra autentiseringsflöden som är kompatibla med Microsoft Entra.
Ägartoken erhålls ofta via två huvudsakliga sökvägar:
Användardelegering
Du kan hämta ägartoken för användardelegaterade tjänstanrop från kommandoraden via verktyget Azure CLIaz.
Hämta en ägartoken för användardelegaterade anrop från kommandoraden genom att:
- Kör
az login - Då
az account get-access-token --resource https://api.fabric.microsoft.com
Detta använder verktyget Azure CLIaz.
När du använder az rest för att utföra begäranden hämtas ägartoken automatiskt.
Programåtkomst
Du kan hämta ägartoken för program som registrerats i Microsoft Entra. Mer information finns i snabbstarten för Infrastruktur-API :et.
API-slutpunkt
API:et använder en enda slutpunkt som accepterar alla frågeåtgärder:
POST https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/graphModels/{graphModelId}/executeQuery?beta=true
Query API är i beta och rekommenderas inte för produktionsbruk. Sätt den nödvändiga beta frågeparametern till true. Den äldre preview=true parametern stöds fortfarande för bakåtkompatibilitet, men används beta=true för nya integrationer.
Om du vill hämta {workspaceId} för din arbetsyta kan du visa en lista över alla tillgängliga arbetsytor med hjälp av az rest:
az rest --method get --resource "https://api.fabric.microsoft.com" --url "https://api.fabric.microsoft.com/v1/workspaces"
Om du vill hämta {graphModelId}kan du visa en lista över alla tillgängliga diagram på en arbetsyta med hjälp av az rest:
az rest --method get --resource "https://api.fabric.microsoft.com" --url "https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/graphModels"
Du kan använda Azure CLI-utdata för att filtrera eller formatera svaren från dessa listförfrågningar. Dessa alternativ körs i Azure CLI-klienten; de är inte Query API-parametrar:
-
--query "value[?displayName=='My Workspace']"listar endast objekt med ettdisplayNameavMy Workspace. -
--query "value[?starts_with(displayName, 'My')]"listar endast objekt varsdisplayNamebörjar medMy. -
--query "{query}"listar endast föremål som matchar den tillhandahållna JMESPath{query}. Se Query Azure CLI-kommandoresultat för den stödda syntaxen. -
-o tableför att producera ett tabellresultat.
Anmärkning
Se avsnittet om hur du använder az-rest eller avsnittet om hur du använder curl för att köra frågor via API-slutpunkten från ett kommandoradsgränssnitt.
Frågeparametrar
| Parameter | Typ | Krävs | Description |
|---|---|---|---|
beta |
boolean | Yes | Ställ in på true att använda beta-Query API:et. |
continuationToken |
snöre | No | Token från result.nextPage när en fråga fortfarande körs. Skicka in samma frågetext när du använder token. |
Förfrågningsrubriker
| Header | Värde | Krävs |
|---|---|---|
Content-Type |
application/json |
Yes |
Accept |
application/json |
Yes |
Authorization |
Bearer <token> |
Yes |
Begärandeformat
Alla begäranden använder HTTP POST med en JSON-nyttolast.
Grundläggande struktur för begäranden
{
"query": "MATCH (n) RETURN n LIMIT 100"
}
Fält för begäran
| Fält | Typ | Krävs | Description |
|---|---|---|---|
query |
snöre | Yes | GQL-frågan som ska köras |
Svarsformat
Alla svar för lyckade begäranden använder HTTP 200-status med JSON-nyttolast som innehåller körningsstatus och resultat.
Svarsstruktur
{
"status": {
"code": "00000",
"description": "note: successful completion",
"diagnostics": {
"OPERATION": "query",
"OPERATION_CODE": "0",
"CURRENT_SCHEMA": "/",
"_graphaneGqlStatus": {
"gqlType": "STRING",
"value": "00000"
}
}
},
"result": {
"kind": "TABLE",
"columns": [...],
"data": [...]
}
}
Statusobjekt
Varje svar innehåller ett statusobjekt med körningsinformation:
| Fält | Typ | Description |
|---|---|---|
code |
snöre | Fem tecken lång offentlig API-statuskod. |
description |
snöre | Mänskligt läsbar statusbeskrivning. |
diagnostics |
objekt | Detaljerad diagnostisk journal, inklusive den kanoniska frågemotorns GQLSTATUS när den finns tillgänglig. |
cause |
objekt | Valfritt underliggande orsaksstatusobjekt. |
Statuskoder
Den primära status.code använder dessa publika API-kategorier:
-
00000- Lyckad komplettering med minst en rad. -
00001- Lyckad slutförande med utelämnat resultat. Reserverat för framtida DDL- och DML-stöd. -
01000- Varning eller informationstillstånd. -
02000- Inga rader är för närvarande tillgängliga från en radproducerande fråga. -
42000- Syntax-, access-rule eller annat användarkorrigerbart frågefel. -
50000- System- eller oklassificerat fel.
Mer information finns i referensen för GQL-statuskoder.
Diagnostikposter
Diagnostikposter kan innehålla andra nyckel/värde-par som ytterligare beskriver statusobjektet. Nycklar som börjar med ett understreck (_) är specifika för diagram. GQL-standarden föreskriver alla andra nycklar.
Anmärkning
Diagnostiken _graphaneGqlStatus innehåller den kanoniska femteckens GQLSTATUS som rapporteras av frågemotorn. Varje diagnostisk medlem med underpoängsprefix innehåller antingen null eller ett JSON-kodat GQL-värde. Till exempel _graphaneGqlStatus använder STRING, medan felklassificeringsdiagnostik använder BOOL. Se Värdetyper och kodning.
Orsaker
Statusobjekt innehåller ett valfritt cause fält när en underliggande orsak är känd.
Andra statusobjekt
Vissa resultat kan rapportera andra statusobjekt som en lista i det valfria additionalStatuses fältet.
Primärstatusen är det mest kritiska registrerade tillståndet. Varje ytterligare status och nästlad orsak har sin egen publika API-kod och kanoniska GQLSTATUS-diagnostik.
Resultattyper
Resultaten använder ett diskriminerat unionsmönster med fältet kind :
Tabellresultat
För frågor som returnerar tabelldata:
{
"kind": "TABLE",
"columns": [
{
"name": "name",
"gqlType": "STRING",
"jsonType": "string"
},
{
"name": "age",
"gqlType": "INT64",
"jsonType": "number|string"
}
],
"isOrdered": false,
"isDistinct": false,
"data": [
{
"name": "Alice",
"age": 30
},
{
"name": "Bob",
"age": 25
}
]
}
Tidskrävande frågor
Om en fråga inte avslutas under den aktuella HTTP-förfrågan returnerar API:et HTTP 200 med publik statuskod 02000, en tom tabell och en nextPage token:
{
"status": {
"code": "02000",
"description": "No data available, retry with continuation token"
},
"result": {
"kind": "TABLE",
"columns": [],
"data": [],
"nextPage": "{continuationToken}"
}
}
Poll för fullbordan genom att skicka samma förfråganarkam och lägga till token i URL:en:
POST https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/graphModels/{graphModelId}/executeQuery?beta=true&continuationToken={continuationToken}
Behandla nextPage det som ett ogenomskinligt värde. Procentkoda den exakt en gång enligt RFC 3986 innan du använder den som continuationToken frågeparametervärde.
Avkoda, inspektera eller ändra inte tokenen.
Fortsätt tills svaret inte längre innehåller nextPage. Frågeexekveringen kan fortsätta i upp till 20 minuter från den initiala förfrågan. Om den överskrider den totala varaktigheten returnerar API:et HTTP 408 med felkod QueryTimeout.
Förkortade resultat
Grafen förkortar ett frågesvar när dess interna binära representation överstiger 64 MB. API:et returnerar de rader som passar och lägger till en status till additionalStatuses. Den ytterligare statusen använder offentlig kod 01000 och bevarar kanonisk GQL-status 01M11 i _graphaneGqlStatus.
Truncering ger nextPage ingen token för de utelämnade raderna. Begränsa frågan med filter, specifika projektioner eller LIMIT, och kör sedan igen.
Utelämnade resultat
Responsschemat kan representera en operation vars formulering aldrig ger rader, oberoende av data eller utvärderingsresultat. Detta resultat använder statuskod 00001:
{
"kind": "NOTHING"
}
Detta utelämnade resultat skiljer sig från en tabell utan rader. En tom tabell är resultatet av att utvärdera en radproducerande fråga som för närvarande inte har några rader att returnera.
Graph reserverar denna resultatform och statuskod för framtida data definition language (DDL) och data manipulation language (DML) satsstöd. Aktuella frågesatser returnerar alltid tabellresultat.
Värdetyper och kodning
API:et använder ett omfattande typsystem för att representera GQL-värden med exakta semantik. JSON-formatet för GQL-värden följer ett diskriminerat unionsmönster.
Anmärkning
JSON-formatet för tabellresultat förverkligar det diskriminerade unionsmönstret genom att gqlType separera och value uppnå en mer kompakt representation. Se Tabell serialiseringsoptimering.
Värdestruktur
{
"gqlType": "TYPE_NAME",
"value": <type-specific-value>
}
Primitiva typer
| GQL-typ | Example | Description |
|---|---|---|
BOOL |
{"gqlType": "BOOL", "value": true} |
Internt JSON-booleskt värde |
STRING |
{"gqlType": "STRING", "value": "Hello"} |
UTF-8-sträng |
Numeriska typer
Heltalstyper
| GQL-typ | Räckvidd | JSON-serialisering | Example |
|---|---|---|---|
INT64 |
-2⁶³ till 2⁶³-1 | Tal eller sträng* | {"gqlType": "INT64", "value": -9237} |
UINT64 |
0 till 2⁶⁴-1 | Tal eller sträng* | {"gqlType": "UINT64", "value": 18467} |
Stora heltal utanför JavaScripts säkra intervall (-9 007 199 254 740 991 till 9 007 199 254 740 991) serialiseras som strängar:
{"gqlType": "INT64", "value": "9223372036854775807"}
{"gqlType": "UINT64", "value": "18446744073709551615"}
Flyttalstyper
| GQL-typ | Räckvidd | JSON-serialisering | Example |
|---|---|---|---|
FLOAT64 |
IEEE 754 binär64 | JSON-nummer eller -sträng | {"gqlType": "FLOAT64", "value": 3.14} |
Flyttalsvärden stöder IEEE 754-specialvärden:
{"gqlType": "FLOAT64", "value": "Inf"}
{"gqlType": "FLOAT64", "value": "-Inf"}
{"gqlType": "FLOAT64", "value": "NaN"}
{"gqlType": "FLOAT64", "value": "-0"}
Temporala typer
Tidstyper som stöds använder ISO 8601-strängformat:
| GQL-typ | Format | Example |
|---|---|---|
ZONED DATETIME |
ÅÅÅÅ-MM-DDTHH:MM:SS[.ffffff]±HH:MM | {"gqlType": "ZONED DATETIME", "value": "2023-12-25T14:30:00+02:00"} |
Referenstyper för Graph-element
| GQL-typ | Description | Example |
|---|---|---|
NODE |
Referens för grafnod | {"gqlType": "NODE", "value": "node-123"} |
EDGE |
Graph Edge-referens | {"gqlType": "EDGE", "value": "edge_abc#def"} |
Komplexa typer
De komplexa typerna består av andra GQL-värden.
Lists
Listor innehåller matriser med null-värden med konsekventa elementtyper:
{
"gqlType": "LIST<INT64>",
"value": [1, 2, null, 4, 5]
}
Särskilda listtyper:
-
LIST<ANY>– Blandade typer (varje element innehåller fullständig typinformation) -
LIST<NULL>– Endast null-värden tillåts -
LIST<NOTHING>- Alltid tom matris
Paths
Sökvägar kodas som listor över referensvärden för grafelement.
{
"gqlType": "PATH",
"value": ["node1", "edge1", "node2"]
}
Se Tabell serialiseringsoptimering.
Optimering av tabell serialisering
För tabellresultat optimeras värde serialisering baserat på kolumntypsinformation:
- Kända typer – Endast raw-värdet serialiseras
- ANY-kolumner – Fullständigt värdeobjekt med typdiskriminering
{
"kind": "TABLE",
"columns": [
{"name": "name", "gqlType": "STRING", "jsonType": "string"},
{"name": "amount", "gqlType": "INT64", "jsonType": "number|string"},
{"name": "mixed", "gqlType": "ANY", "jsonType": "object"}
],
"data": [
{
"name": "Alice",
"amount": "123",
"mixed": {"gqlType": "INT64", "value": "1"}
}
]
}
Felhantering
Transportfel
HTTP-status och GQL-status beskriver olika lager av svaret:
| HTTP-statuskod | Meaning |
|---|---|
| 200 | API:et behandlade förfrågan. Inspektera status.code eftersom resultatet kan representera framgång, inga rader, en pågående fråga eller ett användarkorrigerbart fel. |
| 408 | Förfrågansökningen översteg den totala timeouten på 20 minuter. Felkoden är QueryTimeout. |
| 429 | Gränsen för tjänstfrekvens överskreds. Vänta på varaktigheten i Retry-After headern innan du försöker igen. |
| 499 | Uppringaren avbröt förfrågan. Felkoden är ClientCancelled. |
| Andra 4xx eller 5xx | Begäran eller tjänsten misslyckades innan den returnerade ett GQL-exekveringsresultat. Granska HTTP-felsvaret. |
Programfel
Ett felmeddelande på applikationsnivå kan returnera HTTP 200 med felinformation i statusobjektet. Till exempel använder division med noll den publika API-koden 42000 och bevarar kanonisk GQL-status 22012 i diagnosposten:
{
"status": {
"code": "42000",
"description": "error: data exception - division by zero",
"diagnostics": {
"OPERATION": "query",
"OPERATION_CODE": "0",
"CURRENT_SCHEMA": "/",
"_graphaneGqlStatus": {
"gqlType": "STRING",
"value": "22012"
},
"_graphaneIsUserError": {
"gqlType": "BOOL",
"value": true
},
"_graphaneIsTransientError": {
"gqlType": "BOOL",
"value": false
}
}
}
}
Statuskontroll
För att avgöra det breda utfallet, kontrollera allmänheten status.code. Använd _graphaneGqlStatus när din applikation behöver skilja på ett specifikt frågemotorvillkor, såsom numeriskt överflöd (22003) från division med noll (22012).
Komplett exempel med az rest
Kör en fråga med kommandot az rest för att undvika att behöva hämta ägartoken manuellt, så här:
az rest --method post --url "https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/graphModels/{graphModelId}/executeQuery?beta=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"
}'
Komplett exempel med curl
I exemplet i det här avsnittet används curl verktyget för att utföra HTTPS-begäranden från gränssnittet.
Vi antar att du har en giltig åtkomsttoken lagrad i en gränssnittsvariabel, så här:
export ACCESS_TOKEN="your-access-token-here"
Tips/Råd
Se avsnittet om autentisering för hur du hämtar en giltig ägartoken.
Kör en fråga så här:
curl -X POST "https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/graphModels/{graphModelId}/executeQuery?beta=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"
}'
Metodtips
Följ dessa metodtips när du använder GQL-fråge-API:et.
Felhantering
- Kontrollera alltid statuskoder – Anta inte att det lyckas baserat på HTTP 200.
- Parsa felinformation – Använd diagnostik och orsakskedjor för felsökning.
Security
- Använd HTTPS – Skicka aldrig autentiseringstoken via okrypterade anslutningar.
- Rotera token – Implementera korrekt tokenuppdatering och förfallohantering.
- Validera indata – Validera och korrekt evakuera alla användargenererade värden som din applikation infogar i frågetexten.
Värderepresentation
- Hantera stora heltalsvärden – Heltal kodas som strängar om de inte kan representeras som JSON-tal internt.
-
Hantera speciella flyttalsvärden – API:et serialiserar positiv oändlighet, negativ oändlighet, icke-ett tal och minus noll som
"Inf","-Inf","NaN", och"-0". - Hantera null-värden – JSON null representerar GQL null.