前回より、GraphQLに入門しています。
今回は、下記のApollo Serverの公式チュートリアルに取り組みます。
Get started with Apollo Server - Apollo GraphQL Docs
型の定義
APIで扱う型を定義します。
type Book { title: String author: String } type Query { books: [Book] }
type Book
は書籍のタイトル(title
)と著者(author
)を持つ型です。
REST APIにおけるリソースであり、多くはDBのテーブルで管理されるようなものです。
type Query
は、APIでのリクエスト方法を表します。
REST APIにおいては /books
というエンドポイントを定義しているイメージです。
JS上は、下記のように定義します。
const typeDefs = gql` type Book { title: String author: String } type Query { books: [Book] } `;
型の詳しい説明は、下記のページで参照できます。
GraphQL schema basics - Apollo GraphQL Docs
Resolversの定義
GraphQLではこれをResolversと言います。
const books = [ { title: 'The Awakening', author: 'Kate Chopin', }, { title: 'City of Glass', author: 'Paul Author', }, ]; const resolvers = { Query: { books: () => books, }, };
const books
は、ただのデータ管理用の配列です。本来はDBなどで管理するものですが、今回は簡易にメモリ管理することにします。
const resolvers
がResolversの本体です。
「型定義」で用意したtype Query
と構造が対応しています。
Resolversの詳しい情報は、下記より参照できます。
Resolvers - Apollo GraphQL Docs
サーバの初期化・起動
先に用意した型とResolversを利用して、GraphQLサーバを初期化します。
const server = new ApolloServer({ typeDefs, resolvers, });
最後に、サーバを起動します。
server.listen().then(({ url }) => { console.log(`🚀 Server ready at ${url}`); });
動作確認
実際に動かしてみます。
まずはサーバを起動します。
node index.js
# リクエスト curl --request POST \ --header 'content-type: application/json' \ --url http://localhost:4000/ \ --data '{"query":"query { books { title }}"}' | jq # レスポンス { "data": { "books": [ { "title": "The Awakening" }, { "title": "City of Glass" } ] } }
事前に定義した const books
の内容が返却されています。
開発者ツール
次に、開発者ツールにアクセスしてみます。
ブラウザで http://localhost:4000 を開きます。
「Query your server」のボタンをクリックします。
Operation
というConsoleで下記のようにクエリを記述します。
query GetBooks { books { title author } }
GetBooks という実行ボタンが表示されるので、これをクリックすると、Responseが表示されます。
Pull Request
https://github.com/nek0meshi/graphql-learn/pull/2
あとがき
GraphQLの概要がわかりました。