スキーマ言語
これは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!]!は難しそうに見えますが、最終的にはかなり直感的です。 ブラケットの! insideは、配列内のすべての値がnullでないことを宣言し、一方、outsideは、配列値自体がnullでないことを宣言します(空の配列など)。
NOTE
スキーマに従ってデータを取得およびフォーマットする方法、およびそのようなロジックを特定のタイプにマッピングする方法に関するロジックは、GraphQL ランタイム実装に依存します。 ただし、実装は、ネストされたフィールドに関する理解に照らして意味のある概念的なフローに従う必要があります。ルート
QueryまたはMutation タイプに関連付けられた解決操作が実行され、リクエストで指定された各フィールドが調べられます。 複雑な型に解決される各フィールドに対しては、すべてがスカラー値に解決されるまで、その型に対して同様の解決が行われます。3a5f7e19-f383-4af8-8983-d01154c1402f