100% ローカル — データがブラウザの外に出ることはありません

JSONをGraphQLに変換|schemaファイルに貼れるSDLに

JSONのサンプルをGraphQLのSDL型に変換します。入れ子のオブジェクトも独立した型になるので、schema.graphql に貼ってすぐ問い合わせを書けます。

高速 プライベート Cookieゼロ

JSON 入力

GraphQL 出力

このツールの動作

JSON の標本が GraphQL の SDL 型になります。オブジェクト一つにつき一つです。

{ "id": 1, "name": "Ada", "tags": ["admin"], "address": { "city": "Paris" } }
type Root {
  id: Int!
  name: String!
  tags: [String!]!
  address: Address!
}

type Address {
  city: String!
}

[String!]! は外から内へ読みます。並び自体が null にならず、要素も null になりません。どちらも標本から来ています。並びがあり、その中に文字列がありました。

型だけ——これはまだ図式ではない

Query も Mutation も指令もありません。JSON の荷が語るのはデータの姿であって、サーバがどの項目を、どんな名前で公開するかではありません。入り口はご自分で足してください。

type Query {
  root: Root!
}

それが無ければ、この文書は誰にも尋ねられない型を述べているだけです。

SDL が言えないことは、名指しする。偽らない

  • null と型の分からない値は独自スカラー JSON になります。先頭で宣言し、実装はあなたに委ねます。SDL に「何でも」の型はありません。
  • 型の混ざった配列は同じ理由で [JSON]! になります。形の混ざった並びは GraphQL の並び型ではありません。
  • 32 ビットに収まらない整数は、もう一つの独自スカラー BigInt になります。GraphQL の Int は符号付き 32 ビットなので、十一桁の識別子は表せず、それを返すサーバは直列化で例外を投げます。以前はそれでも Int! でした。本物の欠陥で、この文章を書く過程で見つけ、直しました。
  • 空のオブジェクトは拒みます。 type A {} は妥当な SDL ではありません。型は少なくとも一つの項目を定義しなければならないからです。どのサーバも解析しない図式を渡すかわりに、変換は止まり、その型を名指しします。これもここで見つけ、直しました。

名前は繕い、衝突は分ける

GraphQL の名前に使えるのは英字、数字、_ だけで、数字では始まりません。content-type は content_type に、2fa は _2fa になります。繕った名前が同じ型の中でぶつかったら、二つ目に番号を付けます。黙って混ぜることはしません。

根が数値や文字列——42、"テキスト"——のときは拒みます。SDL が述べるのはオブジェクトの型であり、そこには述べるものがありません。

プライバシー

すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。

よくある質問

なぜ `Query` 型がないのですか。
標本が述べるのはデータであって、入り口ではないからです。出力は図式のうち型の部分です。サーバにはさらに、公開する項目を並べた `Query`(多くは `Mutation` も)が要ります。`type Query { root: Root! }` を足せば供せる図式になります。そこに何を置くかは API の判断で、荷が述べる事実ではありません。
十一桁の識別子が `Int` ではなく `BigInt` になりました。なぜですか。
GraphQL の `Int` が符号付き 32 ビットで、あなたの値が入らないからです。以前はそれでも `Int!` と書いており、出どころの標本に対してすら図式が誤っていました。graphql-js は直列化の時点で例外を投げます。32 ビットの外では `BigInt` という独自スカラーを使い、先頭で宣言します。中身はあなたが実装します。
なぜどれにも `!` が付くのですか。
標本がどの項目にも値を持っていたからで、`!` は「ここに値がある」を SDL で書いた形です。文書が支える主張です。一般にその項目が null になりうるかは API の判断です。そうであるところの `!` は外してください。

関連ツール