一覧1000件の関連を資源ごとに引くと、往復は1001回になります。
まとめて引けば2回です。返す行はどちらも同じで、差は往復だけから来ています。
何をすればRESTかは、複数の制約として示されています。守る範囲は自分で決めることになります。
REST APIの土台になる考え方を、出典はこう定めています。
RESTとは、効率的で、信頼でき、規模を広げられる分散した系をもたらす、ソフトウェアの構造の設計上の制約の集まりを指すという記述です。
「制約の集まり」です。1つの仕様書があるわけではありません。
実務では、1番目と2番目だけを守っている場合が多くあります。それでも「RESTらしい」と呼ばれます。
3番目を守ると、受ける側は前回のやりとりを覚えません。だから台を増やしやすくなります。
その代わり、必要な情報を毎回送ることになります。1回あたりの量が増えるのはこのためです。
この記事では、1番目を守ったときに何が起きるかを数えます。資源を単位にすると、往復の回数が変わります。
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
資源を単位にすると、必要な資源の数だけ呼ぶことになります。差は往復だけから出ます。
REST APIで運ばれるのは資源です。出典はRESTの基本の考えは、文書のような資源が、広く認められた、言語に依らない、確実に標準化された、依頼する側と受ける側のやりとりを通じて転送されるということであると述べています。
資源が単位なので、必要な資源の数だけ呼びます。その回数を数えました。
一覧を出したあと、各行の関連を引く場面です。返す行の数はどちらも同じにしてあります。
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はすべて往復でした。
呼ぶ側の書き方だけでは直りません。まとめて返す資源を用意することになります。
4番目は効きません。同時に投げても、1001回は1001回です。減るのは待ち時間だけで、回数は残ります。
1往復の重さによって、この差の大きさが変わります。その幅はSQLiteの記事で測っていて、0.001msなら1.5倍まで縮みました。
返す行は同じ。差は往復の回数だけから来ている。
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回の要求を行ったときに受ける側へ意図される効果が、同一の要求を複数回行ったときの効果と同じである場合をいうと定めています。
この性質があると、返事が来なかったときに送り直せます。なければ送り直せません。
4番目だけが違います。返事が来なかったときに送り直すと、二重に作られるおそれがあります。
解く方法は、呼ぶ側が印を付けて、受ける側がその印で重複を弾くことです。印がなければ判断できません。
もう1つの注意は、返る量です。資源の形が決まっているので、使わない項目も返ります。
注文の記録 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つです。
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
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る