Langage de schéma
Voici la quatrième partie de la série pour GraphQL et Adobe Commerce. Les requêtes et les mutations utilisées reposent sur un graphique de données spécifique mis en oeuvre sur le serveur, que l’exécution GraphQL utilise pour résoudre la requête. La spécification GraphQL définit un langage agnostique pour exprimer les types et relations de votre graphique de données.
Vidéos et tutoriels connexes sur GraphQL dans cette série
Exemple de schéma
Voici un schéma de type abrégé qui prend en charge les requêtes et les mutations que vous avez étudiées jusqu’à présent :
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
}
Vous pouvez consulter la documentation de GraphQL pour en savoir plus sur le système de type, y compris la syntaxe de certains concepts non représentés ici. L'exemple ci-dessus, cependant, est explicatif. (Notez également à quel point la syntaxe est similaire à celle de la requête.) La définition d’un schéma GraphQL consiste simplement à exprimer les arguments et champs disponibles d’un type donné, ainsi que les types de ces champs. Chaque type de champ complexe doit lui-même comporter une définition, etc., par le biais de l’arborescence, jusqu’à ce que vous obteniez des types scalaires simples tels que String
.
La déclaration input
ressemble à un type
, mais définit un type qui peut être utilisé comme entrée pour un argument. Notez également la déclaration interface
. Cette fonction fonctionne plus ou moins de la même manière que les interfaces en PHP. D’autres types héritent de cette interface.
La syntaxe [CartItemInput!]!
a l'air délicate, mais elle est assez intuitive à la fin. Le crochet !
inside déclare que chaque valeur du tableau doit être non nulle, tandis que le caractère external déclare que la valeur du tableau elle-même doit être non nulle (un tableau vide, par exemple).
Query
ou Mutation
est exécutée, qui examine chaque champ spécifié dans la requête. Pour chaque champ qui correspond à un type complexe, une résolution similaire est effectuée pour ce type, etc., jusqu’à ce que tout ait été résolu en valeurs scalaires.