🍣

GraphQLとREST APIの違いを調べてみた

2023/11/16に公開

筆者について

  • GraphQL:名前は聞いたことある
  • REST API:知ってる・使ったことある

けつろん(とてもざっくり)

GraphQLは、必要なものをリクエストして持ってくることができる。
REST APIは、情報を持ってきてから取捨選択をする。

つまりどういうこと

たとえば、DBにこんなテーブルがあるとします。

id name age birthday address remarks
1 なな 25 1998/01/29 愛知県 よく食べます
2 たろう 22 2000/01/01 東京都

持ってきたい情報は、すべてのレコードの「name」と「birthday」だとします。

REST APIを使う

GET /rest/v1/users // とかいうエンドポイントがあるとしましょう

これを実行すると、おおよそREST APIでは以下のように値を取得できます。

{
    "users": [
        "id": 1,
	"name": "なな",
	"age": 25,
	"birthday": "1998/01/29",
	"address": "愛知県",
	"remarks": "よく食べます"
    ],
    [
        "id": 2,
	"name": "たろう",
	"age": 22,
	"birthday": "2000/01/01",
	"address": "東京都",
	"remarks": ""
    ]
}

あとはREST APIで取れてきた情報から
「name」と「birthday」を抽出して
自分の使いたいように使います。

GraphQLを使う

GraphQLでは、以下のようにリクエストします。

{
    users {
        name
	birthday
    }
}

リクエストするときに、必要な情報のみを記載するんですね🗿

え、GraphQL使ったらすごく楽じゃない?

と思ったわたしです。
REST APIは、情報を「取得する」「登録する」「更新する」「削除する」など
必要に応じてエンドポイントがポンポン増えていきますが、
GraphQLはエンドポイントが1つのみしかありません。

1つしかないので、シンプルな設計で済みます。

しかし、クライアント側で取得が楽になるぶん、
サーバー側であれやこれやを指定する必要があるため
REST APIのように容易に扱えるわけでもなさそうです🥸
※シンプルな設計で済むと言いつつ、あれやこれやと追加してたらとんでもないことに…というパターンもありえそう

あとは、QraphQLでは別テーブルの情報を1度に取れる利点があります。
たとえばテーブルAと関連づいているテーブルBの情報を取得したい場合、
RESTでは「テーブルA」のAPIと「テーブルB」のAPIを実行します。

これがQraphQLでは1回のリクエストで「テーブルA」「テーブルB」どちらの情報も取得できるようになるのです!

さいごに

とは言ってもREST APIが不便というわけでもありませんので、
適材適所だなぁと調べていて感じました。

大きな違いは、欲しい情報だけ取るか・必要な情報を取捨選択するかです。
それぞれの特徴を活かして使い分けましょう👍

コラボスタイル Developers

Discussion