今回は GraphQL の理解を深めたいと思います。
深掘りするというよりざっくりとした理解を深めたいという感じで、理解したことをまとめておこうという感じです。
ここで述べる内容に関しては、正しい理解ではない場合もあるかもしれませんので、あしからず。
概要
GraphQL is a query language for your API, and a server-side runtime for executing queries by using a type system you define for your data
GraphQLはAPI向けのクエリ言語でありランタイムということですね。
解決する課題
- 利用者が多くなり、利用者ごとにリソースの活用方法が多岐に渡るようになる
- リソースの活用方法を指定するREST APIでは利用者のニーズに応えるには限界がある
そんな文脈で GraphQL を採用すると幸せになれるのかなという印象です。
どのように解決するのか
- 利用者側がリソースの使い方を決められるような形のAPIとしてGraphQL APIが舞台に上がってきた
というわけですね。
留意点
- HTTPのメソッドやステータスコードによる挙動の予測ができなくなる
- RESTful API に慣れている場合には、メソッドやステータスコードで振る舞いを把握できていたところが、使い勝手が変わるという話ですかね
- 利用者側がクエリ実行のタイムアウト等を気にする機会が出てくる
- 良くも悪くもクエリを組み立てる利用者側がクエリ実行の負荷を一定程度考慮する余地が出てきたという感じなのでしょう
他にもリソース制限、キャッシュ、エラーハンドリング、モニタリング等の観点もありそうなので、その辺りも考慮して利用を検討したいところです。
感想
- 一定の課題を抱えている状態で、その課題を解決するための選択肢として採用を検討しているというタイミングで調べてみるとより深い点まで理解が進むかなと思いました
- 興味本位で趣味のアプリで採用してみれば、もう少し理解進むかも
- 使い勝手の理解は進むだろうけど、やはり規模のある本番運用で採用して運用してみると理解が進むような感じ
- RESTful API と比べるといろんな点で使い勝手が変わる感じなので、その辺を考慮して採用を検討すると良さそうと思いました
参考
- Introduction to GraphQL | GraphQL
- gqlgen
- hirokisan/sample-go-graphql
- goでgqlgenを使ってサーバーを立てて使用感というか雰囲気を感じてみました