Idioma do esquema

Esta é a parte 4 da série para GraphQL e Adobe Commerce. As consultas e mutações usadas dependem de um gráfico de dados específico que está sendo implementado no servidor, que o tempo de execução do GraphQL consome e usa para resolver a consulta. A especificação do GraphQL define uma linguagem agnóstica para expressar os tipos e relações do gráfico de dados.

Vídeos e tutoriais relacionados ao GraphQL nesta série

Exemplo de esquema

Este é um schema do tipo abreviado que aceita as consultas e mutações que você viu até agora:

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
}

Você pode analisar a documentação do GraphQL para saber mais sobre os detalhes do sistema do tipo, incluindo a sintaxe de alguns conceitos não representados aqui. O exemplo acima, no entanto, é autoexplicativo. (Além disso, observe como a sintaxe é semelhante à sintaxe de consulta.) A definição de um schema GraphQL é simplesmente uma questão de expressar os argumentos e campos disponíveis de um determinado tipo, juntamente com os tipos desses campos. Cada tipo de campo complexo deve ter uma definição e assim por diante, por meio da árvore, até você chegar a tipos escalares simples como String.

A declaração input é em todos os aspectos como type, mas define um tipo que pode ser usado como entrada para um argumento. Observe também a declaração interface. Isto serve a uma função mais ou menos igual a interfaces no PHP. Outros tipos são herdados dessa interface.

A sintaxe [CartItemInput!]! parece complicada, mas é bastante intuitiva no final. O ! dentro do colchete declara que todos os valores na matriz devem ser não nulos, enquanto o fora declara que o próprio valor da matriz deve ser não nulo (por exemplo, uma matriz vazia).

NOTE
A lógica de como os dados são buscados e formatados de acordo com um esquema e como essa lógica é mapeada para tipos específicos depende da implementação do tempo de execução do GraphQL. As implementações, no entanto, devem seguir um fluxo conceitual que faça sentido à luz de uma compreensão sobre campos aninhados: uma operação de resolução associada à raiz Query ou ao tipo Mutation é executada, que examina cada campo especificado na solicitação. Para cada campo que é resolvido para um tipo complexo, uma resolução semelhante é feita para esse tipo e assim por diante, até que tudo tenha sido resolvido em valores escalares.

Recursos úteis do GraphQL

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