yohei-y:weblog

XML と REST/Web サービス関連の話題が中心の weblog です

2005-03-28

REST は XML の王道

最近の僕の日記のエントリを見ていただければわかると思いますが、もう完全に REST に傾倒しています。自分はなんでこんなに REST に惹かれるのだろうと考えてみたんですが、なんとなく答えがわかりました。REST には XML Guy の王道(XML の王道)が具現化されているのです。

いったん話を 1998年に戻しましょう。1998年、僕たちには華々しい未来がありました。それまでの大文字の HTML が XML によってプログラマブルに拡張される。名前空間やリンク機構を生かしてそれまでの Web が大幅に進化する。Jon Bosak の XML, Java, and the future of the Web や村田さんの「XML入門」に語られているような未来です(村田さんたちが訳したJon Bosak の記事の日本語版が見つけられなかった…)。

しかし世の中はその後さまざまな方向に迷走していきました。スキーマ言語戦争だったり、単なる設定ファイルとしての XML 応用だったり(ini や csv の代用…)、バインディングツールだったり。もちろんそれらは重要で、実際に役立つものですが、あまりにも初期の目標から論点がずれてしまったように(今となっては)感じます。そして、その迷走の最たるものが SOAP による Web サービスでしょう。XML による RPC は確かに便利で、ある面(異なるプラットフォーム間で見ると)実用的なものですが、それは XML の王道ではありません。

XML の王道はやはり、インターネットスケールの Web 上でハイパーリンクされた XML インスタンスを無数のプログラムが操作する世界でしょう。それはまさに REST で実現される世界です。だから僕(=XML Guy)は REST にワクワクするんだと思います。

[update 2005-03-31] 村田さんXML, Java, そして Web の将来の日本語訳再公開してくれました。

ラベル: ,

2005-03-21

Mixi の REST コミュニティ

Mixi に REST コミュニティを作りました。REST に興味がある方はぜひ参加してください。

ラベル: ,

2005-03-11

最近のブックマーク

最近の僕のブックマークです。

XML/SWF Charts
XML ソースからグラフを表示してくれる swf cool!
xml-dev - Re: [xml-dev] RELAX NG Marketing (was RE: [xml-dev] Do NamesMatter?)
名前は重要な問題ではない。リラクシングでもリラックスエヌジーでもよし by jjc
Sam Ruby: Distributed State Machines
Sam Ruby が state machine と REST の関係性を説いている。が、Sam ってここまで RESTafarian でいいの:-)
Quoderat » Big, public REST application: Seniors Canada Online
カナダの高齢者向け電子政府システムは REST インターフェースあり。GET しかないし lang は HTTP の Accept-Language でやれよという感じだが、でもちゃんと動いているのはすごい。
Dave Orchard's Blog: WS-REST continued: do we need an HTTP Transfer SOAP binding and simplified WSDL?
Dave が REST/WS を融合させようと必死? 気持ちはわかるけど、価値観の違う二つの世界を融合させるのは本質的に難しそう
Risks to the success of Web services
"loose-coupling != all clients and services have to be updated at the same time" あいかわらず Tim の大人な意見にはそれなりに好感。ただ REST WS の境界はどうするんだろうね
Matrix URIs - Ideas about Web Architecture
階層構造でない URL の記述はセミコロンでやる
[教えて!goo] 結婚しなくちゃダメですか
興味深いことになりそうだったのに最後が低レベルで後味悪し

もっと欲しい人は http://del.icio.us/yoheiをどうぞ

2005-03-09

Restifying excite 翻訳

今日は excite 翻訳の REST インターフェースを考えた。

まずは簡単な翻訳

POST /translation HTTP/1.1
Host: rest.excite.co.jp
Content-Type: application/xml

<?xml version="1.0"?>
<input xmlns="http://ns.excite.co.jp/translation"
    xml:lang="en" out="ja">
REST stands for REpresentational State Transfer.
</input>
HTTP/1.1 OK
Content-Type: application/xml

<?xml version="1.0"?>
<output xmlns="http://ns.excite.co.jp/translation" xml:lang="ja">
REST は REpresentational State Transfer の略です。
</output>

これは以下のようにする案もある。

POST /translation?i=ja&o=en HTTP/1.1
Host: rest.excite.co.jp
Content-Type: text/plain

REST stands for REpresentational State Transfer.
HTTP/1.1 OK
Content-Type: text/xml; charset=utf-8

REST は REpresentational State Transfer の略です。

今度は Web ページ翻訳の例。

POST /translation HTTP/1.1
Host: rest.excite.co.jp
Content-Type: application/xml

<?xml version="1.0"?>
<input xmlns="http://ns.excite.co.jp/translation"
    xml:lang="en" out="ja" type="url">
http://rest.blueoxen.net/cgi-bin/wiki.pl
</input>
HTTP/1.1 OK
Content-Type: application/xml

