0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GraphQLとRESTfulの違い:詳細解説

Last updated at Posted at 2024-10-23

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

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ツールで例を示している):

https://apidog.com/jp.png

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

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

graph-api-example-2.png

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

graph-api-example-3.png

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

graph-api-example-4.png

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にも対応していますので、次のダウンロードボタンから、体験してみましょうか。

:kissing_closed_eyes:
今回は以上になります!
最後まで見ていただきありがとうございました!
では、また次の記事で~!

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?