結論: RESTは用途ごとに決まった窓口からデータを取得する方式、GraphQLは必要なデータだけを指定して取得する方式です。どちらが優れているかではなく、システムの要件で選びます。
まずAPIのおさらい
以前の記事で、APIは「サービス同士の会話ルール」だと説明しました。REST(レスト)とGraphQL(グラフキューエル)は、そのAPIを設計する際の、代表的な2つの「流儀・作法」のことです。
REST APIとは:決まったメニューから注文する方式
REST APIは、あらかじめ用意された、決まった形式のメニュー(データの取得窓口)から情報を受け取る方式です。例えば「ユーザー情報が欲しいなら、この窓口」「商品情報が欲しいなら、あの窓口」というように、目的ごとに窓口(URL)が分かれています。
この方式のわかりやすい難点は、1つの窓口から得られる情報の中身が固定されているため、本当は3つの情報だけ欲しいのに、その窓口が用意している10個の情報がまとめて送られてきてしまう、といった「もらいすぎ」が起こりやすいことです。逆に、1つの画面を表示するために複数の窓口へ何度も注文を出さなければならず、やり取りの回数が増えてしまう「もらいなさすぎ」が起こることもあります。
GraphQLとは:欲しいものだけをオーダーメイドで注文する方式
GraphQLは、後発の技術として登場した、より柔軟な方式です。利用者が「これとこれの情報だけ欲しい」と具体的に指定すると、指定した情報だけをぴったり返してくれます。
レストランに例えるなら、RESTは「Aセット」「Bセット」という決まったメニューから選ぶスタイル、GraphQLは「このおかずとこのご飯だけ単品で」と、欲しいものだけを自由に組み合わせて注文できるスタイル、とイメージするとわかりやすいです。
それぞれのメリット・デメリット
REST APIのメリット・デメリット
- メリット:仕組みがシンプルで、歴史が長く情報も豊富。学習しやすい
- デメリット:必要以上のデータを受け取ってしまう「もらいすぎ」や、複数回のやり取りが必要になる「もらいなさすぎ」が起こりやすい
GraphQLのメリット・デメリット
- メリット:必要なデータだけを効率よく取得できる。1回のやり取りで複数の情報をまとめて取得しやすい
- デメリット:仕組みがやや複雑で、REST APIと比べて学習コストが高い
比較表で整理する
| 項目 | REST API | GraphQL |
|---|---|---|
| データの取得方法 | 決まった窓口(URL)ごとに固定 | 欲しい項目を自由に指定 |
| 学習のしやすさ | 比較的やさしい | やや複雑 |
| 得意な場面 | シンプルな構成のサービス | 画面ごとに必要な情報が大きく異なる複雑なサービス |
| 歴史・情報量 | 長く、情報が豊富 | 比較的新しく、情報はREST APIほど多くない |
どちらを選ぶべきか、判断のヒント
- 扱うデータの種類が少なく、構成がシンプルな場合 → REST APIで十分なことが多い
- 画面や機能ごとに必要とする情報がバラバラで、通信量を効率化したい場合 → GraphQLが向いている
- チームに知見がなく、まず学習コストを抑えたい場合 → REST APIから始めるのが無難
迷ったら、まずここを基準にする
どちらが優れているというより、扱うデータの複雑さや、アプリの要件によって使い分けられています。まずは歴史が長く情報も豊富なREST APIから理解を深めるのがおすすめです。