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

NOTE
Logiken för hur data hämtas och formateras enligt ett schema, och hur sådan logik mappas till särskilda typer, är upp till implementeringen av GraphQL runtime. Implementeringar bör emellertid följa ett konceptuellt flöde som är rimligt mot bakgrund av en förståelse kring kapslade fält: En matchningsåtgärd som är associerad med roten 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.

Användbara GraphQL-resurser

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