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を支える技術」がおすすめ。

qiita.com

qiita.com

ja.wikipedia.org