2012-11-30

私たちは何を Web っぽいと感じているのか

■ RESTful とは

「Webっぽい」って何でしょう。その質問に対しては「Webっぽい= RESTful だよ」という解答を聞くかもしれません。では「RESTful」って(よく聞くけど)何でしょう。
この疑問を解き明かすため REST について調べました。




つまり REST とは思想だったのです。その思想は下記のような6つの教義を持っています。



■ ULCODC$SS に気をつければ RESTful になる

ULCODC$SS とは "Uniform Layered Code on Demand Client Cache Stateless Server" の略記法で、日本語で意訳すると、「使用出来る機能に制限のある、機能を提供するまでの経路が独立して役割分担された機能を担っている、クライアント側でも制御可能な、情報リソースの使い回し機能を持った、ユーザーの状態を把握しない、クライアントとサーバに分かれた(システム)」ということになります。

  1. クライアント/サーバ
  2. ステートレス
  3. キャッシュ
  4. 統一インターフェース
  5. 階層化システム
  6. コードオンデマンド



■ 質疑応答

1. え、そして私たちは ULCODC$SS を知ってどうすればいいの?
まず、私たちの眼の前にある HTTPサーバ (Apache HTTP server, nginx) や Web ブラウザ (Firefox, Chrome), ロードバランサ (LVS, mod_proxy_balancer, DNSラウンドロビン機能) などの実装がこれらの原則に基いているということを理解できたはずなので、その思想に基いてそれらを利用します。すると新しいシステムやサービスでも、破綻しにくいシステムの設計と実装ができるようになります。
また、「Webって何じゃ?」と困っている人に、この6つの特性を抑えつつ解説ができるようになったはずなので、彼/彼女を導いて下さい。


2. 「階層化」が分からない
階層化は Layered の部分ですが、私が意訳した部分では「機能を提供するまでの経路が独立して役割分担された機能を担っている」に当たります。重要なのは「役割分担」です。Aという機能はBという機能は担わず、単独の機能のみをこなします。これはプログラミングで言うところの「疎結合」の教義と同一線上にあると考えれば分かりやすいでしょうか。
おそらく、なぜ分かりにくいのかと言えば、現実に私達が目にする実装はパッケージ化されているからです。例えば Apache は HTTP サーバの役割のみをこなしているわけではなく、プロキシを利用した負荷分散なども担っています。これは「階層化」に反すると捉えるのではなく、むしろ私たちが利用しやすいようにパッケージ化されているに過ぎないということを理解すべきです。そもそも Apache のモジュールを利用できている事自体、それは「階層化」(を含む REST の思想)の恩恵の賜物なのですから。


3. どうしてキャッシュが $ なの?
英語の cache が「お金」を表すためダラー記号が使われているようです。



■ 参考文献

山本陽平『Webを支える技術』(技術評論社 (2010/4/8))


@ymkjp