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クエリイントロスペクションシステムを実装するコードが含まれています。