GraphQL ist eine Abfragesprache für APIs und eine Laufzeitumgebung zur Erfüllung von Abfragen mit vorhandenen Daten.
Abfragen (Queries)
Basisabfrage und JSON-Antwort
{ status }
JSON Response:
{
"data": {
"status": "available"
}
}
Verschachtelte Objekte
{
hero {
name
height
}
}
Listen
{
friends {
name
}
}
Argumente
{
hero(id: "1000") {
id
name
}
}
Aliase
{
luke: hero(id: "1000") {
name
}
han: hero(id: "1001") {
name
}
}
Operationsnamen und Variablen
Query Definition:
query FindHero($id: String!) {
hero(id: $id) {
name
}
}
Variables Payload (JSON):
{
"id": "1000"
}
Mutationen (Mutations)
mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
createReview(episode: $ep, review: $review) {
stars
commentary
}
}
Inline-Fragmente (Union- und Interface-Abfragen)
{
search(q: "john") {
id
... on User {
name
}
... on Comment {
body
author {
name
}
}
}
}
GraphQL über HTTP
GET-Anfrage
fetch('https://api.example.com/graphql?query={me{name}}')
POST-Anfrage
fetch('https://api.example.com/graphql', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
query: 'query GetHero($id: String!) { hero(id: $id) { name } }',
variables: { id: '1000' }
})
})
Schema Definition Language (SDL)
Basistypen
type Query {
me: User
users(limit: Int): [User]
}
type User {
id: ID!
name: String
}
Eingebaute Skalare
| Skalar | Beschreibung |
|---|---|
Int |
Vorzeichenbehaftete 32-Bit-Ganzzahl |
Float |
Gleitkommazahl mit doppelter Genauigkeit |
String |
UTF-8 Zeichenkette |
Boolean |
Wahrheitswert true oder false |
ID |
Eindeutige ID als Zeichenkette serialisiert |
Schlüsselwörter zur Typdefinition
| Schlüsselwort | Beschreibung |
|---|---|
type |
Objekttyp mit einer Menge von Feldern |
scalar |
Benutzerdefinierter primitiver Skalartyp |
interface |
Abstrakter Typ mit Feldern, die Typen implementieren müssen |
union |
Abstrakter Typ zur Gruppierung verschiedener Objekttypen |
enum |
Aufzählung diskreter erlaubter Zeichenkettenwerte |
input |
Komplexes Argumentobjekt für Abfragen oder Mutationen |
Typmodifikatoren
| Modifikator | Beschreibung |
|---|---|
String |
Nullable Zeichenkette |
String! |
Non-nullable Zeichenkette |
[String] |
Nullable Liste mit nullable Zeichenketten |
[String]! |
Non-nullable Liste mit nullable Zeichenketten |
[String!]! |
Non-nullable Liste mit non-nullable Zeichenketten |
Interfaces
interface Entity {
id: ID!
}
type User implements Entity {
id: ID!
name: String
}
Enums (Aufzählungen)
enum Direction {
NORTH
EAST
SOUTH
WEST
}
Unions (Vereinigungstypen)
union SearchResult = Human | Droid | Starship
type Query {
search(text: String): [SearchResult]
}