Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In GraphQL definieren die Felder, die Sie anfordern, genau, was der Daten-API-Generator (DAB) zurückgibt, nicht mehr, nicht weniger. DAB kompiliert diese Auswahlen in parametrisiertes SQL, einschließlich nur der zugeordneten (verfügbar gemachten) Spalten, die Sie angefordert haben, und alle zusätzlichen Spalten, die sie intern abrufen müssen. Dazu können Spalten gehören, die für Beziehungen (Fremdschlüssel), Primärschlüssel oder stabile Reihenfolge erforderlich sind, die in der Paginierungs- und Cursorkonstruktion verwendet werden.
Hinweis
GraphQL hat keine Wildcard wie SELECT *. Clients müssen jedes Feld explizit angeben.
Wechseln Sie zur REST-Version dieses Dokuments.
Einfache Auswahl
Abfragen einiger zugeordneter Felder.
GraphQL-Abfrage
query {
books {
items {
id
title
price
}
}
}
Konzeptionelles SQL
SELECT
id,
sku_title AS title,
sku_price AS price
FROM dbo.books;
Beispielantwort
{
"data": {
"books": {
"items": [
{
"id": 1,
"title": "Dune",
"price": 20
}
]
}
}
}
Feldaliasen
Aliase benennen Felder in der Antwort um, nicht in der Datenbank. Die SQL-Ebene hat keinen Alias für GraphQL-Feldnamen; Aliasing erfolgt nach dem Datenabruf.
query {
books {
items {
id
bookTitle: title
cost: price
}
}
}
Konzeptionelles SQL
SELECT
id,
sku_title AS title,
sku_price AS price
FROM dbo.books;
Beispielantwort
Mit Aliasen:
{
"data": {
"books": {
"items": [
{
"id": 2,
"bookTitle": "Foundation",
"cost": 18
}
]
}
}
}
Geschachtelte Auswahl
Beziehungen, die in der Konfiguration definiert sind, lassen geschachtelte Abfragen zu. Das konzeptionelle SQL-Konzept unten zeigt eine einzelne Verknüpfung. In der Praxis kann DAB eine oder mehrere parametrisierte Abfragen (z. B. eine übergeordnete Abfrage plus ein batchiertes untergeordnetes Abrufen) anstelle einer einzelnen flachen Verknüpfung ausführen.
GraphQL-Abfrage
query {
books {
items {
id
title
category {
id
name
}
}
}
}
Konzeptionelles 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;
Beispielantwort
{
"data": {
"books": {
"items": [
{
"id": 1,
"title": "Dune",
"category": {
"id": 10,
"name": "Sci-Fi"
}
},
{
"id": 2,
"title": "Foundation",
"category": {
"id": 10,
"name": "Sci-Fi"
}
}
]
}
}
}
1:n-Auswahl
Sie können auch die umgekehrte Beziehung durchlaufen. Auch hier ist SQL konzeptuell; Die tatsächliche Ausführung kann übergeordnete Zeilen deduplizieren und untergeordnete Sammlungen separat materialisieren.
GraphQL-Abfrage
query {
categories {
items {
id
name
books {
items {
id
title
}
}
}
}
}
Konzeptionelles 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;
Beispielantwort
{
"data": {
"categories": {
"items": [
{
"id": 10,
"name": "Sci-Fi",
"books": {
"items": [
{ "id": 1, "title": "Dune" },
{ "id": 2, "title": "Foundation" }
]
}
}
]
}
}
}
Beispielkonfiguration
{
"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" ]
}
}
}
}
}
Siehe auch
| Begriff | REST | GraphQL | Zweck |
|---|---|---|---|
| Projection | $select | Elemente | Auswählen der zurückzugebenden Felder |
| Filterung | $filter | Filter | Einschränken von Zeilen nach Bedingung |
| Sortieren | $orderby | orderBy | Definieren der Sortierreihenfolge |
| Seitenformat | $first | first | Begrenzen der Anzahl von Elementen pro Seite |
| Fortsetzung | $after | nach | Weiter von der letzten Seite mithilfe eines Cursors |
Hinweis
REST-Schlüsselwörter beginnen mit $den folgenden OData-Konventionen.