本投稿は 品川Advent Calendar 2019 の4日目です。
初めてのGraphQL を読んだので、理解したことや試したことを書いています。
GraphQLとは?
色々な記事が既に投稿されているので、ざっくり説明です。
- Web APIの1つ
- REST APIの課題を解決するために考案および開発された
- グラフ理論(無向グラフとか有向グラフとかのあれです)の知見を活用(しているらしい)
- Facebook や GithubのAPIバージョン4 のAPIで採用されている
- SQLっぽいクエリでAPI呼び出しを行う
REST APIの課題
REST APIの発展により、昨今、目的のデータに辿り着くのが難しくなっているのが課題のようです。
- レスポンスに不要なデータが含まれており、通信時間やアプリケーション上での処理コストが高くなってしまう
- レスポンスが何百行にもなっていたりネストがやたら深かったりして、目的のデータに辿り着くのに時間がかかった経験はありませんか?
- レスポンスに必要なデータが含まれておらず、他のいくつかのAPIを呼び出さないと目的のデータが取得できない
- APIが細分化されているせいで、目的のデータを取得するためにわざわざシリアルで複数のAPIを利用した経験はありませんか?
GraphQLによるREST APIが持つ課題の解決
上で挙げたREAT APIの課題解決のために、GraphQLはこんな感じで目的のデータを取得できます。
# ID:5 の人の名前、身長、体重、住所(国のみ)を取得
query {
person(personID:5){
name
height
weight
address {
country
}
}
}
# レスポンスデータ
{
"data": {
"person": {
"name": "taro",
"height": 170,
"weight": 70,
"address": {
"country": "Japan"
}
}
}
}
REST APIだと、レスポンスに性別や全ての住所といったデータが返ってくるように設計されていることが多いと思いますが、GraphQLだと目的のデータだけを指定して取得することが可能です。
GraphQLの問い合わせ(クエリ)を試してみる
お試しできる環境
- SWAPI スターウォーズAPI
- Github API 要ログイン
- snowtooth 架空のスキー場のGraphQL APIを試せる環境
- GraphQLのクエリを基礎から整理してみた にクエリ種別の説明やクエリを試した結果が記載されており、参考になります
- その他いろいろ
現状の所感
- API利用者としては、目的のデータにすぐにアクセスできるのでGood!
- 構造的な問い合わせができること、スキーマを考慮したデータの授受ができることは、元DBエンジニアの自身個人としてはしっくりくる
まとめ
今回はAPI利用者目線で理解したこと、試したことを書いていますが、今後はAPI開発者目線やAPI管理などの目線で色々試してみたいと考えています。
APIマネジメント製品でどう管理していくのかも調査してみたい。