Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In GraphQL i campi richiesti definiscono esattamente ciò che il generatore di API dati (DAB) restituisce, non più, non meno. DAB compila queste selezioni in SQL con parametri, incluse solo le colonne mappate (esposte) richieste e le eventuali colonne aggiuntive che deve recuperare internamente. Queste possono includere colonne necessarie per le relazioni (chiavi esterne), chiavi primarie o ordinamento stabile usate nella costruzione di pagine e cursori.
Annotazioni
GraphQL non ha caratteri jolly come SELECT *. I client devono specificare ogni campo in modo esplicito.
Passare alla versione REST di questo documento.
Selezione di base
Esecuzione di query su alcuni campi mappati.
Query GraphQL
query {
books {
items {
id
title
price
}
}
}
SQL concettuale
SELECT
id,
sku_title AS title,
sku_price AS price
FROM dbo.books;
Risposta di esempio
{
"data": {
"books": {
"items": [
{
"id": 1,
"title": "Dune",
"price": 20
}
]
}
}
}
Alias di campo
Gli alias rinominano i campi nella risposta, non nel database. Il livello SQL non esegue l'alias per i nomi dei campi GraphQL; l'aliasing si verifica dopo il recupero dei dati.
query {
books {
items {
id
bookTitle: title
cost: price
}
}
}
SQL concettuale
SELECT
id,
sku_title AS title,
sku_price AS price
FROM dbo.books;
Risposta di esempio
Con alias:
{
"data": {
"books": {
"items": [
{
"id": 2,
"bookTitle": "Foundation",
"cost": 18
}
]
}
}
}
Selezione annidata
Le relazioni definite nella configurazione consentono query annidate. Il codice SQL concettuale seguente mostra un singolo join. In pratica, DAB può eseguire una o più query con parametri (ad esempio, una query padre più un recupero figlio in batch) anziché un singolo join bidimensionale.
Query GraphQL
query {
books {
items {
id
title
category {
id
name
}
}
}
}
SQL concettuale
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;
Risposta di esempio
{
"data": {
"books": {
"items": [
{
"id": 1,
"title": "Dune",
"category": {
"id": 10,
"name": "Sci-Fi"
}
},
{
"id": 2,
"title": "Foundation",
"category": {
"id": 10,
"name": "Sci-Fi"
}
}
]
}
}
}
Selezione uno-a-molti
È anche possibile attraversare la relazione inversa. Anche in questo caso, SQL è concettuale; l'esecuzione effettiva può deduplicare le righe padre e materializzare le raccolte figlio separatamente.
Query GraphQL
query {
categories {
items {
id
name
books {
items {
id
title
}
}
}
}
}
SQL concettuale
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;
Risposta di esempio
{
"data": {
"categories": {
"items": [
{
"id": 10,
"name": "Sci-Fi",
"books": {
"items": [
{ "id": 1, "title": "Dune" },
{ "id": 2, "title": "Foundation" }
]
}
}
]
}
}
}
Configurazione di esempio
{
"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" ]
}
}
}
}
}
Vedere anche
| Concetto | REST | GraphQL | Scopo |
|---|---|---|---|
| Projection | $select | Elementi | Scegliere i campi da restituire |
| Filtraggio | $filter | filtro | Limitare le righe per condizione |
| Ordinamento | $orderby | orderBy | Definire l'ordinamento |
| Dimensioni pagina | $first | primo | Limitare il numero di elementi per pagina |
| Continuazione | $after | dopo | Continuare dall'ultima pagina usando un cursore |
Annotazioni
Le parole chiave REST iniziano con $, seguendo le convenzioni OData.