San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
閉じる
プライバシー設定
ウェブサイト運営に必要なCookieや類似技術を使用しています。追加のCookieは貴社の同意がある場合のみ利用されます。同意は「Agree」をクリックすることでいただけます。どのデータが収集され、どのようにパートナーと共有されているかの詳細は、Cookieポリシープライバシーポリシーをご確認ください。
Cookieは、貴社デバイスの特性や、IPアドレス、閲覧履歴、位置情報、固有識別子などの特定の個人情報を取得、解析、保存するために使用されます。これらのデータは様々な目的で利用されます。分析Cookieによりパフォーマンスを評価し、オンライン体験やキャンペーンの効果向上に役立てます。パーソナライズCookieは、利用状況に応じた情報やサポートを通じ、貴社専用の体験を提供します。広告Cookieは、第三者が貴社のデータをもとにオーディエンスリストを作成し、ソーシャルメディアやネット上でのターゲット広告に使用します。貴社は各ページ下部のリンクから、いつでも同意の許可、拒否、または撤回が可能です。
ご送信ありがとうございます。内容を受け付けました。
申し訳ありません。フォーム送信時にエラーが発生しました。
/
/
API Security

🆚 GraphQL Vs. REST: 必ず知っておくべきこと

APIの概念が生まれた頃、開発者はRESTを用いてAPI設計を行わざるを得なかった。しかし、日々進化するアプリの要求は、より洗練された手法を求めた。GraphQLは、その変革の一翼を担うAPI技術革命として登場した。

GraphQLはサーバサイド技術であり、一方RESTはAPI設計の手法である。ここで疑問が生じるかもしれない:

RESTとどう違うのか?

常にRESTの代替となりうるのか?

APIセキュリティには適しているのか?

これらの疑問に答えることが、どちらを選ぶか決定する前に必要である。さあ、一緒に解明していこう。

🆚 GraphQL Vs. REST: 必ず知っておくべきこと

RESTの解説

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 API
REST API

RESTの特徴

  • 変更のないインターフェースにより、デバイスの種類に左右されず通信が行われる
  • クライアントの要求に合わせて拡張でき、高いスケーラビリティを実現
  • リソースへ容易にアクセスでき、名称での検索が可能
  • HTTPプロトコルに基づく
  • 複数のサーバでREST APIを提供できる
  • REST APIエンドポイントにより、アプリ内でデータベースのリソースへアクセス可能
  • 構造とパターンがシンプル
  • データの転送が容易
  • メモリ内でのデータ保存が可能

GraphQLの解説

RESTの意味が明らかになったところで、GraphQLの基本について学びます。GraphQLはAPI互換のクエリ言語で、GraphQLを使用すれば、クライアントはHTTPベースのリクエストを送り、適切なレスポンスを受け取ることができます。

Facebookが開発したこのサーバサイド技術はアプリ層で動作し、REST APIの最適化に効果を発揮します。宣言型の方式でデータの更新や取得が可能なため、シンプルで初心者にも扱いやすい技術です。

Explanation of GraphQL
Explanation of GraphQL

GraphQLの特徴

  • 静的型付けで、バックエンドとフロントエンドの分離が容易
  • 余計なデータ取得が発生しない
  • HTTPに依存しない
  • GraphQL特有のドキュメント作成の負担がない
  • 帯域幅の節約が可能
  • APIの進化を実現し、バージョン管理が不要
REST API vs GraphQL
アーキテクチャ

主な違い

  • RESTはウェブアプリ開発時のAPI設計指針であるのに対し、GraphQLはクエリ実行のためのサーバサイドツールである
  • RESTはエンドポイントで構成され、GraphQLはスキーマで管理される
  • RESTは開発を遅らせる傾向があるが、GraphQLは迅速な開発を実現する
  • RESTは任意のメッセージ形式に対応できるが、GraphQLは文字列のみで処理する
  • RESTはメタデータを必要としないが、GraphQLはクエリ検証にメタデータが必要
  • RESTではオブジェクトがエンドポイントに依存するが、GraphQLでは取得方法に依存しない

GraphQLとREST APIの比較

以下の表で両者の主な違いを詳しく確認できる。

比較表

RESTGraphQL
ウェブアプリ開発に必要な主要なAPI設計原則の指針を提供する事前に用意されたデータに対し、サーバがクエリを実行する技術である
サーバ主導のアーキテクチャに基づくクライアント主導のアーキテクチャに基づく
長い歴史と豊富な実績があり、広く利用されている比較的新しい技術で、普及には時間がかかる
開発プロセスに時間を要する開発を迅速に進められる
学習しやすく、参考資料が豊富である習得が難しく、コミュニティのサポートが限られている
プラットフォーム全体で性能の一貫性が保証されない高い品質と一貫性を誇る
弱い型付け強い型付け
複数のAPIエンドポイント統一されたAPIエンドポイント
オブジェクトの識別はエンドポイントに依存するオブジェクトは独立している
メタデータは不要クエリ検証にメタデータが重要
APIのスケーラビリティや更新が容易アップグレードやカスタマイズには追加の手間が必要

