GraphQLとはFacebook社により開発されたAPI向けのクエリ言語、およびそのランタイムを指します。
GraphQLを用いることでリクエスト数を抑えてリソースにアクセスを行ったり、必要なリソースのみを取得することが可能になり、パフォーマンス低下を防げます。また、クエリ自体に欲しい情報をそのまま定義できるため直感的に記述できるなどの特徴があります。
今回はGraphQLとは何か?REST APIとの違いは何か?について詳しく解説を行います。
GraphQLとは?
GraphQL開発前のFacebook社では主にREST APIとFQL(Facebook Query Language)が使用されていました。ですが、REST APIで開発を進めていくとオーバーフェッチ(過剰取得)や、アンダーフェッチ(過小取得)などが発生していました。これらを解決するにはユースケース毎にエンドポイントを作成すればいいのですが、それではエンドポイントが増えてしまい管理負荷が高くなってしまいます。このようなRESTの課題点を解決するために開発されたのがGraphQLです。
GraphQLでは1つのエンドポイントで複数のリソースを取得することができます。構造をイメージするのに分かりやすいのがFacebookです。Facebookでは1人のユーザーを基点にその人と繋がっている友人たちがツリーのように繋がっています。このツリー状の構造はGraphQLのクエリと似ており、1つのエンドポイントで複数のリソースを取得することが可能になります。
REST APIとは?
REST APIとはREST(Representational State Transfer)というWeb設計思想に従ったAPI(Application Programming Interface)を指します。
RESTには以下に掲げる4つの原則があり、Roy Fielding氏が自身の論文で提唱したものに基づいています。
- アドレス可能性
- ステートレス性
- 接続性
- 統一インターフェース
この4つの原則に従ったAPIがREST APIです。
APIは端的に言うと「ソフトウェアやプログラム、Webサービスの間を繋ぐインターフェース」です。身近な物で例えるとSNSなどがあります。SNSを利用する際、ユーザーはアカウントのサインアップが必要になります。サインアップの際にメールアドレスや電話番号を使用して認証するパターンと既に他のSNSで使用しているアカウントを使い認証するパターンがあると思います。
この他のSNSで使用しているアカウントからユーザー情報を取得するのに使われているのがAPIです。
REST APIについて更に詳しく解説を行った記事はこちらです。
https://envader.plus/article/83
GraphQLとREST APIの比較
GraphQLとREST APIを比較した内容が以下です。
比較項目 | GraphQL | REST API |
---|---|---|
通信プロトコル | HTTP | HTTP |
形式 | (主に)JSON | (主に)JSON |
エンドポイント | 1つ | 複数 |
型付け | 強い | 弱い |
データ操作の種類 | Query/Mutation | GET/POST/PUT/DELETE |
データ取得の柔軟性 | 高い | 低い |
クライアントからサーバへのリクエスト数 | 必要なリソースを指定することで1回で済む | 必要なリソース次第では複数回のリクエストが必要になる |
GraphQL長所
GraphQLの長所として以下の点が挙げられます。
必要なリソースだけを取得できる
GraphQLはREST APIのように対象のエンドポイントに対してGETリクエストを送ってデータを取得するのではなく、必要なデータカラムを含んだクエリをPOSTすることでデータを取得します。これによりオーバーフェッチ(過剰取得)を回避して必要なデータのみを取得できます。
例えば、ユーザー情報(名前、年齢、性別、住所)などの中から名前のみを取得したい場合は以下のようなクエリをPOSTすることで、名前のみを取得することができます。
query GetUser {
user {
name
}
}
API呼び出し頻度の抑制
より多くのデータを処理する際にAPIの呼び出し頻度を抑制することができます。
例えば、下記図のように名前と住所を取得したい場合にRESTでは2回のリクエストが必要になりますが、QraphQLでは1回のリクエストでデータを取得することができます。
GraphQLの短所
GraphQLの短所として以下の点が挙げられます。
学習に時間がかかる
GraphQLはRESTと比べて学習時間を要します。GraphQLではスキーマを使って型の定義を行う必要があり、GraphQLは独自のスキーマ定義言語(SDL: Schema Definition Language)を持ち、SDLを使用して型を定義しなくてはいけません。
キャッシュが複雑になりやすい
RESTの場合、URLベースでキャッシュを生成するため比較的容易に扱うことができます。一方GraphQLのキャッシュはURLを生成せず、レスポンス内容も異なるので複雑です。そのため、CDNによるオフロードの実現が難しかったり、クライアントサイドへ悪影響を及ぼしたりする可能性があります。
REST APIの長所
REST APIの長所として以下の点が挙げられます。
学習が比較的容易
REST APIはHTTPメソッドやJSON形式など、一般的なWeb技術を使用しているためシンプルで理解しやすいAPIです。また人気の高いAPIということもあり、Webや書籍での情報も豊富なため学習しやすく、困った場合でもすぐに解決策を探すことができます。
アプリケーションの中のリソースがわかる
アドレス欄に入力すれば、そのリソースを参照できるため、どのリソースを操作しようとしているかがひと目でわかります。
REST APIの短所
REST APIの短所として以下の点が挙げられます。
オーバーフェッチとアンダーフェッチ
REST APIではアクセスしたエンドポイントに含まれる全ての情報を取ってきてしまうため、使用しない不要なデータまでも取得してしまうオーバーフェッチ(過剰取得)が発生します。また、逆に1回で必要なデータが取れない場合、複数回リクエストを送らないといけないアンダーフェッチ(過小取得)が発生します。これらは通信やサーバーサイド側での負荷の増加に繋がってしまうため、RESTの課題の1つとなっています。
記述方法にばらつきが発生する
RESTはあくまで設計思想の1つであり、実装にあたっての規定などは存在しません。そのため開発者により記述方法が異なり、ばらつきが発生してしまう点はデメリットと言えます。
GraphQL学習法
GraphQLを学ぶ際にまずは何から始めればいいか分からない方も多いと思います。
そんな時におすすめのサイトが以下の2つです。
HOW TO GRAPHQL
HOW TO GRAPHQLでは動画を使って基礎を学ぶことが可能です。まずはGraphQLの基礎を学んだのち、そこからより実践的なチュートリアルを開始することができます。フロントエンドの場合はReact + アポロを、バックエンドではRubyでGraphQLサーバーを構築する方法など学ぶことができます。各章の終わりに4択のクイズが出され、正解をしないと次の章に進むことができないため、勉強内容の振り返りも行えます。ただし、日本語対応はされていないため注意が必要です。
GitHub Docs
GitHub Docsではブラウザ上で実際にGraphQLを使うことができます。利用するにはGitHubのアカウントが必要になりますが、実際に触って学ぶことができるため楽しく学習を行えます。例えば下記図ではGraphQLを使用し、GitHubから名前や住所などのプロフィール情報を取得しています。ただし、ブラウザ版ではプライベートリポジトリなどにアクセスが行えないためGraphQL Appをお使いください。
まとめ
GraphQLとはFacebook社により開発が行われたAPI向けのクエリ言語です。
RESTの課題点であったオーバーフェッチ(過剰取得)やアンダーフェッチ(過小取得)を解消でき、必要なエンドポイントも1つで済むなどの特徴があります。これにより通信やサーバーサイド側での負荷を低減でき、レスポンスが向上します。ただし、学習コストが高い点やRESTと比べてキャッシュが複雑になるなどのデメリットも少なからずあるため注意しましょう。必ずしもREST APIよりGraphQLが優れているという訳ではなく、REST APIにも長所と短所があるため、それぞれの違いを見極めて選択を行うようにしましょう
REST APIについて更に詳しく知りたい場合はこちらの記事をご覧ください。
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2023.08.31
【徹底解説】ステータスコード3xxについて詳しく
こちらの記事では、HTTPステータスコード300系について解説します。
- WEB
2023.08.06
FQDN(完全修飾ドメイン名)とは?URLの仕組みから学ぶFQDN
今回はURLの仕組みからFQDNとは何か?について解説を行います。
- WEB
2023.03.31
デザイン制作を効率化 Webデザインツール「Figma」とは?
Figmaとはブラウザ上で動作するデザインツールで、UIデザインやプロトタイプの制作、共同編集などを行うことができます。
- WEB