Client 側 GraphQL クエリについて備忘録
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 .