スキーマ言語
これは、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!]!
は難しそうに見えますが、最終的にはかなり直感的です。 !
内 角括弧 は、配列内のすべての値を null 以外にする必要があることを宣言し、一方 外 は、配列値自体を null 以外にする必要があることを宣言しています(空の配列など)。
Query
イプまたは Mutation
タイプに関連付けられた解決操作が実行され、リクエストで指定された各フィールドが調べられます。 複合タイプに解決されるフィールドごとに、そのタイプに対して同様の解決が行われ、すべてがスカラー値に解決されます。