前提
抽象的な概念。具体化しづらいことが難しいと感じるが全然難しくない。結局何者なのか?と聞かれたら、Webアプリケーションの設計規約。
原則
- ステートレスなクライアント/サーバープロトコル
- 全ての情報(リソース)に適用できるHTTPメソッドのセット
- リソースを一意に識別。
- ハイパーメディア(リンクのこと)を使用
◯ ステートレスなクライアント/サーバープロトコル
RESTな考え方では、サーバーへのリクエストも、クライアントへのレスポンスもステートレスであることが必要。
◯ 全ての情報(リソース)に適用できるHTTPメソッドのセット
RESTな考え方では、リソースはそれぞれ固有のURIを持っており、それぞれのURIに対して、基本的に4つのHTTPメソッドでリクエストすることで、全てのリソースに対する操作を行う。4つのHTTPメソッドとは、
メソッド | 役割 |
---|---|
GET | リソースの取得 |
POST | リソースの新規作成 |
PUT | 既存リソースの更新 |
DELETE | リソースの削除 |
◯ リソースを一意に識別
RESTな考え方では、すべてのリソースはURIで表されるユニークなアドレスを持つ。
◯ ハイパーメディア(リンクのこと)を仕様
今では結構当たり前。パソコンのOSに保存された設定情報に依存せずにリソースにリクエストすること。つまり、どのパソコンでも同じレスポンスが返ってくるリンクをHTMLとかXMLに含める。
※ クッキーとセッションを用いたアプリケーションはRESTではない。
RESTはあくまで、固有のHTTPメッセージ(リクエスト/レスポンス)に対して、固有の表現を表示する。つまり、クライアント側はサーバーからのレスポンスをただ一意に読みこめば良い。逆にサーバー側もただ、クライアント側のリクエストを一意に返せば良い。しかし、クッキーとセッションの仕組みは、クライアント側(ブラウザ)にアクセスするためのクッキーを一時的に保存させてある。(だからログイン状態が保持される。)
つまり、HTTPレスポンスは同じでも、クライアント側がクッキーを保持していなければ、違う結果が表れてしまうという、RESTではない仕組みになっている。が、クッキーとセッションの仕組みはウェブアプリケーションにとって不可欠な仕組みである。
まとめ
- 全ての情報はリソースと表現
- リソースに対するURIは一意
- リソースを4つのHTTPメソッドで操作
- メッセージ(リクエスト/レスポンス)はステートレス
- OSの設定情報に依存しない
RESTfulとは?
RESTらしい〜Webサービス・システムのこと。
REST理論のメリット
- アプリケーション中のリソースがURIによって参照できる。
- ステートレスにすることで、スケーラビリティが向上(一番のメリット)
- シンプルで一貫性のある設計。リソースへの操作はCRUDの4種類という制約
- 標準的なデータフォーマット(XML/JSON)を扱うことでほかサービスとの連携が容易になる。
- REST理論に基づいたWEBアプリでは、インターフェースが固定されてるので、互換性の問題が発生しない。
RailsにおけるRESTfulとは?
- 一つのモデルを、一つのリソースの集合(コンポーネント)と捉えている。
- RDBMS(Relational DataBase Management System)の作成/読み取り/更新/削除(CRUD)操作と、4つの基本的なHTTP requestメソッド(GET/POST/PUT/DELETE)の両方に対応している。