Linguaggio dello schema

Questa è la parte 4 della serie per GraphQL e Adobe Commerce. Le query e le mutazioni utilizzate si basano su un grafico dati specifico implementato sul server, che il runtime di GraphQL utilizza e utilizza per risolvere la query. La specifica di GraphQL definisce un linguaggio agnostico per esprimere i tipi e le relazioni del grafico dati.

Video e tutorial correlati su GraphQL in questa serie

Schema di esempio

Di seguito è riportato uno schema di tipo abbreviato che supporta le query e le mutazioni esaminate finora:

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
}

Puoi esplorare la documentazione di GraphQL per scoprire i dettagli del sistema dei tipi, inclusa la sintassi per alcuni concetti non rappresentati qui. L’esempio precedente, tuttavia, non richiede spiegazioni. Inoltre, la sintassi è simile a quella delle query. La definizione di uno schema di GraphQL consiste semplicemente nell’esprimere gli argomenti e i campi disponibili di un determinato tipo, insieme ai tipi di tali campi. Ogni tipo di campo complesso deve avere una definizione e così via nella struttura, fino a ottenere tipi scalari semplici come String.

La dichiarazione input è simile a un type, ma definisce un tipo che può essere utilizzato come input per un argomento. Prendere nota anche della dichiarazione interface. Questa funzione è più o meno la stessa delle interfacce in PHP. Altri tipi ereditano da questa interfaccia.

La sintassi [CartItemInput!]! è complessa, ma alla fine è piuttosto intuitiva. Il ! entro la parentesi quadra dichiara che ogni valore nella matrice deve essere non-null, mentre il valore esterno dichiara che il valore della matrice stessa deve essere non-null (ad esempio, una matrice vuota).

NOTE
La logica che determina il modo in cui i dati vengono recuperati e formattati in base a uno schema e il modo in cui tale logica viene mappata su particolari tipi dipende dall’implementazione runtime di GraphQL. Le implementazioni, tuttavia, devono seguire un flusso concettuale appropriato alla luce di una comprensione relativa ai campi nidificati: viene eseguita un'operazione di risoluzione associata al tipo radice Query o Mutation, che esamina ogni campo specificato nella richiesta. Per ogni campo che viene risolto in un tipo complesso, viene eseguita una risoluzione simile per quel tipo e così via, fino a quando tutto non viene risolto in valori scalari.

Risorse GraphQL utili

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