GraphQLを使用したイントロスペクションクエリ
GraphQLを使用すると、イントロスペクションクエリを実行して、利用可能なフィールドとGraphQLスキーマのタイプについて学習できます。 そのイントロスペクション機能は、GraphiQLにスキーマとオートコンプリートに関するドキュメントを提供する機能を提供するものでもあります。
Star Wars SWAPI public API エンドポイントを使用して、いくつかのイントロスペクションクエリを実行してみましょう。
__タイプ
まず、組み込みの __ type を使用して、フィルムタイプについて問い合わせるクエリを実行しましょう。
query FilmType {
__type(name: "Film") {
kind
name
fields {
name
description
type {
name
}
}
}
}
- Kind は、OBJECT、SCALAR、INTERFACEなどのタイプの列挙値を提供します。
- Name は、タイプの名前を示します。
- 説明、まあ、説明を教えてください!
そして、応答は次のようになります。
{
"data": {
"__type": {
"kind": "OBJECT",
"name": "Film",
"fields": [
{
"name": "title",
"description": "The title of this film.",
"type": {
"name": "String"
}
},
{
"name": "episodeID",
"description": "The episode number of this film.",
"type": {
"name": "Int"
}
},
...
ここでは、組み込みの __ type (タイプ__Type)を使用して、特定のオブジェクトまたはインターフェースのタイプに関する情報を取得していることに注意してください。
フラグメントを使用して特定のタイプについてさらに学習する別の例を次に示します。
query LearnAboutFilm {
__type(name: "Film") {
...AboutType
}
}
fragment AboutType on __Type {
fields {
name
description
args {
name
description
}
}
interfaces {
name
description
}
inputFields {
name
description
}
possibleTypes {
kind
name
fields {
name
description
type {
kind
name
description
}
}
}
}
__スキーマ
__ schema を使用すると、サーバーにスキーマ自体について問い合わせることができます。 例を見てみましょう:
query LearnAboutSchema {
__schema {
types {
name
kind
}
queryType {
fields {
name
description
}
}
}
}
そして応答:
{
"data": {
"__schema": {
"types": [
{
"name": "Root",
"kind": "OBJECT"
},
{
"name": "String",
"kind": "SCALAR"
},
{
"name": "Int",
"kind": "SCALAR"
},
...
"queryType": {
"fields": [
{
"name": "allFilms",
"description": null
},
{
"name": "film",
"description": null
},
...
__typename
__ typename は、特定のフィールドのタイプについて問い合わせるための通常のクエリの一部として使用できます。
query LearnAboutFilm {
allFilms {
films {
__typename
title
}
}
film (id: "ZmlsbXM6Mw==") {
__typename
title
}
starship(id: "c3RhcnNoaXBzOjc1") {
__typename
name
model
}
}
そして、これが応答です:
{
"data": {
"allFilms": {
"films": [
{
"__typename": "Film",
"title": "A New Hope"
},
{
"__typename": "Film",
"title": "The Empire Strikes Back"
},
...
]
},
"film": {
"__typename": "Film",
"title": "Return of the Jedi"
},
"starship": {
"__typename": "Starship",
"name": "V-wing",
"model": "Alpha-3 Nimbus-class V-wing starfighter"
}
}
}