Apidog

オールインワン協働API開発プラットフォーム

API設計

APIドキュメント

APIデバッグ

APIモック

API自動テスト

GraphQL vs RESTful、その違いを解説

GraphQLとRESTfulとも、よく見られるAPIの形式になっています。本文では、レスポンスの形式、リクエストのルーディング、リクエストの処理といった3つの方面から、GraphQLとRESTfulとの違いを解説します。

中村 拓也

中村 拓也

Updated on 11月 12, 2024

GraphQLとRESTfulも、よく見られるAPIの形式になっています。

GraphQLとRESTful

GraphQLは、Facebookが開発したAPI(Application Programming Interface)のクエリ言語およびランタイム環境です。RESTful APIに代わる新しいAPIデザインアプローチとして注目されています。GraphQLは、様々なプログラミング言語で実装されています。また、さまざまな種類のデータベースや外部APIと統合できる柔軟なアーキテクチャを持っています。これにより、クライアント側のアプリケーションが必要なデータを簡単かつ効率的に取得できるようになります。

それに対して、RESTful APIは、Webアプリケーションの機能を外部のクライアントアプリケーションから利用するためのAPIの一種です。REST APIは、HTTPプロトコルを使用して通信を行い、一般的にJSONまたはXML形式でデータをやりとりします。リソース(データ)を一意の識別子(URI)で指定し、HTTPメソッド(GET、POST、PUT、DELETEなど)を使用してリソースを操作します。クライアントアプリケーションはHTTPリクエストを送信し、サーバーからのHTTPレスポンスを受け取ります。これにより、Webアプリケーションの機能を外部から利用することができます。

解説:GraphQLとRESTfulとの違い

本文では、レスポンスの形式、リクエストのルーディング、リクエストの処理といった3つの方面から、GraphQLとRESTfulとの違いを解説します。

レスポンスの形式

APIリクエストの核心内容はレスポンスで、つまり、リクエストサーバーから返されるデータの結果です。RESTfulの理念は、全てのレスポンスがURL(パスとパラメータを含む)によって取得されます。例えば、GETメソッドで相応のデータを取得することができます:GETリクエストを送信すると、レスポンスを取得できる(Apidogツールで例を示している):

ApidogのRESTful APIの実行例

上記の例から、レスポンスはリクエストとリンクされていることがわかりました。上記の例の本質は、実際に「リクエストのエンドポイント」になります。事前にレスポンスのデータ構造(Schema)を定義する必要があり、こうすると、リクエストを送信するときに、サーバーから返すデータを取得できるようになります。

GraphQLは、RESTfulに違っています。GraphQLでは、リクエストとSchemaの定義は別のところで行なっています。サーバーで複数のSchemaを定義することができますし、リクエストもサーバーの異なるSchemaを検索できます。上記と同じような例で、サーバー側でクエリのデータ構造(Schema)を定義した(APOLLOで例を示している):

サーバー側でクエリのデータ構造(Schema)を定義

Queryというデータ構造(Schema)をリクエストする場合、以下のようにサーバー側のSchemaの中にQuery型を作成する必要があります:

サーバー側のSchemaの中にQuery型を作成

それから、フロントエンドは、リクエストを送信できるようになります:

リクエストを送信

GraphQLとRESTfulともURLを通じてサーバーからのレスポンスを取得しますが、リクエストのリソースについて、明確な違いがあります。RESTfulでは、リソースの返すデータはサーバーによって事前に定義されます。その一方で、GraphQLでは、サーバーは利用可能なリソースのみを定義しますが、具体的に必要なリソースは、クライアントがフィールドを通じて決めています。

リクエストのルーディング

RESTful APIでは、リソースを操作するためにHTTPメソッドを使用します。これにより、リソースに対して特定のアクションを実行できます。例えば、GETメソッドはリソースの取得、POSTメソッドはリソースの作成、PUTメソッドはリソースの更新、DELETEメソッドはリソースの削除を示します。ルーティングは、URI(Uniform Resource Identifier)を使用して定義され、URIはAPIのエンドポイントを示します。

一方、GraphQL APIでは、単一のエンドポイントがあります。GraphQLでは、クライアントが必要なデータをリクエストし、サーバーが必要なデータのみを返します。クライアントは、GraphQLクエリを使用して、必要なデータの形式と量を指定します。GraphQLでは、データベースのスキーマに基づいてクエリを作成します。つまり、GraphQL APIのルーティングは、データベーススキーマに基づいて定義されます。

