LoginSignup
5
7

More than 5 years have passed since last update.

GraphQLを触って見た

Last updated at Posted at 2017-12-01

一発目なので、ここ最近検証したネタから行こうと思います!

最近 WebAPI の世界でRESTfulとGraphQLの話がよく出てきます。
GraphQLの説明はいろんな情報がネットにあるので、
実際に仕事などで感じた事と比較して書こうと思います。

RESTだと厳しくなってきた現状

  • API利用側の要件増加
  • 利用側がかならずしてもドメイン単位で、利用するとは限らない
  • 通信コスト増加 (一部データの利用しかなくても付随データが通信上にながれる)
  • endpointの増加 (要件ごとに増える)

スクリーンショット 2017-12-01 1.06.04.png

よく見られる現場での対応方法

  • endpointを増やす
  • endpointに必要になった段階で情報を増やす (マイクロサービスでなくなっていく。。。)
    • こっちの方が多そう

スクリーンショット 2017-12-01 1.06.18.png

外向けに公開しない場合は、正直そこまで綺麗に分ける必要もないと思いますが、
通信コストと技術的負債の加速的な影響がありそうなので、できればキレイにしたいとこです。

GraphQLとRESTfulの特徴の比較 (Queryのみ)

RESTful GraphQL
条件付与    GETパラメータ リクエストボディ(POST)
エンドポイント 複数 1つ
スコープ ドメイン単位 関連データすべて
キャッシュ responseキャッシュ データキャッシュ

[GitHub Developer] でexplorerが
利用できるので試してみるとイメージがつかみやすいと思います。

GraphQLを体感してみる

[GitHub Developer] でexplorerが
利用できるので試してみるとイメージがつかみやすいと思います。

実際のイメージ

rubyplusさんの記事をもとにサンプルを作ったので
画面で確認したいと思います。

記事につかったものはgithubにあげてあります。

階層がないパターン

単層.png

  • Query
    • [allPeople]内で欲しい情報を定義しています [id, fullName]
  • Response
    • Queryで指定した[field]の値のみが返ってきています
  • Document
    • Queryとして実行できるものが表示されています。

階層があるパターン

改層.png

  • Query
    • [allPeople]内で欲しい情報を定義しています [id, lastName]
    • [friends]で異なる情報を指定しています[fullName]
  • Response
    • Queryで指定した[field]の値のみが返ってきています
    • 階層化していした[friend]も指定した[field]の値のみが返ってきています.
  • Document
    • People(Person)で取得できる[field]を見ることができます

GraphQLを触って思ったこと

メリット

  • ドキュメントメンテしなくてよいので、運用や実装が楽
    • GraphQLのスキーマを定義するとExplorerで確認できる。
  • データアクセスが直観的で、ExplorerでQueryが試せるので開発効率がよさそう
  • スキーマ設定がプログラム指定なので、メンテが楽(XMLとかよりは)

デメリット (と言うか気になる点)

  • サーバーサイド実装がちょっと大変になるかも
  • Schema定義が肥大化しないアプローチは検討したい
  • キャッシュのアプローチを検討  (endpointが一つになるのでCDNが使えない??)
  • 見えてない課題もあるので、ちょっと一息

まとめ

RESTとGrapQLの2択というよりは、お互いのメリットを生かして使っていければと思います。
大量データを返すAPI(肥大化したAPI?)を利用する場面が増えるかもしれないので
積極的に検証していきたいと思います。

次回はスキーマ定義や実装部分についてかければよいなと思います。

5
7
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
5
7