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).

NOTE
La logique de la manière dont les données sont récupérées et formatées selon un schéma, ainsi que la manière dont cette logique est mappée à des types particuliers, dépend de l’implémentation du runtime GraphQL. Toutefois, les implémentations doivent suivre un flux conceptuel qui a du sens à la lumière d’une compréhension autour des champs imbriqués : une opération de résolution associée au type racine 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.

Ressources GraphQL utiles

recommendation-more-help
3a5f7e19-f383-4af8-8983-d01154c1402f