概要
GraphQLとはクエリ言語でAPIを作成する方法について紹介です。GraphQLはクエリ型のAPIです。
APIを通信する方法は主に3種類ありますがマイナーな方法です。今回はGo言語で構築するGraphQLのライブラリの紹介と使い方を記事にします。
目次
GraphQLとは
Facebookが開発したAPIを作成する手段です。クエリ言語で、データの入出力や参照したいデータに命令文を書くことで取得することができます。
GraphQLについての参考本
GraphQLのメリット・デメリット
GraphQLのメリット
URLは一つでいいです。REST APIではエンドポイントを目的ごとに変えますが、一つのURLにアクセスしそこでクエリを投げることで欲しい情報を取得することができます。
まだまだ、利用者が少ないので今のうちにGraphQLをマスターしておくと先行者利益的な物を手に入れることが可能です。
GraphQLのデメリット
クエリでデータ取得するんだったらSQLでいいじゃないかという意見もあります。わざわざサーバーサイドでSQLを使ってデータを取得してさらにフロントでもクエリを発行するという2重に複雑です。
さらにいうとWebAPIがRestやgRPCもあるので学習コストが高くなります。
Go言語のGraphQLおすすめライブラリ gqlgen
gqlgenとは
gqlgenはGraphQLのメジャーなライブラリの一つです。リクエストレスポンスなどのスキーマ定義をgqlgenの形式で記載すれば自動でコードをジェネレートしてくれます。
gqlgenのサンプルと操作方法
GraphQLを利用するにあたってGo言語のおすすめのライブラリはgqlgenはです。定義をgqlgenのファイルに定義するとGo言語で使えるように自動的にコードをジェネレートしてくれます。ジェネレートされたコードを参照してGo言語で作成すると作成がスムーズにできます。
gqlgenのサンプルコードを作成しましたので以下のgithub URLに配置しています。
https://github.com/yoshis2/gql-example
インストールから起動までの説明をします。
コードダウンロード
$ cd gql-example
コンパイル
起動
起動すると以下のURLにアクセス
http://localhost:8083
ResolverとgraphQLがすべて
graphQLのコマンド3種類
- mutation
- query
- fragment
mutation
create,update,deleteのコマンドの時はmutationの宣言をします。
query
selectといったデータの出力系はqueryの宣言をします。
fragment
共通のクエリーがあった場合同じことを何度も書くのではなく一つにまとめることができます。
チュートリアルコード
以下のコマンドをクエリ画面に入力すると実行することができます。
インサートのクエリ
mutation createTodo { createTodo(input:{text:"add user test", userId:"1"}) { user { id name } text done } }
参照のクエリ
query listTodo { todos{ id text done user{ id name } } }
コードを変更するのはresolverとgraphQLの2種類のコードのみで後は自動で作成してくれます。
まとめ
BFF(Backend for Frontend)の操作で使うことが今後増えてくるでしょう。REST APIならAPIゲートウェイでマイクロサービスで作成したAPIを統合することができます。
マイクロサービス での開発が増えてきており、gPRCでAPIを作成している人はGraphQLをBFFで開発していくことになるでしょう。