Client 側で実行する GraphQL のクエリ文についての備忘録。
そもそも GraphQL については、以下のサイトにて簡単に学習。
基本
構造
以下のような構造のクエリを、POST Request で投げることになります。
OPERATION_TYPE OPERATION_NAME(VARIABLE_DEFINITIONS) { ALIAS: ROOT_FIELD(ARGUMENTS) { ALIAS: FIELD ALIAS: FIELD } }
operation type
operation | detail |
---|---|
query | GraphQL サーバーからデータを取得 |
mutation | GraphQL サーバー上でデータを作成または変更 |
subscription | リアルタイムの更新を設定するために使用 サーバー上で特定のイベントが発生するたびに、クライアントアプリケーションが更新を受け取ることを可能にする |
実践
以下の資料を参考に、Query オペレーションを何点か実行してみます。
アクセス先の GraphQL のサーバーには、以下の Public API を利用します。
基本
query=$( cat <<EOF { "query": "query Basic { country(code: \"BR\") { name currency languages { code name } } }" } EOF ) curl -s "https://countries.trevorblades.com/" \ -H "Content-Type: application/json" \ -X POST \ --data "$(echo "$query" | tr -d '\n')" | jq .
レスポンス。
{ "data": { "country": { "name": "Brazil", "currency": "BRL", "languages": [ { "code": "pt", "name": "Portuguese" } ] } } }
変数の利用
query=$( cat <<EOF { "query": "query Variable(\$code: ID!) { country(code: \$code) { name currency languages { code name } } }", "variables": { "code": "BR" } } EOF ) curl -s "https://countries.trevorblades.com/" \ -H "Content-Type: application/json" \ -X POST \ --data "$(echo "$query" | tr -d '\n')" | jq .
Aliases
Alias 部分に値を指定すると、レスポンスの key 名を変更できます。
query=$( cat <<EOF { "query": "query Basic { hogehoge: country(code: \"BR\") { name currency } gomogomo: country(code: \"US\") { name TSUKA: currency } }" } EOF ) curl -s "https://countries.trevorblades.com/" \ -H "Content-Type: application/json" \ -X POST \ --data "$(echo "$query" | tr -d '\n')" | jq .
レスポンス。
{ "data": { "hogehoge": { "name": "Brazil", "currency": "BRL" }, "gomogomo": { "name": "United States", "TSUKA": "USD,USN,USS" } } }
Filtering
レスポンスをフィルタリングできます。実装されている GraphQL サーバーに応じて利用できるフィルタに制限があるため、アクセス先 API の情報を参照して、何が利用できるか確認する必要があります。
query=$( cat <<EOF { "query": "query Basic { countries(filter: { currency: { eq: \"USD\" }}) { name currency languages { code name } } }" } EOF ) curl -s "https://countries.trevorblades.com/" \ -H "Content-Type: application/json" \ -X POST \ --data "$(echo "$query" | tr -d '\n')" | jq .