GraphQLスキーマに、サポートされているクエリに関する情報を問い合わせることがしばしば役立ちます。GraphQLは、イントロスペクションシステムを使用してこれを行うことができます。!
Star Warsの例では、ファイルstarWarsIntrospection-test.tsに、イントロスペクションシステムを示す多くのクエリが含まれており、参照実装のイントロスペクションシステムを試すために実行できるテストファイルです。
私たちは型システムを設計したので、利用可能な型を知っていますが、そうでない場合、クエリタイプのルートタイプで常に利用可能な__schema
フィールドをクエリすることで、GraphQLに問い合わせることができます。それでは、利用可能な型を問い合わせてみましょう。
すごい、たくさんの型がありますね。!それらは何でしょう?グループ分けしてみましょう。
さて、利用可能なクエリを探求する良い出発点を見つけ出してみましょう。型システムを設計したとき、すべてのクエリが開始する型を指定しました。イントロスペクションシステムにそれについて問い合わせてみましょう。!
そして、それは型システムのセクションで述べたこと、つまりQuery
型が開始点であることと一致します。!ここで名前付けは単なる慣例によるものです。Query
型を他の名前にすることもできますでしたが、クエリを開始する型として指定していれば、それでもここで返されていたでしょう。しかし、Query
と名付けることは便利な慣例です。
特定の型を調べることはしばしば役立ちます。Droid
型を見てみましょう。
しかし、Droidについてもっと知りたい場合はどうでしょうか?例えば、インターフェースですか、それともオブジェクトですか?
kind
は__TypeKind
列挙型を返し、その値の1つはOBJECT
です。代わりにCharacter
について問い合わせると、それがインターフェースであることがわかります。
オブジェクトでは利用可能なフィールドを知ることは役立つので、イントロスペクションシステムにDroid
について問い合わせてみましょう。
それらはDroid
で定義したフィールドです!
id
は少し奇妙に見えます。型の名前がありません。これは、NON_NULL
という種類の「ラッパー」型だからです。そのフィールドの型に対してofType
をクエリすると、そこにID
型が見つかり、これが非NULLのIDであることがわかります。
同様に、friends
とappearsIn
のどちらも、LIST
ラッパー型であるため名前がありません。これらの型に対してofType
をクエリできます。これにより、これらのリストの内容がわかります。
ツールにとって特に便利なイントロスペクションシステムの機能で終わりましょう。システムにドキュメントを問い合わせてみましょう。!
そのため、イントロスペクションを使用して型システムに関するドキュメントにアクセスし、ドキュメントブラウザや豊富なIDEエクスペリエンスを作成できます。
これはイントロスペクションシステムの表面をなぞったにすぎません。列挙値、型が実装するインターフェースなどをクエリできます。イントロスペクションシステム自体についてもイントロスペクションを行うことができます。「イントロスペクション」セクションで仕様書はさらに詳しく説明しており、introspectionファイルには、仕様に準拠したGraphQLクエリイントロスペクションシステムを実装するコードが含まれています。