REST vs GraphQL

使いやすさ

使いやすさに関しては両者は大きく異なり、バージョン管理や予測可能性の面で全く違いが見られる。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は何に有効か

RESTは静的なデータを扱うプロジェクトで最大の効果を発揮します。リクエスト・レスポンスモデルがこの種の開発に適しているためです。また、HTTPキャッシュが不要な場合にもRESTは有効で、GraphQLは汎用的なHTTPキャッシュを備えていません。

RESTでは、APIレスポンスを基にした監視システムの開発が可能であり、移植性の高いUIが必要なアプリも実現できます。

多層構造が求められるアプリ開発には、RESTが理想的な選択となります。

GraphQLは何に向いているか

GraphQLは特定のデータを効率的に取得できるため、モバイル向けアプリの開発に最適です。

このクエリ言語を使えば、必要な情報のみを取得でき、モバイルアプリのパフォーマンス向上にも寄与します。

複雑なAPIの取り扱いにおいて、GraphQLはその複雑さを軽減し、APIの動作を明確に抽象化するため、エンドユーザーの要求に沿ったレスポンスを実現します。

複数の場所からのデータ統合が必要なアプリも、GraphQLを利用することで目標を達成できます。  

RESTと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"
      }
    }
  }
}
Request Comparison

RESTの利点と欠点

RESTは長い歴史と実績により今なお人気があり、多くの利点があります:

  • 複雑なプロジェクトの開発が容易
  • ソフトウェアやアプリのスケーラビリティが確保できる
  • シームレスな適応が可能
  • カスタマイズしたAPIの開発が可能
  • ルーティング情報を必要とせずに処理が行える
  • サーバ間でのデータ移行が簡単

これらの利点にもかかわらず、以下のような欠点も存在します:

  • クライアントとサーバ間の通信状態が維持されない
  • 異なるエンドポイントからのデータ取得に個別のAPI呼び出しが必要
  • データ検索機能が十分でない
  • フレームワークやツール利用の指針が欠如している
  • クエリの検証ができない
  • APIの変更が促されにくい

GraphQLの利点と欠点

GraphQLには以下のような顕著な利点がある:

  • クエリのキャッシュやバッチ処理が容易
  • APIと自動的にドキュメントが同期される
  • プロダクト中心のアプローチ
  • 1回のAPI呼び出しで多数のデータ取得が可能
  • システムの文脈に沿ったクエリ実行が可能
  • 複数のデータベースに対応できる
  • 分かりやすいクエリが実現できる
  • 互換性のある機能の選定やその動作を事前に定義できる

しかし、以下のような欠点もある:

  • 複雑なアプリ設計時に適切なデザインパターンを提示できない
  • 小規模なアプリの開発が煩雑になる
  • 複雑なクエリには適さない
  • 単一のエンドポイントによりAPI利用が煩雑になる
  • APIのバージョン管理に対応していない

RESTとGraphQL、どちらが優れているか

正直なところ、どちらが優れているかはプロジェクトの要件次第です。

複数のAPIバージョンが必要で、利用デバイスやブラウザに左右されず、既定のAPI設計手法を活用できる場合はRESTが適している。

しかし、現代的な設計要求で、データベースへの往復を減らし頻繁なデータ更新が求められるなら、GraphQLに軍配が上がる。

それぞれの強みを活かして欠点を補うことが鍵であり、実際には両者を併用することも可能である。

どちらを選ぶにしても、譲れないのはAPIセキュリティである。十分なセキュリティ対策がなければ、アプリに重大な脆弱性が生じ、データが危険にさらされる恐れがある。

セキュリティは広範な分野であるため、APIセキュリティプラットフォームの利用が効果的で、このソリューションを用いれば各段階でのAPI利用管理が容易になる。

結論

APIはアプリ開発の未来を切り拓く原動力である。開発者が最適なAPI開発手法を選ぶ際に迷う理由でもある。従来のRESTとは異なり、GraphQLは現代のアプリ開発を支援し、徐々に開発者の間で定着している。本稿では、REST APIとGraphQLの主な違いを紹介した。

解説した事実に注目することで、各シーンにおいてどちらが最適かが明確になるだろう。

FAQ

参考資料

最新情報を購読

更新日:
February 25, 2025
学習目標
最新情報を購読
購読
関連トピック