Not
Å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.
I GraphQL definierar fälten du begär exakt vad Data API Builder (DAB) returnerar, inte mer, inte mindre. DAB kompilerar dessa val till parametriserad SQL, inklusive endast de mappade (exponerade) kolumner som du bad om och eventuella extra kolumner som den måste hämta internt. Dessa kan omfatta kolumner som krävs för relationer (sekundärnycklar), primära nycklar eller stabil ordning som används i sidnumrering och markörkonstruktion.
Anmärkning
GraphQL har inget jokertecken som SELECT *. Klienter måste uttryckligen ange varje fält.
Gå till REST-versionen av det här dokumentet.
Grundläggande markering
Köra frågor mot några mappade fält.
GraphQL-fråga
query {
books {
items {
id
title
price
}
}
}
Konceptuell SQL
SELECT
id,
sku_title AS title,
sku_price AS price
FROM dbo.books;
Exempelsvar
{
"data": {
"books": {
"items": [
{
"id": 1,
"title": "Dune",
"price": 20
}
]
}
}
}
Fältalias
Alias byter namn på fält i svaret, inte i databasen. SQL-lagret är inte alias för GraphQL-fältnamn. aliasing sker efter datahämtning.
query {
books {
items {
id
bookTitle: title
cost: price
}
}
}
Konceptuell SQL
SELECT
id,
sku_title AS title,
sku_price AS price
FROM dbo.books;
Exempelsvar
Med alias:
{
"data": {
"books": {
"items": [
{
"id": 2,
"bookTitle": "Foundation",
"cost": 18
}
]
}
}
}
Kapslad markering
Relationer som definieras i konfigurationen tillåter kapslade frågor. Den konceptuella SQL-filen nedan visar en enda koppling. I praktiken kan DAB köra en eller flera parametriserade frågor (till exempel en överordnad fråga plus en batchbaserad underordnad hämtning) i stället för en enda utplattad koppling.
GraphQL-fråga
query {
books {
items {
id
title
category {
id
name
}
}
}
}
Konceptuell SQL
SELECT
b.id,
b.sku_title AS title,
c.id AS category_id,
c.name AS category_name
FROM dbo.books AS b
JOIN dbo.categories AS c
ON b.category_id = c.id;
Exempelsvar
{
"data": {
"books": {
"items": [
{
"id": 1,
"title": "Dune",
"category": {
"id": 10,
"name": "Sci-Fi"
}
},
{
"id": 2,
"title": "Foundation",
"category": {
"id": 10,
"name": "Sci-Fi"
}
}
]
}
}
}
En-till-många-markering
Du kan också bläddra i den omvända relationen. Återigen är SQL konceptuellt; faktisk körning kan deduplicera överordnade rader och materialisera underordnade samlingar separat.
GraphQL-fråga
query {
categories {
items {
id
name
books {
items {
id
title
}
}
}
}
}
Konceptuell SQL
SELECT
c.id,
c.name,
b.id AS book_id,
b.sku_title AS title
FROM dbo.categories AS c
JOIN dbo.books AS b
ON c.id = b.category_id;
Exempelsvar
{
"data": {
"categories": {
"items": [
{
"id": 10,
"name": "Sci-Fi",
"books": {
"items": [
{ "id": 1, "title": "Dune" },
{ "id": 2, "title": "Foundation" }
]
}
}
]
}
}
}
Exempelkonfiguration
{
"runtime": {
"pagination": {
"default-page-size": 100,
"max-page-size": 100000
}
},
"entities": {
"Book": {
"source": {
"type": "table",
"object": "dbo.books"
},
"mappings": {
"sku_title": "title",
"sku_price": "price"
},
"relationships": {
"book_category": {
"cardinality": "one",
"target.entity": "Category",
"source.fields": [ "category_id" ],
"target.fields": [ "id" ]
}
}
},
"Category": {
"source": {
"type": "table",
"object": "dbo.categories"
},
"relationships": {
"category_books": {
"cardinality": "many",
"target.entity": "Book",
"source.fields": [ "id" ],
"target.fields": [ "category_id" ]
}
}
}
}
}
Se även
| Begrepp | REST | GraphQL | Avsikt |
|---|---|---|---|
| Projection | $select | items | Välj vilka fält som ska returneras |
| Filtering | $filter | filtrera | Begränsa rader efter villkor |
| Sortering | $orderby | orderBy | Definiera sorteringsordningen |
| Sidstorlek | $first | first | Begränsa antalet objekt per sida |
| Fortsättning | $after | efter | Fortsätt från den sista sidan med hjälp av en markör |
Anmärkning
REST-nyckelord börjar med $, enligt OData-konventioner.