アプリ/フロント基盤

REST APIとは|資源ごとに引くと、返す量が同じでも往復が1001回になった

何を単位にする設計なのか資源ごとに引くと何が増えるのか同じ呼び出しを繰り返してよいのか

一覧1000件の関連を資源ごとに引くと、往復は1001回になります。

まとめて引けば2回です。返す行はどちらも同じで、差は往復だけから来ています。

この記事の要点

  • 資源ごとで1001回
  • まとめて2回
  • 差は223.0倍
  • 1項目なら量は3.0倍

決まりの集まりであって、1つの仕様ではない

何をすればRESTかは、複数の制約として示されています。守る範囲は自分で決めることになります。

REST APIの土台になる考え方を、出典はこう定めています。

RESTとは、効率的で、信頼でき、規模を広げられる分散した系をもたらす、ソフトウェアの構造の設計上の制約の集まりを指すという記述です。

「制約の集まり」です。1つの仕様書があるわけではありません

どこまで守るか

  1. 資源を単位にする。名前で指し示せるようにする
  2. やりとりを標準化する。同じ方法の意味を揃える
  3. 状態を持ち越さない。1回のやりとりで完結させる
  4. 返し方を統一する。形式と誤りの伝え方を揃える

実務では、1番目と2番目だけを守っている場合が多くあります。それでも「RESTらしい」と呼ばれます

守ることの代償

3番目を守ると、受ける側は前回のやりとりを覚えません。だから台を増やしやすくなります。

その代わり、必要な情報を毎回送ることになります。1回あたりの量が増えるのはこのためです。

この記事では、1番目を守ったときに何が起きるかを数えます。資源を単位にすると、往復の回数が変わります。

出典MDN Web Docs「REST(用語集)」2026-08-18 確認
REST (Representational State Transfer) refers to a group of software architecture design constraints that bring about efficient, reliable and scalable distributed systems.
原文MDN Web Docs「REST(用語集)」 この内容の有効期限2027-02-18

資源ごとに引くと、返す量が同じでも往復が1001回になる

資源を単位にすると、必要な資源の数だけ呼ぶことになります。差は往復だけから出ます。

REST APIで運ばれるのは資源です。出典はRESTの基本の考えは、文書のような資源が、広く認められた、言語に依らない、確実に標準化された、依頼する側と受ける側のやりとりを通じて転送されるということであると述べています。

資源が単位なので、必要な資源の数だけ呼びます。その回数を数えました。

一覧の件数を変える

一覧を出したあと、各行の関連を引く場面です。返す行の数はどちらも同じにしてあります。

text
1往復 0.8ms、1行を返す手間 0.002ms として計算する
一覧の件数を変えて、1件ずつ引く場合とまとめて引く場合を比べる

一覧の件数  1件ずつ(往復)  1件ずつ(時間)  まとめて(往復)  まとめて(時間)  比
10件                     11回            8.8ms                2回             1.6ms     5.4倍
50件                     51回           40.9ms                2回             1.7ms    24.1倍
200件                   201回          161.2ms                2回             2.0ms    80.6倍
1000件                 1001回          802.8ms                2回             3.6ms   223.0倍

1000件では往復が1001回、時間は802.8msです。まとめれば2回・3.6msになります。

行を返す手間はどちらも2.0msです。残りの800.8msはすべて往復でした。

資源の形で解く

呼ぶ側の書き方だけでは直りません。まとめて返す資源を用意することになります。

  1. 関連を含めて返す資源を足す。1回で済む
  2. 複数の識別子をまとめて受ける口を足す。2回で済む
  3. 一覧の資源に必要な項目を含める。追加の呼び出しが要らなくなる
  4. 呼ぶ側でまとめる。同時に投げても往復の数は変わらない

4番目は効きません。同時に投げても、1001回は1001回です。減るのは待ち時間だけで、回数は残ります。

1往復の重さによって、この差の大きさが変わります。その幅はSQLiteの記事で測っていて、0.001msなら1.5倍まで縮みました。

返す行は同じ。差は往復の回数だけから来ている。

