4
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 5 years have passed since last update.

ざっくりGraphQLをまとめてみた

Posted at

GraphQL とは

GraphQLとはAPI用のクエリ言語である。
フレームワークや特定の技術を指すのではなく、データに対するクエリ言語の仕様

Web版SQL = GraphQL

RESTと何が違う?

REST

RESTfulなAPIはURLとmethodでリソースを表現する

GraphQL

単一エンドポイント。欲しいリソースをHTTP POSTのbodyに明示的に記載してリクエスト

picture_pc_0c546509acf3af01052977d2d0ba7f83.jpg

メリット

1. リソースをまとめることができる

RESTではURLがひとつのリソースを表すため、複数のリソースが必要な複雑な画面では複数回のAPIリクエストが必要になる。

結果的に、綺麗に設計されたRESTful APIほど複数回のリクエストが必要になり、パフォーマンスが落ちたりコードの複雑さが増す欠点があった。

GraphQLでは必要なリソースだけを明示的に記載してリクエストし、必要なリソースを無駄なく1発で取得可能。

2. 中間層としても活躍する

マイクロサービスのGateway(中間層)としても良筋と思われる。

スキーマを定義することでGraphQLに対応しているデータソースを取得することができる。
DBを直接取得することもできるし、既存のREST APIを内部的に叩いて取得させることもできる。

picture_pc_d897f516730d1b98b75429336b88546f.jpg

REST APIと勝手が違うところ

リソース制限の視点

APIに利用制限を設ける場合、RESTでは1時間にx回マデなどの回数ベースの制限を設ける例がよくあるが、

GraphQLは引っ張るリソース数(=負荷)はクライアントが任意に決められるため、負荷の計算方法を考える必要がある。

githubのGraphQL API v4は、なめるオブジェクトの数をscoreにし、それを1時間に超えない範囲でリクエスト可能にしている。

キャッシュ効率

GraphQLは単一エンドポイントなので、HTTPのCache-ControllのようなURLベースのキャッシュ機構やCDNでのキャッシュはそのままでは使えない。

キャッシュが使えないわけではなくサーバー、CDN、クライアントの各層でキャッシングの現実的な実装は用意されているので
別途必要なものを実装しなければならない。

エラーハンドリング

RESTではエラーはHTTPのステータスコードで表現される

GraphQLではリクエストが通れば200で返し、何かエラーが発生した時はエラーオブジェクトに表現される。

まとめ

  • 様々なデータソースを扱えるのでGood
  • Web版SQLが発行できてイイネ!
  • REST API開発でAPIが多すぎてメンテナンスがしんどいということはGraphQLではなくなりそう。
  • リソース制限やキャッシュ効率、エラーハンドリングの仕方などREST APIとはまた異なるノウハウが必要

これからの主流になっていく(らしい)ので、頑張って習得したい。

参照URL

4
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
4
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?