GraphQLとREST APIの違いを調べてみた
筆者について
- 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が不便というわけでもありませんので、
適材適所だなぁと調べていて感じました。
大きな違いは、欲しい情報だけ取るか・必要な情報を取捨選択するかです。
それぞれの特徴を活かして使い分けましょう👍
Discussion