Schemasprache
Erstellt für:
- Einsteiger
- Fortgeschrittener
- Entwickler
Dies ist Teil 4 der Serie für GraphQL und Adobe Commerce. Die verwendeten Abfragen und Mutationen basieren auf einem bestimmten Datendiagramm, das auf dem Server implementiert wird und das die GraphQL-Laufzeit nutzt, um die Abfrage aufzulösen. Die GraphQL-Spezifikation definiert eine agnostische Sprache zum Ausdrücken der Typen und Beziehungen Ihres Datendiagramms.
Verwandte Videos und Tutorials zu GraphQL in dieser Reihe
Beispielschema
Im Folgenden finden Sie ein abgekürztes Schema, das die bisher betrachteten Abfragen und Mutationen unterstützt:
input FilterMatchTypeInput {
match: String
}
type Money {
value: Float
}
type Country {
id: String
full_name_english: String
}
interface ProductInterface {
sku: String
name: String
related_products: [ProductInterface]
}
type CategoryFilterInput {
name: FilterMatchTypeInput
}
type CategoryProducts {
items: [ProductInterface]
}
type CategoryTree {
name: String
products(pageSize: Int, currentPage: Int): CategoryProducts
}
type CategoryResult {
items: [CategoryTree]
}
type Products {
items: [ProductInterface]
}
type Query {
country (id: String): Country
categories (filters: CategoryFilterInput): CategoryResult
products (search: String): Products
}
input CartItemInput {
sku: String!
quantity: Float!
}
type CartPrices {
grand_total: Money
}
type Cart {
prices: CartPrices
total_quantity: Float!
}
type AddProductsToCartOutput {
cart: Cart!
}
type Mutation {
addProductsToCart(cartId: String!, cartItems: [CartItemInput!]!): AddProductsToCartOutput
}
In der Dokumentation zu GraphQL erfahren Sie mehr über die Einzelheiten des Typsystems, einschließlich der Syntax für einige hier nicht dargestellte Konzepte. Das obige Beispiel ist jedoch selbsterklärend. (Beachten Sie außerdem, wie ähnlich die Syntax der Abfragesyntax ist.) Bei der Definition eines GraphQL-Schemas geht es einfach darum, die verfügbaren Argumente und Felder eines bestimmten Typs zusammen mit den Typen dieser Felder auszudrücken. Jeder komplexe Feldtyp muss selbst über eine Definition verfügen usw., bis Sie einfache Skalartypen wie String
erhalten.
Die input
-Deklaration ist in jeder Hinsicht wie eine type
, definiert jedoch einen Typ, der als Eingabe für ein Argument verwendet werden kann. Beachten Sie auch die interface
. Dies dient einer Funktion, die mehr oder weniger den Schnittstellen in PHP entspricht. Andere Typen erben von dieser Schnittstelle.
Die Syntax [CartItemInput!]!
sieht kompliziert aus, ist am Ende aber ziemlich intuitiv. Die !
Innen der Klammer deklariert, dass jeder Wert im Array ungleich null sein muss, während die Klammer Außen deklariert, dass der Array-Wert selbst ungleich null sein muss (z. B. ein leeres Array).
Query
oder Mutation
durchgeführt, bei dem jedes in der Anfrage angegebene Feld geprüft wird. Für jedes Feld, das zu einem komplexen Typ aufgelöst wird, wird eine ähnliche Auflösung für diesen Typ durchgeführt usw., bis alles in Skalarwerte aufgelöst wurde.