APIの概念が生まれた頃、開発者はRESTを用いてAPI設計を行わざるを得なかった。しかし、日々進化するアプリの要求は、より洗練された手法を求めた。GraphQLは、その変革の一翼を担うAPI技術革命として登場した。
GraphQLはサーバサイド技術であり、一方RESTはAPI設計の手法である。ここで疑問が生じるかもしれない:
RESTとどう違うのか?
常にRESTの代替となりうるのか?
APIセキュリティには適しているのか?
これらの疑問に答えることが、どちらを選ぶか決定する前に必要である。さあ、一緒に解明していこう。
Roy Fieldingが初めて世界に紹介したRESTは、ウェブアプリ開発時に重視される主要な原則を簡潔に示す基本的なソフトウェア設計手法です。RESTはRepresentational State Transferの略で、ファイルやハードウェア、メディアモジュールのサポートを通して、円滑なウェブサービス開発を実現します。
この設計手法で作られたAPIはREST APIと呼ばれます。REST APIを利用すると、ウェブアプリは柔軟でサードパーティとの連携がしやすくなります。
REST APIは、ヘッダー、メソッド、APIエンドポイント、およびデータ(ボディ)などで構成されます。ヘッダーには、コンテンツタイプや認証方法の情報が含まれます。
RESTでは、GET、PUT、POST、DELETEなどのメソッドを用いてAPIを呼び出します。エンドポイントは、API呼び出し先のURLを意味し、データはAPIが伝達するメッセージやテキストを指します。RESTは多くのデータ形式に対応しますが、読みやすさで業界標準となっているJSONが一般的です。
RESTの意味が明らかになったところで、GraphQLの基本について学びます。GraphQLはAPI互換のクエリ言語で、GraphQLを使用すれば、クライアントはHTTPベースのリクエストを送り、適切なレスポンスを受け取ることができます。
Facebookが開発したこのサーバサイド技術はアプリ層で動作し、REST APIの最適化に効果を発揮します。宣言型の方式でデータの更新や取得が可能なため、シンプルで初心者にも扱いやすい技術です。
以下の表で両者の主な違いを詳しく確認できる。
比較表
REST | GraphQL |
---|---|
ウェブアプリ開発に必要な主要なAPI設計原則の指針を提供する | 事前に用意されたデータに対し、サーバがクエリを実行する技術である |
サーバ主導のアーキテクチャに基づく | クライアント主導のアーキテクチャに基づく |
長い歴史と豊富な実績があり、広く利用されている | 比較的新しい技術で、普及には時間がかかる |
開発プロセスに時間を要する | 開発を迅速に進められる |
学習しやすく、参考資料が豊富である | 習得が難しく、コミュニティのサポートが限られている |
プラットフォーム全体で性能の一貫性が保証されない | 高い品質と一貫性を誇る |
弱い型付け | 強い型付け |
複数のAPIエンドポイント | 統一されたAPIエンドポイント |
オブジェクトの識別はエンドポイントに依存する | オブジェクトは独立している |
メタデータは不要 | クエリ検証にメタデータが重要 |
APIのスケーラビリティや更新が容易 | アップグレードやカスタマイズには追加の手間が必要 |
使いやすさに関しては両者は大きく異なり、バージョン管理や予測可能性の面で全く違いが見られる。GraphQLは非常に予測しやすく、エンドユーザーが意図したAPIへのリクエストを送信でき、結果も予測可能で、開発者が事前に使用例を決めることができる。
RESTの場合、URLやHTTPの利用方法が把握されていればある程度の予測は可能ですが、レスポンス全体を正確に見通すのは難しい。
次にバージョン管理について。RESTは非常に柔軟で、開発者が望むツールや技術を自由に選べる。
GraphQLはAPIのバージョン管理を必要とせず、シンプルに利用できる。
ここではGraphQLの方がパフォーマンスに優れていると認めざるを得ない。その理由は柔軟性にあり、RESTful APIは必要以上または不足のデータ取得に陥り、冗長なデータが蓄積されやすい。
RESTでは意図しないデータ取得が発生しやすく、その結果、動作が遅くなる。
GraphQLは必要なデータ取得において非常に迅速かつ柔軟で、任意の方法で1回のAPI呼び出しで済む。構造を一度定義すれば再利用でき、余分なデータ取得がなく高速である。
フロントエンド、バックエンド双方の開発者も、これにより開発速度が大幅に向上すると評価している。
デジタルの安全性やプライバシーに関しては、RESTが有利です。RESTは柔軟で、HTTP認証、API認可、OAuth 2.0など、複数のAPIセキュリティ対策を一度に実装できるため、さまざまなセキュリティ手法を組み合わせられる。
GraphQLもセキュリティには配慮しているが、RESTが提供する対策には及ばない。ただし、型安全性においてはGraphQLがRESTを上回り、フロントエンドおよびバックエンドでの型エラーを積極的に検出する仕組みが備わっている。
人気の判断には時が大きな要素となる。RESTは長い歴史があり、広く普及しているため、ほとんどのアプリ開発者が一度は利用経験がある。一方、GraphQLは新しく、徐々に開発者コミュニティに定着しつつある。
最近発表されたSmartbearの2020年APIレポートによれば、API利用者の約82%がRESTを試しており、GraphQLの利用者はこれに比べると少ない。
最後に、REST APIとGraphQLの比較で争点となるのは、データ取得の方法です。RESTは複数のエンドポイントやルートを通じてデータにアクセスするため、サーバは必要なデータを取得するために何度も往復しなければならず、時間とリソースを消費します。
例えば、ユーザーIDを取得する場合、エンドポイントはuser/IDとなりますが、その他の情報が必要な場合は、関連するエンドポイントをさらに辿る必要があり、同じデータベースに何度もアクセスすることになります。
GraphQLでは、1回のクエリで必要なデータだけを取得できるため、余分な取得がなく、レスポンスがJSON形式で返されるので迅速に処理されます。
RESTは静的なデータを扱うプロジェクトで最大の効果を発揮します。リクエスト・レスポンスモデルがこの種の開発に適しているためです。また、HTTPキャッシュが不要な場合にもRESTは有効で、GraphQLは汎用的なHTTPキャッシュを備えていません。
RESTでは、APIレスポンスを基にした監視システムの開発が可能であり、移植性の高いUIが必要なアプリも実現できます。
多層構造が求められるアプリ開発には、RESTが理想的な選択となります。
GraphQLは特定のデータを効率的に取得できるため、モバイル向けアプリの開発に最適です。
このクエリ言語を使えば、必要な情報のみを取得でき、モバイルアプリのパフォーマンス向上にも寄与します。
複雑なAPIの取り扱いにおいて、GraphQLはその複雑さを軽減し、APIの動作を明確に抽象化するため、エンドユーザーの要求に沿ったレスポンスを実現します。
複数の場所からのデータ統合が必要なアプリも、GraphQLを利用することで目標を達成できます。
REST APIを使用してデータを取得する場合、ウェブブラウザからウェブページに直接アクセスする形となります。例えば:
GET https: //localhost:8881/api/v1/School('Library A')
ウェブページやアセットがパスワード保護されている際には、認証情報もAPI呼び出しで渡され、GET以外にPOST、PATCH、DELETEなどのメソッドが用いられます。ウェブページ全体を一括で扱うため、1回のリクエストで大量のデータが返されます。
一方、GraphQLはデータをオブジェクトとして取得し、ページやデータベース内の特定のノードへアクセスできる。
query {
Schools (Library: "A" ) {
Class: "X"
Subject: "Science" {
title(3)
}
}
}
出力:
{
"data": {
Schools (Library: "A" ) {
Class: "X"
Subject: "Science" {
title: "Biology"
title: "Chemistry"
title: "Physics"
}
}
}
}
RESTは長い歴史と実績により今なお人気があり、多くの利点があります:
これらの利点にもかかわらず、以下のような欠点も存在します:
GraphQLには以下のような顕著な利点がある:
しかし、以下のような欠点もある:
正直なところ、どちらが優れているかはプロジェクトの要件次第です。
複数のAPIバージョンが必要で、利用デバイスやブラウザに左右されず、既定のAPI設計手法を活用できる場合はRESTが適している。
しかし、現代的な設計要求で、データベースへの往復を減らし頻繁なデータ更新が求められるなら、GraphQLに軍配が上がる。
それぞれの強みを活かして欠点を補うことが鍵であり、実際には両者を併用することも可能である。
どちらを選ぶにしても、譲れないのはAPIセキュリティである。十分なセキュリティ対策がなければ、アプリに重大な脆弱性が生じ、データが危険にさらされる恐れがある。
セキュリティは広範な分野であるため、APIセキュリティプラットフォームの利用が効果的で、このソリューションを用いれば各段階でのAPI利用管理が容易になる。
APIはアプリ開発の未来を切り拓く原動力である。開発者が最適なAPI開発手法を選ぶ際に迷う理由でもある。従来のRESTとは異なり、GraphQLは現代のアプリ開発を支援し、徐々に開発者の間で定着している。本稿では、REST APIとGraphQLの主な違いを紹介した。
解説した事実に注目することで、各シーンにおいてどちらが最適かが明確になるだろう。
最新情報を購読