GraphQLは「クエリ言語」と「スキーマ言語」の二つに分かれます。
- クエリ言語
- スキーマ言語
クエリ言語
フロント側、リクエスト。ルート型で始まる。これを使うことでデータソースへのアクセスができます。
ルート型
query
データ取得系、GET
引数なし
1 2 3 |
query { リゾルバ関数名 } |
引数あり
1 2 3 |
query { リゾルバ関数名(引数1: xxx, 引数2: yyy) } |
mutation
データ更新系、POST/PUT/DELETE
subscription
サーバーサイドからのイベント通知、Websocket
スカラー型
5種類あります。それぞれのデータ型は角括弧で囲うことによってリストとして定義することは可能です。また、nullになる可能性があるフィールドは!(エクスクラメーションマーク)をつけます。
String
文字列型、JSONではstring
Int
整数型、JSONではnumber
Float
浮動小数点型、JSONではnumber
Boolean
論理型
ID
ID型、JSONではstring
スキーマ言語(SDL)
サーバー側、レスポンス、GraphQLのAPI仕様を記述するための言語
クエリ言語からのリクエストはスキーマ言語で記述したスキーマに沿ってGraphQL処理系により実行されて、データグラフ構造のレスポンスを返す。
フレームワークや言語に依存せずに定義できるのが特徴
スキーマ言語はあくまで仕様の定義に徹するものであり、実際のデータ操作は行わない。
スキーマ定義
クライアント側から操作できるクエリを事前に定義します。
リゾルバ関数
実際のデータを操作を行う関数(メソッド)のこと。スキーマ定義をしたら必ずそれに対応するリゾルバ関数を作成する必要があります。(この例でいえば、helloというスキーマを定義したので、helloというリゾルバ関数を定義しています。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
const express = require("express"); const { graphqlHTTP } = require("express-graphql"); const { buildSchema } = require("graphql"); // スキーマ定義 const schema = buildSchema(`type Query {hello:String}`); // リゾルバ関数 const root = { hello: () => { return "Hello world!"; }, }; app.use( "/graphql", graphqlHTTP({ schema: schema, rootValue: root, graphiql: true }) ); |
この記事へのコメントはありません。