7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

品川Advent Calendar 2019

Day 4

「初めてのGraphQL」を読んだので理解したことをまとめてみた

Posted at

本投稿は 品川Advent Calendar 2019 の4日目です。

初めてのGraphQL を読んだので、理解したことや試したことを書いています。

GraphQLとは?

色々な記事が既に投稿されているので、ざっくり説明です。

  • Web APIの1つ
  • REST APIの課題を解決するために考案および開発された
  • グラフ理論(無向グラフとか有向グラフとかのあれです)の知見を活用(しているらしい)
  • FacebookGithubの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の問い合わせ(クエリ)を試してみる

お試しできる環境

現状の所感

  • API利用者としては、目的のデータにすぐにアクセスできるのでGood!
  • 構造的な問い合わせができること、スキーマを考慮したデータの授受ができることは、元DBエンジニアの自身個人としてはしっくりくる

まとめ

今回はAPI利用者目線で理解したこと、試したことを書いていますが、今後はAPI開発者目線やAPI管理などの目線で色々試してみたいと考えています。

APIマネジメント製品でどう管理していくのかも調査してみたい。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?