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"
    }
  }
}