
REST API と GraphQL の違い
はじめに
今回業務で、NetBox を使用する機会がありました。その際、データの取得方法として、REST API と GraphQL があることを知りました。それぞれメリット/デメリットがあるためまとめてみました。
REST API とは
REST(Representational State Transfer)の略で以下の4原則に基づいています。
- 統一インターフェース
- 統一したルールに基づいてやり取りをすること(GET・POST・PUT・DELETE等)
- アドレス可能性
- それぞれのリソースが一意のURIを持っていること(例: users/ ユーザーに関する情報を表す)
- 接続性
- API同士が「リンクでつながる」仕組みのこと
- ステートレス性
- 状態を持たないこと(前回のリクエスト情報を保持しない)
メリット
- 設計がシンプルでわかりやすい
- HTTPキャッシュを利用することで、リソースにアクセスする際にキャッシュされたデータを活用でき、サーバーへのリクエスト回数を大幅に減らすことができる
- ライブラリが充実しているため、開発効率が高い
デメリット
- エンドポイントごとに取得するため、余分なデータを取得してしまう
- 必要なデータをそろえるために複数のリクエストを呼び出すことになる可能性がある
- APIの仕様変更が発生する場合、クライアントに影響を与えないためにバージョン管理を行う必要がある
GraphQLとは
Facebookが開発した APIクエリ言語 です。データをやり取りする際にクライアントが必要なデータのみをリクエストし、取得できる仕組みを提供しています。
メリット
- 必要なデータのみを指定して取得するので、不要なデータ取得が発生しない。
- すべてのリクエストが一つのエンドポイントで処理されるのため、一回のリクエストで関連データを全て取得できる
- Subscriptionを使うことでリアルタイムでデータ更新ができる
デメリット
- クライアントが自由にクエリ作成できるため、複雑なクエリによりサーバーの負荷が増加する可能性がある
- 一つのエンドポイントで全てのリクエストを処理するため、HTTPキャッシュが使いにくい
- データの取得に関して一部だけ失敗した場合に、エラーハンドリングを行うのが難しい
まとめ
取得したいデータの関係性が複雑であったり、リアルタイム性が必要な場合はGraphQL、シンプルなデータ構造や、キャッシュなどを柔軟に使用したい場合はREST APIがおすすめです。