1000件を資源ごとに行を返す手間往復の分801803ms1000件をまとめて3.6ms10件を資源ごとに8.8ms1往復0.8msとして計算。行を返す手間はどの場合も同じで、差はすべて往復の分に出る。
図1 ── 一覧の件数と、かかる時間の内訳
出典MDN Web Docs「REST(用語集)」2026-08-18 確認
The basic idea of REST is that a resource, e.g., a document, is transferred via well-recognized, language-agnostic, and reliably standardized client/server interactions.
原文MDN Web Docs「REST(用語集)」 この内容の有効期限2027-02-18

繰り返してよい呼び出しと、そうでない呼び出しがある

失敗したときに再試行してよいかは、方法によって決まります。ここを混ぜると二重に処理されます。

REST APIでは、方法ごとに繰り返してよいかが決まっています。出典はあるHTTPの方法がべき等であるとは、1回の要求を行ったときに受ける側へ意図される効果が、同一の要求を複数回行ったときの効果と同じである場合をいうと定めています。

この性質があると、返事が来なかったときに送り直せます。なければ送り直せません。

送り直せるかで分かれる

  1. 取り出す。何度呼んでも同じ。送り直してよい
  2. 置き換える。同じ内容なら結果は同じ。送り直してよい
  3. 消す。2回目は対象がない。結果としては同じ
  4. 作る。呼ぶたびに増える。送り直せない

4番目だけが違います。返事が来なかったときに送り直すと、二重に作られるおそれがあります。

解く方法は、呼ぶ側が印を付けて、受ける側がその印で重複を弾くことです。印がなければ判断できません。

資源の形で余分が返る

もう1つの注意は、返る量です。資源の形が決まっているので、使わない項目も返ります

text
注文の記録 200,000件。行ごとに並べると1件 12バイト・合計 2.3MB
一部の項目だけを読むとき、実際に触る量を比べる

読む項目            行ごと(触る量)  列ごと(触る量)  比
金額だけ                           2.3MB             0.8MB    3.0倍
金額と日                           2.3MB             1.1MB    2.0倍
分類と金額と日                        2.3MB             1.3MB    1.7倍
全部                             2.3MB             2.3MB    1.0倍

1項目しか使わない場合、3.0倍の量が動きます。資源をまるごと返す形の代償です。

ただし全項目を使う画面では1.0倍で、差がありません。余分かどうかは、使う側で決まります。

余談 この計測での注意

往復の0.8msと1行あたり0.002msは置いた値です。同じ機械の中ならもっと短くなり、遠くにあれば長くなります。返る量の計測も、行ごと・列ごとの並べ方から計算したもので、実際の応答は形式によってさらに大きくなります。ここで見せているのは、資源を単位にすると往復の回数が件数に比例すること、その差が往復の重さで決まることの2つです。

出典MDN Web Docs「Idempotent(用語集)」2026-08-18 確認
An HTTP method is idempotent if the intended effect on the server of making a single request is the same as the effect of making several identical requests.
原文MDN Web Docs「Idempotent(用語集)」 この内容の有効期限2027-02-18

よくある質問

REST APIは何を単位にしますか
資源です。文書のような資源が、広く認められた標準的なやりとりで受け渡されます。
資源ごとに引くと何が増えますか
往復です。一覧1000件なら1001回で、まとめて引く2回との差は223.0倍でした。
余分な項目も返りますか
資源の形で返るためです。1項目しか使わない場合、触る量は3.0倍になりました。
同じ呼び出しを繰り返してよいですか
方法によります。何度繰り返しても1回と同じ結果になる方法だけが、繰り返して安全です。

まとめ

  • 資源を単位にする
  • 資源ごとに引くと往復が増える
  • 資源の形で余分も返る
  • 繰り返せる方法を選ぶ

今日から始められること

  1. 1画面あたりの呼び出し回数を数える
  2. まとめて引ける箇所を探す
  3. 使っていない項目が返っていないか見る
  4. 再試行してよい呼び出しを整理する

実務で組んだREST APIのワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る