本文へスキップ

GraphQLからのIntrospection JSON — Numio

@graphql-codegen/introspection を使って、GraphQL SDL を標準の introspection クエリの JSON 結果に変換します。出力にはトップレベルの __schema オブジェクトがあり、ルート型、組み込みを含むすべての型、ディレクティブが入ります。

一部の IDE プラグインやクライアントジェネレーターなど、SDL ではなく introspection JSON を求めるツール向けに schema.json を作る。

GraphQL Schema

Introspection JSON

こんなときに使えます

  • 一部の IDE プラグインやクライアントジェネレーターなど、SDL ではなく introspection JSON を求めるツール向けに schema.json を作る。
  • introspection データの中で、フィールドの型が NON_NULL や LIST の kind でどうラップされるかを確認する。

使い方

  1. GraphQL Schema エディターにスキーマの SDL を貼り付けます。
  2. Introspection JSON パネルに JSON が出るのを待ちます。フィールドが 1 つのスキーマでも約 1,000 行になります。
  3. JSON をコピーまたはダウンロードし、schema.json などとして保存します。

GraphQL スキーマ

type Query {
  hello(name: String): String!
}

Introspection JSON

{
  "__schema": {
    "queryType": {
      "name": "Query"
    },
    "mutationType": null,
    "subscriptionType": null,
    "types": [
      {
        "kind": "OBJECT",
        "name": "Query",
        "description": null,
        "fields": [
          {
            "name": "hello",
            "description": null,
            "args": [
              {
                "name": "name",
                "description": null,
                "type": {
                  "kind": "SCALAR",
                  "name": "String",
                  "ofType": null
…

仕様と制限

組み込みスカラー(String、Boolean)、introspection 型(__Schema、__Type、__Field など)、組み込みディレクティブ(include、skip、deprecated、specifiedBy)は常に含まれます。

JSON は "data" キーで包まれておらず、__schema から直接始まります。

変換はブラウザの Web Worker で実行されます。このページが受け取るのはスキーマだけで、稼働中のエンドポイントにはクエリしません。

FAQ

URL から introspection JSON を取得できますか?

できません。ページは貼り付けた SDL を変換するだけで、サーバーに introspection クエリを送りません。先にサーバーから SDL をエクスポートして、ここに貼り付けてください。

非推奨のフィールドも含まれますか?

含まれます。すべてのフィールドと enum 値に isDeprecated と deprecationReason が付くため、@deprecated のフィールドは isDeprecated: true として現れます。

小さなスキーマなのに出力が大きいのはなぜですか?

introspection 結果は、自分で定義した型だけでなく、組み込みスカラー、introspection のメタ型、ディレクティブ定義を含む型システム全体を記述するためです。

仕様を確認する