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 se aprofundar em a documentação do GraphQL para saber mais sobre os detalhes do sistema do tipo, incluindo a sintaxe para 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é que você chegue a tipos escalares simples como String.

A variável input declaração é, em todos os aspectos, como uma type mas define um tipo que pode ser usado como entrada para um argumento. Observe também que interface declaração. 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 complicado, mas é bastante intuitivo no final. A variável ! dentro o colchete declara que todos os valores na matriz devem ser não nulos, enquanto o fora declara que o valor da matriz em si 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 Mutation é executado, 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