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