結構描述語言

這是GraphQL和Adobe Commerce系列的第4部分。 使用的查詢和變動取決於在伺服器上實作的特定資料圖表,GraphQL執行階段會使用這個圖表並用來解決查詢。 GraphQL規格定義了不可知的語言,用於表示資料圖表的型別和關係。

本系列中GraphQL的相關影片和教學課程

結構描述範例

以下是支援您目前已檢視之查詢和變動的縮寫型別結構描述:

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
}

您可以深入瞭解 GraphQL檔案 瞭解型別系統的詳細資訊,包括此處未表示的一些概念的語法。 然而,上述範例不言自明。 (此外,請注意語法與查詢語法的相似程度。) 定義GraphQL結構描述只是表示給定型別的可用引數和欄位以及這些欄位的型別的問題。 每個複雜欄位型別本身都必須有定義,以此類推,透過樹狀結構,直到您取得簡單的純量型別,例如 String.

input 宣告在所有方面就像是 type 但會定義可以做為引數輸入的型別。 另請注意 interface 宣告。 此功能與PHP中的介面大致相同。 其他型別會繼承自此介面。

語法 [CartItemInput!]! 看起來很棘手,但最後還是相當直覺的。 此 ! 裡面 方括弧會宣告陣列中的每個值都必須非空值,而 外部 宣告陣列值本身必須為非空值(例如,空陣列)。

NOTE
如何根據結構描述擷取及格式化資料,以及如何將這類邏輯對應至特定型別的邏輯,取決於GraphQL執行階段實施。 但是,根據對巢狀欄位的瞭解,實施應遵循合理的概念流程:與根關聯的解決操作 QueryMutation 執行型別,會檢查請求中指定的每個欄位。 對於每個解析為複雜型別的欄位,會對該型別進行類似的解析,以此類推,直到所有內容都解析為純量值為止。

有用的GraphQL資源

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