REST(Representational State Transfer、レスト)は、今や至るところで使われているソフトウエアアーキテクチャーと言ってよいだろう。Web経由で公開するAPI(アプリケーション・プログラミング・インターフェース)は、ほぼRESTに基づく実装になっているからだ。こうした実装を「RESTful」と呼ぶ。
最近、このRESTの定義に言及する記事を担当することになって、その定義を調べた結果、実はよく言われている定義が間違ってはいないまでも必ずしも正確ではないという意外な事実が分かった。
まずWebをつらつら検索して調べてみた。おおむね共通していたのは、
- RESTはアーキテクチャーであって実装ではない
- 4つの原則がある
といった辺りだ。
日本語版のWikipediaによると4つの原則は以下の通りになる。
- ステートレスなクライアント/サーバプロトコル
- すべての情報(リソース)に適用できる「よく定義された操作」のセット
- リソースを一意に識別する「汎用的な構文」
- アプリケーションの情報と状態遷移の両方を扱うことができる「ハイパーメディアの使用」
他の文書でもおおむねこれに似たことが4原則として挙げられている。ただ4つの原則の表現が微妙に異なる。HTTP(HyperText Transfer Protocol)のメソッドに言及しているものもあれば、データ形式にXML(eXtensible Markup Language)やJSON(JavaScript Object Notation)を使うと書いてあるものもあった。
この辺りで「あれ?」と思うことになる。HTTPもXMLもJSONも実装である。まあ典型的なRESTの例としてこうした実装を持ち出すのは理解できる。しかし、どうもそれが原則なのか例なのかが今ひとつ判別し難い書き方も少なくない。それに、お題目を説明する際に「それがどういうことか」を説明するのではなく、いきなり例で解説しようとするのが気に入らない。
分からない場合は一次ソースに当たるのが一番だ。そこでロイ・フィールディング氏の原著論文「Architectural Styles and the Design of Network-based Software Architectures」(2000年発表)を読んでみた。180ページにも及ぶ結構な分量なので、全部ではなく主にRESTを定義している第5章を中心にした。
関連リンク Architectural Styles and the Design of Network-based Software Architectures by Roy Thomas Fieldingそこでまず気付いたのだが、この論文には「4つの原則」とは書いていない。どうもそれらしいと感じたのが「アーキテクチャーを導き出したプロセス」として説明するセクションの6つの見出しだ。
- Client-Server(クライアント-サーバー)
- Stateless(ステートレス)
- Cache(キャッシュ)
- Uniform Interface(統一したインターフェース)
- Layered System(階層システム)
- Code-On-Demand(オンデマンドのコード)
とある。このほか同じセクションには見出しとして「Starting with the Null Style(ヌルスタイルから始める)」と「Style Derivation Summary(スタイル導出のまとめ)」もあるが、これらは話題の整理のために入れているものだ。RESTの定義には直接関係しない。
これら6項目をみると、いわゆる「4つの原則」と内容的には重なる部分が多い。そこで改めて思い起こしてみると、Webを検索していたときに見かけた文書の中にも「原則のうち主要なもの」という表現や「主に」などの表現をしている例も少なからずあった。
どうやらこの6項目のうち、重要だとして4つに整理したものがいつの間にか一人歩きをして、「4つの原則」と呼ばれるようになったのだろう。ちなみに2021年9月半ばの時点で、米国のWikipediaにはこの6項目が「Architectural constraints(アーキテクチャー上の制約)」として並べられている。また原文でも「アーキテクチャー内の要素に適用される一連の制約で構成されるアーキテクチャースタイル」と書いてあるので、米国版Wikipediaの表現は原著論文に即しているといえる。