RESTについて
RESTについて忘れていたので、ブログに書くことで思い出そうと思います。
かなり、大雑把に書きます。
RESTの原則
主に以下の4つの原則から成る。
- アドレス可能性(Addressability) 提供する情報がURIを通して表現できること。全ての情報はURIで表現される一意なアドレスを持っていること。 - ステートレス性(Stateless) HTTPをベースにしたステートレスなクライアント/サーバプロトコルであること。セッション等の状態管理はせず、やり取りされる情報はそれ自体で完結して解釈できること。 - 接続性(Connectability) 情報の内部に、別の情報や(その情報の別の)状態へのリンクを含めることができること。 - 統一インターフェース(Uniform Interface) 情報の操作(取得、作成、更新、削除)は全てHTTPメソッド(GET、POST、PUT、DELETE)を利用すること。
アドレス可能性
アドレス可能性とは、「URIが備える、リソースを簡単に指し示せる性質のこと」。
リソースとは、「Web上に存在する、名前を持ったありとあらゆる情報」。
- 東京の天気予報 - 私のブログ - ユーチューブのtopページ など
名前は他のものと区別する役割がある。
Web、名前、区別、、、、一意性、つまりURI
- [https://weather.yahoo.co.jp/weather/jp/13/4410.html] - [https://gallard316.hatenablog.com/] - [https://www.youtube.com/]
つまり、リソースの名前がURI!!
きちんと名前がついており、適切な手段でアクセスできる状態がアドレス可能性。
ステートレス性
ステートレス性とは、クライアントのアプリケーション状態をサーバーで管理しないこと。
アプリケーション状態
クライアント側で維持される状態のこと。
例えば、何らかの検索エンジンを使用する際、検索クエリや表示されている検索結果ページは人(クライアント)によって変わってくる。これは検索エンジンでなくても、オークションサイトやショッピングサイト等でも同じことが言える。
このように、クライアント側で維持される状態のことをアプリケーション状態と呼ぶ(サーバ側ではアプリケーション状態を維持しない)。
ログイン状態やカートの中身はサーバー側は本来管理しない。
CookieやセッションはRESTの視点で見ると間違っている。
接続性
リソースには別のリソースへのリンクを含めることができる。リンクを含めることで別のリソースに接続することができる。このように、リソースに含まれるリンクをもとに別のリソースに接続可能となる(遷移可能となる)性質のことを「接続性」と呼ぶ。従来のWebが使いやすいのは、リソースどうしが適切に接続されているからである。
RESTシステムでは、多くの場合、HTML文書またはXML文書を使う。こうした文書に情報およびその他のリソースへのリンクを含める。こうすることにより、あるRESTリソースから他のRESTリソースを参照したい場合は単にリンクを辿るだけでよい
Web本来の強み、リンクで繋がっていること。
統一インターフェース
HTTP1.1では8このメソッドだけしか用意されていない。
- 主なメソッド
GET:リソースの取得 PUT :リソースの更新 POST:リソースの作成 DELETE:リソースの削除
リソースの操作をする時に、全てHTTPメソッドが定義通りに使われることを「統一インターフェース」と呼ぶ。
例えば、リソースを取得する場合、/getResourceのようにURI中に操作を表す語彙(get)を使わず、/resourceのようにしてHTTPのGETメソッドを利用する。
そうすることで、一貫した(統一された)インターフェースを保証している。
ある特定のツイートを取得するなら以下のURIをGETする
/tweets/1
ツイートするならPOSTする
/tweets
URIには名詞、メソッドでは動詞を使用しているイメージ。
まとめ
RESTfulとはRESTっぽい設計にすること。
詳しくは「Webを支える技術」がおすすめ。