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. This serves a function more or less the same as interfaces in PHP. Other types inherit from this interface.
The syntax [CartItemInput!]! looks tricky but is fairly intuitive in the end. The ! inside the bracket declares that every value in the array must be non-null, while the one outside declares that the array value itself must be non-null (for example, an empty array).
Query or Mutation type is performed, which examines each field specified in the request. For each field that resolves to a complex type, a similar resolve is done for that type, and so on, until everything has resolved into scalar values.