REST とは
REpresentational State Transfer の略です。
システムのアーキテクチャを構成するための設計原則です。
リソース
リソースはRESTを理解するうえでの大切な概念です。
リソースとは、
- ウェブ上に存在する情報
- URIによって一意に決まる
- 複数のURIを持つことがある
一例ですが、ウェブ上に存在する天気情報などがそれにあたります。
架空ので天気に関する情報を、教えてくれるAPIがあるとします。今日が2020/06/08だとします。
https://kakutenki/today
https://kakutenki/20200608
上記の二つのURIに対してGETメソッドでアクセスします。どちらのURIで2020/06/08のお天気情報にアクセスしたとしても、2020/06/08のお天気が帰ってきます。つまり、それぞれのURIがウェブ上に存在する情報に一意にアクセスしています。
ROA
Resource Oriented Architecture の略です。
ROAに関してはこちらの記事が非常に参考になりました。詳細は記事を確認して欲しいのですが、すごく簡単に説明すると、リソースを中心に考えるアーキテクチャです。以下の特徴を持っています。
-
アドレス可能性
URIによってリソースを一意に特定できる性質のこと -
ステートレス性
サーバー側では状態の管理を行わない。Cookie 等によるセッション管理なども行わない。 -
接続性
リソースがリンクによって繋がっていること。 -
統一インタフェース
リソースに対する操作を限定したインタフェース。RESTにおいてはHTTPメソッドがそれに当たる。
REST の定義
REST は2000年に、Roy T. Fielding さんの博士論文の中で定義されたました。6つの原則を掲げています。
- クライアント・サーバー
- ステートレス
- キャッシュ
- 統一インタフェース
- 階層化インタフェース
- コード・オン・デマンド
REST vs RESTful
REST と RESTful は、しばしば同じものとして扱われている記事を目にしますが、筆者は別物だと考えています。
REST はあくまで設計原則です。名詞です。
RESTful は形容詞です。つまり何かの名詞と組み合わせて使います。よくある組み合わせとして RESTful API を見かけます(これしか知らない...)。つまり、RESTで定義されている設計原則にしたがって構築されたAPIという意味になります。たまに、REST API も見かけますが、これは複合名詞にしているので、相違意味では、REST と RESTful は同義だと言えるかもしれません。
ただ、筆者が留意したいのは、RESTは設計原則であり、RESTfulは設計原則にしたがって作った何かというものです。細かいですが、RESTfulという表現は大切だと思います。よなぜなら世の中のほとんどのRESTっぽいアーキテクチャであり、それぞれが必要に応じて柔軟にアーキテクチャを修正しているからです。
参考
https://qiita.com/aosho235/items/125af74e2eab66c7a816
https://qiita.com/NagaokaKenichi/items/0647c30ef596cedf4bf2
https://qiita.com/NagaokaKenichi/items/0f3a55e422d5cc9f1b9c
Webを支える技術