Schema

Dit is deel 4 van de reeks voor GraphQL en Adobe Commerce. De gebruikte query's en mutaties zijn afhankelijk van een specifieke gegevensgrafiek die op de server wordt geïmplementeerd. De GraphQL-runtime gebruikt deze grafiek om de query op te lossen. De GraphQL-specificatie definieert een agnostische taal voor het uitdrukken van de typen en relaties van de gegevensgrafiek.

Verwante video's en zelfstudies over GraphQL in deze serie

Voorbeeldschema

Hier is een afgekort typeschema dat de vragen en de mutaties steunt u tot dusver hebt bekeken:

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
}

U kunt in de documentatie van GraphQL{target=“_blank”} delven om over de details van het typesysteem, met inbegrip van syntaxis voor sommige concepten te leren hier niet vertegenwoordigd. Het bovenstaande voorbeeld spreekt echter voor zich. (Let ook op hoe vergelijkbaar de syntaxis is met query-syntaxis.) Het definiëren van een GraphQL-schema is eenvoudig een kwestie van het uitdrukken van de beschikbare argumenten en velden van een bepaald type, samen met de typen van die velden. Elk complex veldtype moet zelf een definitie hebben, enzovoort, door de structuur heen, totdat u eenvoudige scalaire typen krijgt, zoals String .

De declaratie input is in alle opzichten hetzelfde als een declaratie type , maar definieert een type dat kan worden gebruikt als invoer voor een argument. Noteer ook de declaratie interface . Dit dient een functie min of meer dezelfde als interfaces in PHP. Andere types erven van deze interface.

De syntaxis [CartItemInput!]! ziet er lastig uit, maar is uiteindelijk redelijk intuïtief. ! binnen verklaart de steun dat elke waarde in de serie niet-krachteloos moet zijn, terwijl één buiten verklaart dat de seriewaarde zelf niet-krachteloos (bijvoorbeeld, een lege serie) moet zijn.

NOTE
De logica voor hoe gegevens worden opgehaald en volgens een schema worden opgemaakt, en hoe dergelijke logica aan bepaalde types in kaart wordt gebracht, is tot de runtime van GraphQL implementatie. Implementaties moeten echter een conceptuele flow volgen die zinvol is in het licht van een begrip van geneste velden: er wordt een bewerking voor het oplossen van problemen uitgevoerd die aan het root Query - of Mutation -type is gekoppeld, die elk veld onderzoekt dat in de aanvraag is opgegeven. Voor elk gebied dat aan een complex type oplost, wordt een gelijkaardige oplossing gedaan voor dat type, etc., tot alles in scalaire waarden heeft opgelost.

Handige GraphQL-bronnen

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