GraphQLクエリの変数名と型を抽出
このGraphQL変数抽出ツールは、実行可能文書の構文を検査し、各クエリ、ミューテーション、サブスクリプションで宣言された変数を一覧化します。操作種別、任意の操作名、変数名、リストや非Null指定を含む正確な型表記を維持します。入力フォームの生成、クライアント操作のレビュー、連携仕様の文書化、実行前のクエリ確認にご利用いただけます。
無料で実行
宣言と参照を区別できます
GraphQL変数には、操作名の横にある<code>$id: ID!</code>のような宣言と、選択セット内の<code>user(id: $id)</code>のような参照があります。本機能が返すのは宣言だけです。所有するクエリ、ミューテーション、サブスクリプションごとにまとめるため、別の操作で同じ変数名を宣言しても混在しません。<code>String</code>、<code>ID!</code>、<code>[ID!]!</code>などの型表記はそのまま保持されます。既定値とディレクティブは構文確認のため解析しますが、結果には含めません。フラグメントも検査しますが、操作変数を宣言できないため出力項目は作りません。匿名の短縮クエリは、名前がなく変数一覧が空のクエリ操作として表示されます。
決定的な構文検査を行えます
正規表現による抽出は、コメント、文字列、ブロック文字列、入れ子のリスト、オブジェクト既定値、ディレクティブ、フラグメント、別名、複数操作があると不正確になります。このパーサーは文書全体をトークン化し、GraphQLの実行可能文書文法に従います。閉じていない文字列、不正な数値、予期しない文字、空の選択セット、不完全な定義を拒否します。そのため、ビルドの早い段階で確実な検査として使用できます。ネットワークやスキーマは参照しません。サーバーにフィールドが存在するか、変数型が引数に適合するか、スキーマ依存規則を満たすかは判定できません。構文と宣言の抽出後、スキーマがある場合は別工程で検証してください。
構造化された結果を組み込めます
応答には文書順の<code>operations</code>配列と合計<code>variable_count</code>が含まれます。各操作には種別、記述されている場合の名前、<code>name</code>と<code>type</code>を持つ<code>variables</code>配列があります。この安定した形式は、入力エディター生成、管理中の操作比較、文書表の作成、新しい必須入力の検出に適しています。操作を分けることで、同名変数による誤った競合を防ぎます。処理を有限に保つため入力は200,000文字までです。クエリは実行せず、スキーマ、ヘッダー、認証情報、実行値も不要です。ブラウザーに貼り付けるか、1項目あたり$0.002でAPIをご利用ください。構文エラーでは問題のおおよその文字位置を返します。
活用例
変数フォームを作成
実行値を収集する前に宣言を読み取り、正しい名前の入力欄を生成できます。
永続化クエリをレビュー
管理中の操作が変更された際に、正確なGraphQL名と型を比較できます。
クライアント操作を文書化
複数操作の文書を種別ごとに整理した一覧へ変換できます。
よくある質問
GraphQLクエリを実行しますか?
いいえ。文書をローカルで解析し、GraphQLエンドポイントには接続しません。
変数の参照も含まれますか?
いいえ。操作で宣言された変数だけを返し、フィールドや引数内の参照は追加しません。
リストと非Nullの記号は保持されますか?
はい。ID!、[String!]、[ID!]!などの完全なGraphQL表記を保持します。
スキーマに対してフィールドを検証しますか?
いいえ。スキーマなしで構文を検査します。存在や型の互換性は別途検証してください。
複数の操作とフラグメントに対応しますか?
はい。操作は文書順で返し、フラグメントは検査しますが変数宣言には加えません。
API呼び出しの料金はいくらですか?
1項目あたり$0.002です。Web版では同じパーサーをローカル実行します。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/graphql-query-variables-extract \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"query FindUser($id: ID!, $withPosts: Boolean = false) { user(id: $id) { name posts @include(if: $withPosts) { title } } }"}'const res = await fetch("https://api.kit.forhosting.com/dev/graphql-query-variables-extract", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"query": "query FindUser($id: ID!, $withPosts: Boolean = false) { user(id: $id) { name posts @include(if: $withPosts) { title } } }"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/graphql-query-variables-extract",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"query": "query FindUser($id: ID!, $withPosts: Boolean = false) { user(id: $id) { name posts @include(if: $withPosts) { title } } }"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/graphql-query-variables-extract", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"query":"query FindUser($id: ID!, $withPosts: Boolean = false) { user(id: $id) { name posts @include(if: $withPosts) { title } } }"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"query":"query FindUser($id: ID!, $withPosts: Boolean = false) { user(id: $id) { name posts @include(if: $withPosts) { title } } }"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/graphql-query-variables-extract", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"query": "query FindUser($id: ID!, $withPosts: Boolean = false) { user(id: $id) { name posts @include(if: $withPosts) { title } } }"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.graphql_query_variables_extract",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_chars | 200000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |