4章
リソース指向アーキテクチャ(ROA)

2008/05/10 第2回RESTful本読書会
岩本隆史<hello@iwamot.com>

4.1 なぜリソース指向という
用語を作るのか

4.1 なぜリソース指向という用語を作るのか

Q. 単にRESTじゃダメなの?

A. ダメ。理由は3つ。

4.1 なぜリソース指向という用語を作るのか

A. まず、RESTはアーキテクチャではない。だから、本書で提案するアーキテクチャをRESTとは呼べない。

Q. …アーキテクチャって?

4.1 なぜリソース指向という用語を作るのか

【アーキテクチャ】
ハードウェア、OS、ネットワーク、アプリケーションソフトなどの基本設計や設計思想のこと。
アーキテクチャとは 【architecture】 - 意味・解説 : IT用語辞典

4.1 なぜリソース指向という用語を作るのか

A. 明確な定義こそないものの、本書では「アーキテクチャ」を「基本設計」の意味で使っている。RESTは基本設計ではなく、一連の設計条件だ(ULCODC$SS)。

4.1 なぜリソース指向という用語を作るのか

【ROA】
RESTという設計条件をなるべく満たす(=RESTfulな)Webサービスの基本設計のこと。

4.1 なぜリソース指向という用語を作るのか

Q. 用語を作る理由の2つめは?

A. ROAは、RESTの空白部分を補うものだから、RESTとは呼べない。

Q. kwsk

4.1 なぜリソース指向という用語を作るのか

4.1 なぜリソース指向という用語を作るのか

A. 最後の理由。「REST」は宗教戦争用語だから、使いたくない。

Q. mjsk

4.1 なぜリソース指向という用語を作るのか

Q. おとなの知恵だな…

4.1 おわり

4.2 リソースとは何か

4.2 リソースとは何か

Q. ちょっと待った! なんでいきなりリソースの話になるの? そりゃROAだからResourceの話が出るのは分かるけど、「RESTfulなWebサービスの基本設計」が「リソース指向」になる脈略が分からない。

4.2 リソースとは何か

A. Roy Fieldingの論文は読んだかい? 「5.2.1 Data Elements」に「REST components communicate by transferring a representation of a resource」とある。

4.2 リソースとは何か

A. つまり、「REpresentational State Transfer」(REST)の「State」とは、「リソースの状態」のことなんだ。

Q. なるほど。じゃあ、リソースの定義を教えれ。

4.2 リソースとは何か

4.2 おわり

4.3 URI

4.3 URI

Webにおいて、リソースがリソースであるためには、URIを少なくとも1つは持っていなければならない。

4.3.1 URIは記述的であるべき

4.3.1 URIは記述的であるべき

【記述的】
リソースとURIを直感的に対応させること。
例:/search/Jellyfish
○:/search/Mice
×:/i-want-to-know-about/Mice

4.3.1 URIは記述的であるべき

4.3.2 URIとリソースの関係

4.3.2 URIとリソースの関係

4.3.2 URIとリソースの関係

希薄化を回避するには、1つのURIを正規URIとし、非正規URIへのアクセス時に下記いずれかの処理を行う。

4.3 おわり

4.4 アドレス可能性

4.4 アドレス可能性

【アドレス可能性】
アプリケーションがそのデータセットの重要な部分をリソースとして公開していること。

4.4 アドレス可能性

Q. 先生! その「アドレス可能性」は、RESTのどの設計条件から導けるんですか?

A. 「ULCODC$SS」の「$」(Cache)制約から導けるという理解で良いんじゃないだろうか。

4.4 アドレス可能性

4.4 おわり

4.5 ステートレス性

4.5 ステートレス性

【ステートレス性】
すべてのHTTPリクエストが完全に分離していること。
RESTの設計条件「ULCODC$SS」のひとつ。

4.5 ステートレス性

ステートフルな例

  1. /search?q=mice
  2. start=10

4.5 ステートレス性

ステートレスな例

4.5 ステートレス性

セッションIDをCookieやURIに埋め込むと、ステートレス性が無効(ステートフル)になる。

4.5.1 アプリケーション状態と
リソース状態

4.5.1 アプリケーション状態とリソース状態

4.5.1 アプリケーション状態とリソース状態

アプリケーション状態

4.5.1 アプリケーション状態とリソース状態

リソース状態

4.5.1 アプリケーション状態とリソース状態

アプリケーション状態をサーバーが維持するケース

4.5 おわり

4.6 表現

4.6 表現

サーバーはリソースを特定のファイル形式と特定の言語で送信しなければならない。このときのファイル形式や言語のことを「表現」と呼ぶ。

4.6.1 表現の選択

4.6.1 表現の選択

プレスリリースに日本語版と英語版があるケース

A. 個別のURIを割り当てる方法(著者推奨)

4.6.1 表現の選択

プレスリリースに日本語版と英語版があるケース

B. コンテンツネゴシエーションを使う方法

4.6.1 表現の選択

言語以外にも表現の選択に使われるメタデータがある。

4.6 おわり

4.7 リンクと接続性

4.7 リンクと接続性

【接続性】
リソース同士が相互にリンクされていること。
リンクをたどったり、フォームを送信したりするだけで他のリソースへアクセスできるのは、接続性のおかげ。

4.7 リンクと接続性

Q. 先生、ごぶさたです! その「接続性」は、RESTのどの設計条件から導けるんですか?

A. 「ULCODC$SS」の「L」(Layered)制約から導けるという理解で良いと思う。接続性が低ければ、クライアントがサーバのURI構成を知っている必要がある。「システムの知識を単一階層に限る」のがLayered制約。

4.7 リンクと接続性

Amazon S3のバケットリストは接続性が低い

4.7 おわり

4.8 統一インターフェイス

4.8.1 GET、PUT、DELETE

4.8.1 GET、PUT、DELETE

4.8.2 HEADとOPTIONS

4.8.2 HEADとOPTIONS

4.8.3 POST

4.8.3 POST

従属リソースの作成

4.8.3 POST

リソース状態へのアペンド

4.8.3 POST

オーバーロードPOST:統一性の低いインターフェイス

4.8.4 安全性とべき等性

4.8.4 安全性とべき等性

安全性

4.8.4 安全性とべき等性

べき等性

4.8.4 安全性とべき等性

安全性とべき等性はなぜ重要なのか

4.8.5 統一インターフェイスは
なぜ重要なのか

4.8.5 統一インターフェイスはなぜ重要なのか

4.8 おわり

4.9 まとめ

4.9 まとめ

ROAに登場する概念

4.9 まとめ

ROAのもつ特性

4.9 おわり

以上

ありがとうございました!