<?xml version="1.0"?>
<output xmlns="http://ns.excite.co.jp/translation" xml:lang="ja">
  <html xmlns="http://www.w3.org/1999/xhtml">
    <!-- 翻訳したもの -->
  </html>
</output>

これも以下のほうが使いやすいかもしれない

POST /translation?i=ja&o=en HTTP/1.1
Host: rest.excite.co.jp
Content-Type: text/plain

http://rest.blueoxen.net/cgi-bin/wiki.pl

http:// で始まるので Content-Type などから類推する。

HTTP/1.1 OK
Content-Type: text/html; charset=Shift_JIS

<HTML>
  <!-- 翻訳結果 -->
</HTML>

REST の雰囲気わかるかな?

ラベル: ,

2005-03-08

RESTful 英辞郎

英辞郎の REST インターフェースを考えてみた。非常にもっともらしい URL やホスト名や名前空間を使ってますが、完全にフィクションなのでそこのところをよろしく。

restful という単語を検索

GET /?word=restful HTTP/1.1
Host: rest.alc.co.jp

結果は一つ

HTTP/1.1 OK
Content-Type: application/xml

<?xml version="1.0"?>
<result-list xmlns="http://ns.alc.co.jp/eijiro">
  <word>restful</word>
  <count>12</count>
  <result>
    <pronounciation>レストゥフル</pronounciation>
    <pronounciation>レストフル</pronounciation>
    <basic-block><block>rest</block><block>ful</block></basic-block>
    <acceptation type="adjective">休息を与える</acceptation >
    <acceptation type="adjective">安らかな </acceptation>
  </result>
  <result>
  ...
</result-list>

rest という単語を検索

GET /?word=rest HTTP/1.1
Host: rest.alc.co.jp

結果はたくさん

HTTP/1.1 OK
Content-Type: application/xml

<?xml version="1.0"?>
<result-list xmlns="http://ns.alc.co.jp/eijiro">
  <word>restful</word>
  <count>3293</count>
  <result>
    <level>2</level>
    <pronounciation>re'st</pronounciation>
    <pronounciation type="kana">レスト</pronounciation>
    <inflections type="verb">rests resting rested</inflections>
    <item type="noun">
      <acceptation>休息</acceptation >
      <acceptation>睡眠</acceptation >
      <acceptation>眠り</acceptation >
      <acceptation>休養</acceptation >
      <acceptation>静養</acceptation >
      <acceptation>保養</acceptation >
      <example>
        <en>Get a good night's rest.</en>
        <ja>ゆっくりお休みなさい。</ja>
      </example>
      <example>
        <en>I think you'll need some rest.</en>
        <ja>君には少し休息が必要だ。</ja>
      </example>
    </item>
    <item type="intransitive verb">
      <acceptation>休む</acceptation>
      <acceptation>休息する</acceptation>
      <acceptation>休憩する</acceptation>
      <acceptation>休養する</acceptation>
      <acceptation>眠る</acceptation>
    </item>
    <item type="intransitive verb">
      <acceptation>静止する</acceptation>
    </item>
    <item type="intransitive verb">
      <acceptation>(物がある場所{ばしょ}に)ある</acceptation>
      <acceptation>置かれている</acceptation>
      <example>
        <en>Swans rest elegantly on the water.</en>
        <ja>水面には白鳥が優雅にたたずんでいる。</ja>
      </example>
    </item>
    <item type="intransitive verb">
      <acceptation>~次第である</acceptation>
    </item>
    ...
  </result>
  ...
  <next>http://rest.alc.co.jp/?word=rest&offset=50</next>
</result-list>

rest を検索で offset を 50 に指定

GET /?word=rest&offset=50 HTTP/1.1
Host: rest.alc.co.jp

結果が変わる

HTTP/1.1 OK
Content-Type: application/xml

<?xml version="1.0"?>
<result-list xmlns="http://ns.alc.co.jp/eijiro">
  <word>restful</word>
  <count>3293</count>
  <offset>50</offset>
  <result>
    ...
  </result>
  ...
  <next>http://rest.alc.co.jp/?word=rest&offset=100</next>
</result-list>

日本語の検索の例

GET http://rest.alc.co.jp/?word=レスト&ie=utf-8 HTTP/1.1

結果は面倒なので省略

ラベル: ,

2005-03-07

AJAX と REST

日本では AJAX が流行りまくっているようですね。でも AJAX と対になるはずの REST に言及している blog はあんまり見かけません。そんなものなのかしらん。ちょっと期待してただけに残念。しかし JavaScript にしても XMLHTTPRequest(もとは ActiveX コントロール)にしても、マイクロソフトがはじめたころは良い顔しなかったのに、Google とか cool (といわれる)な陣営が使ったとたん流行るというのも、不思議な気がするなあ。技術の本質を見抜く目が必要だと感じる今日この頃です。