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

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

Ressources GraphQL utiles

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