Schema-språk
Detta är en del av 4 av serien för GraphQL och Adobe Commerce. De frågor och mutationer som används är beroende av att ett specifikt datagraf implementeras på servern, som används och används av GraphQL för att lösa frågan. GraphQL-specifikationen definierar ett agnostiskt språk för att uttrycka datagrafens typer och relationer.
Relaterade videor och självstudiekurser om GraphQL i den här serien
Exempelschema
Här är ett förkortat typschema som stöder de frågor och mutationer du har tittat på hittills:
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
}
Du kan ta bort GraphQL-dokumentationen om du vill veta mer om typsystemet, inklusive syntax för vissa koncept som inte finns representerade här. Ovanstående exempel är dock självförklarande. (Observera också hur likartad syntaxen är för att fråga efter syntax.) Att definiera ett GraphQL-schema är helt enkelt en fråga om att uttrycka tillgängliga argument och fält av en viss typ, tillsammans med fälttyperna. Varje komplex fälttyp måste ha en definition, och så vidare, genom trädet tills du kommer till enkla skalära typer som String
.
Deklarationen input
fungerar i alla avseenden som en type
men definierar en typ som kan användas som indata för ett argument. Observera även deklarationen interface
. Detta fungerar ungefär på samma sätt som gränssnitt i PHP. Andra typer ärver från det här gränssnittet.
Syntaxen [CartItemInput!]!
ser besvärlig ut men är i slutändan ganska intuitiv. !
inuti hakparentesen deklarerar att alla värden i arrayen måste vara icke-null, medan den utanför deklarerar att själva matrisvärdet måste vara icke-null (till exempel en tom array).
Query
eller Mutation
utförs, som undersöker varje fält som anges i begäran. För varje fält som tolkas till en komplex typ utförs en liknande matchning för den typen, och så vidare, tills allt har lösts in i skalära värden.