Hosten von GraphQL-Endpunkten im Daten-API-Generator
Entitäten, die über GraphQL verfügbar sind, sind unter dem Standardpfad verfügbar: https://{base_url}//graphql
. Der Daten-API-Generator generiert automatisch ein GraphQL-Schema mit Abfrage- und Mutationsfeldern für alle konfigurierten Entitäten. Das GraphQL-Schema kann mithilfe eines modernen GraphQL-Clients untersucht werden, der Features wie AutoVervollständigen enthält.
Wenn Sie den Erste Schritte Beispiel befolgt haben, in dem die books
und die authors
Entität für den GraphQL-Zugriff konfiguriert sind, können Sie sehen, wie einfach GraphQL zu verwenden ist.
Resultsetformat
Das zurückgegebene Ergebnis ist ein JSON-Objekt mit diesem Format:
{
"data": {}
}
Anmerkung
Standardmäßig werden nur die ersten 100 Elemente zurückgegeben.
Unterstützte Stammtypen
Der Daten-API-Generator unterstützt die folgenden GraphQL-Stammtypen:
Fragen
Jede Entität unterstützt die folgenden Aktionen:
Der Daten-API-Generator verwendet, sofern nicht anders angegeben, die Singular Namen einer Entität, wenn die Abfrage erwartet wird, ein einzelnes Element zurückzugeben. Umgekehrt verwendet der Daten-API-Generator den Plural Namen einer Entität, wenn erwartet wird, dass eine Liste von Elementen zurückgegeben wird. Beispielsweise hat die book
Entität Folgendes:
-
book_by_pk()
: Gibt null oder eine Entität zurück -
books()
: Zurückgeben einer Liste mit null oder mehr Entitäten
Paginierung
Alle Abfragetypen, die null oder mehr Elemente zurückgeben, unterstützen die Paginierung:
{
books
{
items {
title
}
hasNextPage
endCursor
}
}
- das
item
-Objekt ermöglicht den Zugriff auf Entitätsfelder -
hasNextPage
auf "true" festgelegt ist, wenn weitere Elemente zurückgegeben werden sollen -
endCursor
gibt eine undurchsichtige Cursorzeichenfolge zurück, die mitfirst
undafter
Abfrageparametern verwendet werden kann, um den nächsten Satz (oder die Seite) von Elementen abzurufen.
Abfrage nach Primärschlüssel
Jede Entität unterstützt den Abruf eines bestimmten Elements über den Primärschlüssel mithilfe des folgenden Abfrageformats:
<entity>_by_pk(<pk_colum>:<pk_value>)
{
<fields>
}
Zum Beispiel:
{
book_by_pk(id:1010) {
title
}
}
Generische Abfrage
Jede Entität unterstützt auch ein generisches Abfragemuster, sodass Sie nur die gewünschten Elemente in der gewünschten Reihenfolge mit den folgenden Parametern anfordern können:
-
filter
: Filtert die zurückgegebenen Elemente. -
orderBy
: definiert, wie die zurückgegebenen Daten sortiert werden -
first
undafter
: Gibt nur die oberstenn
Elemente zurück.
Zum Beispiel:
{
authors(
filter: {
or: [
{ first_name: { eq: "Isaac" } }
{ last_name: { eq: "Asimov" } }
]
}
) {
items {
first_name
last_name
books(orderBy: { year: ASC }) {
items {
title
year
}
}
}
}
}
filter
Der Wert des filter
-Parameters ist ein Prädikatausdruck (ein Ausdruck, der einen booleschen Wert zurückgibt) mithilfe der Felder der Entität. Nur Elemente, bei denen der Ausdruck als "True" ausgewertet wird, sind in der Antwort enthalten. Zum Beispiel:
{
books(filter: { title: { contains: "Foundation" } })
{
items {
id
title
authors {
items {
first_name
last_name
}
}
}
}
}
Diese Abfrage gibt alle Bücher mit dem Wort Foundation
im Titel zurück.
Die vom parameter filter
unterstützten Operatoren sind:
Operator | Art | Beschreibung | Beispiel |
---|---|---|---|
eq |
Vergleich | Gleich | books(filter: { title: { eq: "Foundation" } }) |
neq |
Vergleich | Ungleich | books(filter: { title: { neq: "Foundation" } }) |
gt |
Vergleich | Größer als | books(filter: { year: { gt: 1990 } }) |
gte |
Vergleich | Größer oder gleich | books(filter: { year: { gte: 1990 } }) |
lt |
Vergleich | Weniger als | books(filter: { year: { lt: 1990 } }) |
lte |
Vergleich | Kleiner oder gleich | books(filter: { year: { lte: 1990 } }) |
isNull |
Vergleich | Ist null | books(filter: { year: { isNull: true} }) |
contains |
Schnur | Enthält | books(filter: { title: { contains: "Foundation" } }) |
notContains |
Schnur | Enthält nicht | books(filter: { title: { notContains: "Foundation" } }) |
startsWith |
Schnur | Beginnt mit | books(filter: { title: { startsWith: "Foundation" } }) |
endsWith |
Schnur | End with | books(filter: { title: { endsWith: "Empire" } }) |
and |
Logisch | Logisch und | authors(filter: { and: [ { first_name: { eq: "Robert" } } { last_name: { eq: "Heinlein" } } ] }) |
or |
Logisch | Logisch oder | authors(filter: { or: [ { first_name: { eq: "Isaac" } } { first_name: { eq: "Dan" } } ] }) |
orderBy
Der Wert der orderby
die Reihenfolge festlegen, mit der die Elemente im Resultset zurückgegeben werden. Zum Beispiel:
{
books(orderBy: {title: ASC} )
{
items {
id
title
}
}
}
Diese Abfrage gibt Bücher zurück, die nach title
sortiert sind.
first
und after
Der Parameter first
beschränkt die Anzahl der zurückgegebenen Elemente. Zum Beispiel:
query {
books(first: 5)
{
items {
id
title
}
hasNextPage
endCursor
}
}
Diese Abfrage gibt die ersten fünf Bücher zurück. Wenn keine orderBy
angegeben wird, werden Elemente basierend auf dem zugrunde liegenden Primärschlüssel sortiert. Der für orderBy
bereitgestellte Wert muss eine positive ganze Zahl sein.
Wenn in der book
Entität mehr Elemente vorhanden sind als die über first
angeforderten Entitäten, wird das feld hasNextPage
zu true
ausgewertet, und die endCursor
gibt eine Zeichenfolge zurück, die mit dem parameter after
verwendet werden kann, um auf die nächsten Elemente zuzugreifen. Zum Beispiel:
query {
books(first: 5, after: "W3siVmFsdWUiOjEwMDQsIkRpcmVjdGlvbiI6MCwiVGFibGVTY2hlbWEiOiIiLCJUYWJsZU5hbWUiOiIiLCJDb2x1bW5OYW1lIjoiaWQifV0=")
{
items {
id
title
}
hasNextPage
endCursor
}
}
Mutationen
Für jede Entität werden Mutationen zur Unterstützung von Erstellungs-, Aktualisierungs- und Löschvorgängen automatisch erstellt. Der Mutationsvorgang wird mit dem folgenden Namensmuster erstellt: <operation><entity>
. Für die book
Entität wären die Mutationen beispielsweise:
-
createbook
: Erstellen eines neuen Buchs -
updatebook
: Aktualisieren eines vorhandenen Buchs -
deletebook
: Löschen des angegebenen Buchs
Schaffen
Um ein neues Element der gewünschten Entität zu erstellen, wird die create<entity>
Mutation bereitgestellt. Die erstellte Mutation erfordert den item
-Parameter, bei dem Werte für obligatorische Felder der Entität beim Erstellen des neuen Elements verwendet werden sollen.
create<entity>(item: <entity_fields>)
{
<fields>
}
Zum Beispiel:
mutation {
createbook(item: {
id: 2000,
title: "Leviathan Wakes"
}) {
id
title
}
}
Aktualisieren
Um ein Element der gewünschten Entität zu aktualisieren, wird die update<entity>
Mutation bereitgestellt. Die Updatemutation erfordert zwei Parameter:
-
<primary_key>
, die Schlüsselwertliste der Primärschlüsselspalten und verwandter Werte, um das zu aktualisierende Element zu identifizieren -
item
: Parameter mit den Pflichtfeldern der Entität, die beim Aktualisieren des angegebenen Elements verwendet werden sollen
update<entity>(<pk_colum>:<pk_value>, [<pk_colum>:<pk_value> ... <pk_colum>:<pk_value>,] item: <entity_fields>)
{
<fields>
}
Zum Beispiel:
mutation {
updatebook(id: 2000, item: {
year: 2011,
pages: 577
}) {
id
title
year
pages
}
}
Löschen
Um ein Element der gewünschten Entität zu löschen, wird die delete<entity>
Mutation bereitgestellt. Der Primärschlüssel des zu löschenden Elements ist der erforderliche Parameter.
delete<entity>(<pk_colum>:<pk_value>, [<pk_colum>:<pk_value> ... <pk_colum>:<pk_value>,])
{
<fields>
}
Zum Beispiel:
mutation {
deletebook(id: 1234)
{
id
title
}
}
Datenbanktransaktionen für eine Mutation
Um eine typische GraphQL-Mutationsanforderung zu verarbeiten, erstellt der Daten-API-Generator zwei Datenbankabfragen. Eine der Datenbankabfragen führt die Aktualisierungsaktion (oder) das Einfügen (oder) Löschen durch, die der Mutation zugeordnet ist. Die andere Datenbankabfrage ruft die im Auswahlsatz angeforderten Daten ab.
Der Daten-API-Generator führt beide Datenbankabfragen in einer Transaktion aus. Transaktionen werden nur für SQL-Datenbanktypen erstellt.
In der folgenden Tabelle sind die Isolationsebenen aufgeführt, mit denen die Transaktionen für jeden Datenbanktyp erstellt werden.
Datenbanktyp | Isolationsstufe | Weitere Informationen |
---|---|---|
Azure SQL (oder) SQL Server | Zugesichert lesen | Azure SQL- |
MySQL | Wiederholbares Lesen | MySQL |
PostgreSQL | Zugesichert lesen | PostgreSQL |