Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V GraphQL pole, která požadujete, definují přesně to, co tvůrce rozhraní DATA API (DAB) vrací, ne více, ne méně. DAB tyto výběry zkompiluje do parametrizovaného SQL, včetně pouze mapovaných (vystavených) sloupců, o které jste požádali, a všech dalších sloupců, které musí interně načíst. Může se jednat o sloupce vyžadované pro relace (cizí klíče), primární klíče nebo stabilní řazení používané při stránkování a konstrukci kurzoru.
Poznámka:
GraphQL nemá žádný zástupný znak jako SELECT *. Klienti musí explicitně zadat každé pole.
Přejděte do verze REST tohoto dokumentu.
Základní výběr
Dotazování na několik mapovaných polí
Dotaz GraphQL
query {
books {
items {
id
title
price
}
}
}
Koncepční SQL
SELECT
id,
sku_title AS title,
sku_price AS price
FROM dbo.books;
Ukázková odpověď
{
"data": {
"books": {
"items": [
{
"id": 1,
"title": "Dune",
"price": 20
}
]
}
}
}
Aliasy polí
Aliasy přejmenovává pole v odpovědi, ne v databázi. Vrstva SQL nemá alias pro názvy polí GraphQL; aliasing se provede po načtení dat.
query {
books {
items {
id
bookTitle: title
cost: price
}
}
}
Koncepční SQL
SELECT
id,
sku_title AS title,
sku_price AS price
FROM dbo.books;
Ukázková odpověď
S aliasy:
{
"data": {
"books": {
"items": [
{
"id": 2,
"bookTitle": "Foundation",
"cost": 18
}
]
}
}
}
Vnořený výběr
Relace definované v konfiguraci umožňují vnořené dotazy. Následující koncepční sql ukazuje jedno spojení. V praxi může DAB spustit jeden nebo více parametrizovaných dotazů (například nadřazený dotaz plus dávkové podřízené načtení) místo jednoho zploštěného spojení.
Dotaz GraphQL
query {
books {
items {
id
title
category {
id
name
}
}
}
}
Koncepční 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;
Ukázková odpověď
{
"data": {
"books": {
"items": [
{
"id": 1,
"title": "Dune",
"category": {
"id": 10,
"name": "Sci-Fi"
}
},
{
"id": 2,
"title": "Foundation",
"category": {
"id": 10,
"name": "Sci-Fi"
}
}
]
}
}
}
Výběr 1:N
Můžete také procházet inverzní relaci. Sql je opět koncepční; Skutečné spuštění může deduplikovat nadřazené řádky a materializovat podřízené kolekce samostatně.
Dotaz GraphQL
query {
categories {
items {
id
name
books {
items {
id
title
}
}
}
}
}
Koncepční 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;
Ukázková odpověď
{
"data": {
"categories": {
"items": [
{
"id": 10,
"name": "Sci-Fi",
"books": {
"items": [
{ "id": 1, "title": "Dune" },
{ "id": 2, "title": "Foundation" }
]
}
}
]
}
}
}
Příklad konfigurace
{
"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" ]
}
}
}
}
}
Viz také
| Koncepce | REST | GraphQL | Účel |
|---|---|---|---|
| Projection | $select | items | Výběr polí, která se mají vrátit |
| Filtering | $filter | filtr | Omezení řádků podle podmínky |
| Řazení | $orderby | orderBy | Definování pořadí řazení |
| Velikost stránky | $first | first | Omezení počtu položek na stránku |
| Pokračování | $after | po | Pokračovat z poslední stránky pomocí kurzoru |
Poznámka:
Klíčová slova REST začínají následujícími konvencemi $OData.