Langage du schéma
Il s’agit de la partie 4 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 implémenté sur le serveur, que l’exécution de GraphQL consomme et utilise pour résoudre la requête. La spécification GraphQL définit un langage agnostique pour exprimer les types et les 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 examiné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
}
Plongez-vous dans la documentation de GraphQL pour en savoir plus sur les détails du système de type, y compris la syntaxe de certains concepts qui ne sont pas représentés ici. L’exemple ci-dessus s’explique par lui-même. (Notez également à quel point la syntaxe est similaire à la syntaxe de 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 avoir une définition, etc., dans l’arborescence, jusqu’à ce que vous obteniez des types scalaires simples comme String.
La déclaration input est à tous égards semblable à un type, mais elle définit un type qui peut être utilisé comme entrée pour un argument. Notez également la déclaration interface. Cela sert une fonction plus ou moins identique aux interfaces en PHP. D’autres types héritent de cette interface.
La syntaxe [CartItemInput!]! semble délicate, mais est assez intuitive à la fin. Le ! within le crochet déclare que chaque valeur du tableau doit être non nulle, tandis que celui external déclare que la valeur du tableau elle-même doit être non nulle (par exemple, un tableau vide).
Query racine ou au type de Mutation est effectué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, et ainsi de suite, jusqu’à ce que tout soit résolu en valeurs scalaires.