まとめてみると、RESTful APIは複数のエンドポイントを持ち、URIを使用してリソースにアクセスし、HTTPメソッドを使用してリソースを操作します。一方、GraphQL APIは単一のエンドポイントを持ち、GraphQLクエリを使用して必要なデータをリクエストし、スキーマに基づいてデータを返します。

リクエストの処理

RESTful APIでは、HTTPリクエストの種類に応じて、サーバーは異なる処理を実行します。例えば、GETリクエストを受け取った場合、サーバーはリソースを取得して返します。POSTリクエストを受け取った場合、サーバーはリソースを作成します。PUTリクエストを受け取った場合、サーバーは既存のリソースを更新します。DELETEリクエストを受け取った場合、サーバーはリソースを削除します。つまり、RESTful APIでは、HTTPメソッドを使用してリソースの操作を定義し、サーバーはそれに従ってリクエストを処理します。

一方、GraphQL APIでは、クライアントが必要なデータをクエリで指定し、サーバーは必要なデータのみを返します。GraphQLでは、クエリに含まれるフィールドのみが解決されます。このため、GraphQL APIでは、サーバーは必要なデータのみを処理し、不要なデータを返さないようにします。また、GraphQLはデータの変更を行うために、HTTPメソッドの代わりにMutationと呼ばれる操作を提供しています。

つまり、RESTful APIではHTTPメソッドに基づいてリクエストを処理し、リソースを操作します。一方、GraphQL APIでは、クライアントが必要なデータをクエリで指定し、サーバーは必要なデータのみを返すように処理します。また、GraphQL APIでは、データの変更を行うためにMutationを使用します。

まとめ

上記の内容をまとめてみると、GraphQLとRESTfulの主な相違点を以下にまとめます。

レスポンスの形式

  • RESTful: レスポンスはHTTPステータスコードとレスポンスボディで構成され、レスポンスボディはJSON、XML、HTMLなどの形式で返される。
  • GraphQL: レスポンスはGraphQLスキーマに基づいて構成され、JSON形式で返される。クライアントが必要なデータのみを指定するため、不要なデータが返されない。

リクエストのルーティング

  • RESTful: エンドポイント毎にリソースへのアクセス方法が異なるURIを使用してリクエストを処理する。
  • GraphQL: 単一のエンドポイントで、クライアントから必要なデータを取得するためにGraphQLクエリを使用する。

リクエストの処理

  • RESTful: HTTPメソッドを使用してリソースを操作するためのリクエストを処理する。例えば、GETメソッドはリソースの取得、POSTメソッドはリソースの作成、PUTメソッドはリソースの更新、DELETEメソッドはリソースの削除を示す。
  • GraphQL: クライアントから必要なデータのみを指定するためにGraphQLクエリを使用し、サーバーは必要なデータのみを返すように処理する。また、データの変更を行うためにMutationを使用する。

Apidogという包括的なプラットフォームは、RESTfulとGraphQLのAPIにも対応していますので、次のダウンロードボタンから、体験してみましょうか。

button
2024年必見!知られざるフロントエンドフレームワーク9選観点

2024年必見!知られざるフロントエンドフレームワーク9選

この記事では、2024年最新のフロントエンドフレームワーク9選を紹介し、ユーティリティから日付処理まで多様な機能を持つ隠れた宝石を取り上げます。これらのツールを利用することで、開発効率を高め、ユーザー体験を向上させることが可能です。

中村 拓也

11月 19, 2024

APISIXで実現!簡単プラグインオーケストレーション観点

APISIXで実現!簡単プラグインオーケストレーション

これらの構成を実装することで、強力で安全なAPIゲートウェイインフラを構築できます。認証やレート制限を組み合わせることで、セキュリティと信頼性が確保されます。管理キーの更新やメトリックのモニタリングはメンテナンスに不可欠です。APISIXはプラグインを通じて柔軟に拡張可能です。

中村 拓也

11月 1, 2024

API開発者必見!自動化ドキュメントがもたらす成功術観点

API開発者必見!自動化ドキュメントがもたらす成功術

成功するAPIの鍵は、信頼できるリアルタイムのドキュメントにあります。Apidogの自動ドキュメントソリューションは、APIが常に最新であることを保証し、生産性向上とユーザー満足度向上に寄与します。急速に進化する環境で競争優位性を確立できます。

中村 拓也

10月 31, 2024