本文へスキップ

JSONデータをGraphQLスキーマに変換 — Numio

サンプル JSON から GraphQL SDL のオブジェクト型を生成します。ルートは AutogeneratedMainType になり、ネストしたオブジェクトやオブジェクトの配列はそれぞれ名前付きの型になります。配列の全要素は 1 つの型にマージされます。

既存の REST エンドポイントのレスポンスから、それをラップする GraphQL の型を下書きする。

JSON

GraphQL

こんなときに使えます

  • 既存の REST エンドポイントのレスポンスから、それをラップする GraphQL の型を下書きする。
  • サンプルデータから、モックサーバーやスキーマファーストのプロトタイプ用の初期スキーマを得る。

使い方

  1. JSON オブジェクト、または 1 つのルート型にマージされるオブジェクトの配列を左側のエディターに貼り付けるか、ファイル読み込みボタンで UTF-8 のファイルを開きます。
  2. 生成された型を確認します。型名はキーから付けられ(posts は Posts)、スカラーは String、Int、Float、Boolean に対応します。
  3. SDL をコピーし、必須フィールドに ! を付け、id フィールドを ID に変え、AutogeneratedMainType の名前を変更します。

JSON オブジェクト

{
  "id": "u_1",
  "name": "Ada",
  "age": 36,
  "score": 9.5,
  "nickname": null,
  "tags": ["math"],
  "address": { "city": "London" },
  "posts": [{ "id": 7, "title": "Notes" }]
}

GraphQL スキーマ(SDL)

type AutogeneratedMainType {
  id: String
  name: String
  age: Int
  score: Float
  nickname: String
  tags: [String]
  address: Address
  posts: [Posts]
}

type Address {
  city: String
}

type Posts {
  id: Int
  title: String
}

仕様と制限

フィールドは配列の全要素にわたってマージされます。null と空配列は String と [String] になり、Int と Float が混在すると Float、それ以外の衝突は String にフォールバックします。

型名はキーから付けられます(posts は Posts)。同じキーに形の異なるオブジェクトがある場合、後のものは上書きせず親の名前を付けた型(例:AB)になります。

!(非 null)、ID、Query 型、input 型は生成されません。GraphQL の Int は 32 ビットのため、32 ビットの範囲外の整数は Float になります。

ブラウザ内で動作し、結果は Prettier で整形されます。不正な JSON の場合は解析エラーが表示されます。

FAQ

ルートが JSON 配列でも変換できますか?

オブジェクトの配列なら可能です。全要素が AutogeneratedMainType にマージされるため、一部の要素にしかないフィールドも含まれます。単純な値だけのルート配列はフィールドがないため拒否されます。

id フィールドが ID ではなく String になるのはなぜですか?

型は JSON の値だけから決まります。文字列の id は String、数値は Int になります。手動で ID: に変更してください。

null 値の型はどうなりますか?

null 値は型の情報を持たないため String になります。フィールドが数値やオブジェクトなら、実際のサンプル値に置き換えてください。

仕様を確認する