2005-05-30

REST 入門(その10) 終わりに

» REST 入門 目次

前回まで、REST 入門ということで、 REST アーキテクチャスタイルとは何なのか、 について基礎的なところを結構細かく :-) 説明してきました。 REST 入門はこれで終わりですが、最後にロイ・フィールディングの論文から REST アーキテクチャスタイルの各制約を抜き出して説明します。

Null スタイル
最初は、制約がまったくないところからはじまります。それが Null スタイルです。
クライアント・サーバ
最初の制約はクライアント・サーバです。REST がクライアント・サーバから派生していることは、 "2. アーキテクチャスタイルとは" で解説しました。
ステートレス
REST スタイルにおいて、サーバはクライアントの状態を管理しません。すべての状態はクライアントで持ちます。 クッキーでの状態管理が REST でないことは "8. REST でないもの" で説明しました。
キャッシュ
REST スタイルではサーバが返す結果をクライアントでキャッシュ可能なように設計します。 これによりネットワーク効率を向上させることができます。
統一インターフェース
REST の制約で最も特徴的なのがこの統一インターフェースです。 クライアントはどんなシステムとでも同じインターフェースで接続できます。 統一インターフェースについては "4. HTTP GET -- その絶大な効果"と "5. 四つの動詞 -- GET, POST, PUT, DELETE"で説明しました。
階層化システム
このシリーズでは説明しませんでしたが、REST スタイルの制約にシステムを階層化できることがあります。 これにより、たとえばロードバランサーでの負荷分散や、レガシーシステムのラッピング、proxy サーバなどが可能になります。
コードオンデマンド
この制約も説明していません。 REST では、クライアントがコードをサーバからダウンロードして実行することができます。 たとえば Javascript ですね。ただし、この制約はオプションです。

終わりに

僕がこの REST 入門シリーズを書いた目的は二つあります。 ひとつは「目次」で書いたとおり、日本語での REST の基礎的な資料を作るためです。 日本では Amazon Web サービスの REST API のような単純な XML over HTTP としてしか REST が認識されておらず、 往々にして間違った議論がされていたり、あるいはアーキテクチャスタイルとしての REST が注目されていなかったりします。 しかし REST は Web における次の5年の(もっとか?)基盤技術であると、僕は思っています。 各個人がどう評価するかはともかく、REST を知らずに Web を語ったり議論したりするのは非常に危ういと思うのですね。 そういう意味で、REST 周辺の言葉を整理して (Architectural Style の日本語訳も悩んだのです)、 日本でもちゃんと話ができるようにしたかった。 結果としては naoya さんに紹介してもらって僕の weblog のページビューも10倍くらいになりましたし、 WWW2005 後くらいから REST で検索してくる人が非常に多くなったので、 このシリーズをやってよかったなと思ってます。

もうひとつ、僕が言いたかったことは、せめて技術者が技術に接するときは純粋にそれを技術として評価しよう、ということです。 SOAP や WS-* の世界は、ベンダの対立など半ばゴシップ的な記事が IT 系ニュースサイトの紙面を躍らせるので、 どうしても脊髄反射的に「だから WS-XX は駄目なんだ」とか言いたくなるのですが、それは変なんですよね。 WS-* は確かに重くてすべてを理解するのは大変なんですけど、 Microsoft や IBM が無意味にあんなにリソースを割いて推進するわけがないのです(ハロウィン文書の例の戦略だ、というハナシもありますが)。

たとえば WWW2005 のパネルで SOAP/WS-* を厳しく批判していた Tim BrayAdam Bosworth は SOAP/WS-* のことを何も知らずに批判しているわけではないのです。 むしろ、知っているからこそ批判できるんです。 SOAP/WS-* 側の人間にしても同じです。 Don BoxJeffrey Schlimmer, Dare Obasanjo, Tim Ewald, Dave Orchard みんな REST のことはきちんと知っている。 だいたい Dave Orchard と Tim Bray なんてランチしてたりするし、 その他の人々も W3C のメーリングリストやミーティングなんかでちゃんと交流して議論しているわけです。 そういえば Tim Bray だって昨年の XML Developers' Conference (Microsoft よりのカンファレンス)で講演してました。

とまあ、僕も偉そうなこと書いてる割に REST をきちんと評価したのは昨年の8月くらいだったりします。 それまでは Web サービス = SOAP/WSDL で RPC だったんですが、 document/literal になってからイマイチわからなくなってしまった。 で、いろいろ調べたり考えたりしてやっと REST にたどり着きました。 「REST は XML の王道」とかキャッチーなことも書いてますが、 REST 万歳、SOSP/WS-* ダメダメと言うつもりはなくて、 両方ちゃんと評価しよう、ということです。

この weblog の今後ですけど、シリーズものだと普段はあまり気が乗らない基本的なことも書く気がおきてよい感じなので、 もう一回やってみようかと思ってます。 題材は今話題の(?) Web 2.0 にするつもり。 ではまた。

4 件のコメント:

  1. はじめまして。
    RESTはURLに適当にパラメーターをつけて気軽に使えるWebサービスだというくらいの認識しかありませんでしたが、Blogを読ませていただいて本来の意味が理解できました。HTTPでDELやPUTなんて使ったことはありませんでした。セマンテック的にはCGIやServletでやってたことってルール違反だったんですね。
    SOAPでWebサービスプログラムを作ったことがありますが、わけのわからないコードをいっぱい生成しなければいけないので面倒です。それに私の周りではWS-*を使わなければいけない場面があまりないですね。これからはRESTも候補にいれてシステム開発したいと思います。

    返信削除
  2. 「REST入門」を興味深く拝読しました。たいへん分かりやすく書かれていて、示唆に富むこと大でありました。私自身はantiRESTアプリケーションをこれからも作り続けていくことになるのでしょうが、RESTという別の視点を得られたことは有意義でありました。ぜひ「Web2.0」を執筆していただきたいです。

    返信削除
  3. REST 入門。とても分かりやすくて勉強になりました。
    ついでに誤字の指摘を。
    > たとえばロードバランサーでの不可分散や
    「負荷分散」の間違いでは?

    返信削除
  4. > 「負荷分散」の間違いでは?

    ありがとうございます。直しました。

    返信削除