<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9037301</id><updated>2011-11-25T23:10:14.882+09:00</updated><category term='feeds'/><category term='ws-star'/><category term='xmldevday'/><category term='webtechbook'/><category term='xml'/><category term='openid'/><category term='soap'/><category term='javascript'/><category term='java'/><category term='mixi'/><category term='books'/><category term='webdav'/><category term='wsdl'/><category term='http'/><category term='architecturalstyle'/><category term='microformats'/><category term='rest'/><category term='translations'/><category term='atompub'/><category term='cap'/><category term='base'/><category term='semistructureddata'/><category term='atom'/><category term='eventuallyconsistent'/><category term='design'/><category term='softwareengineering'/><category term='extensibility'/><category term='architecture'/><category term='uri'/><title type='text'>yohei-y:weblog</title><subtitle type='html'>XML と REST/Web サービス関連の話題が中心の weblog です</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default?start-index=101&amp;max-results=100'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>112</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9037301.post-8167383854767771142</id><published>2010-04-10T20:53:00.006+09:00</published><updated>2010-04-10T22:16:43.186+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webtechbook'/><title type='text'>Webを支える技術ジュンク堂トークセッション（第4回卓人の部屋）総括</title><content type='html'>&lt;p&gt;ブログを書くまでがトークセッションです、と自分で言ってしまった手前書かないわけにはいかなくなってしまったわけです。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://d.hatena.ne.jp/t-wada/20100329"&gt;第4回卓人の部屋&lt;/a&gt;でしゃべってきました。
池袋のジュンク堂に行くのは2回目です。&lt;a href="http://yohei-y.blogspot.com/2008/01/restful-web-4-roa.html"&gt;前回はRWSのPOP&lt;/a&gt;を置きに行ってきました。
ジュンク堂の6Fでは&lt;a href="http://twitpic.com/1af95a"&gt;高橋会長の本を全力で応援するフェア&lt;/a&gt;というのをやっていた。&lt;/p&gt;

&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4774142042/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/4774142042.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt; 
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4774142042/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;Webを支える技術 ── HTTP、URI、HTML、そしてREST&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;山本 陽平&lt;/dd&gt;&lt;dd&gt;技術評論社 2010-04-08&lt;/dd&gt;&lt;/dl&gt;
&lt;/div&gt;

&lt;p style="clear:both;"&gt;とりあえずKPTで振り返ってみました。&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;Keep&lt;/dt&gt;
&lt;dd&gt;トークセッションを満員御礼にできた&lt;/dd&gt;
&lt;dd&gt;taiさんが来てくれてた&lt;/dd&gt;
&lt;dd&gt;高橋会長にたくさん話をふった&lt;/dd&gt;
&lt;dd&gt;いろいろな人と名刺交換した&lt;/dd&gt;
&lt;dd&gt;shuyoさんと久々に会った&lt;/dd&gt;
&lt;dd&gt;なんばさんに超久々に会った（そして××な話を聞いた）&lt;/dd&gt;
&lt;dd&gt;yojikさんやshot6さんと初めて会えた&lt;/dd&gt;
&lt;dd&gt;私服の長田さんに会えた&lt;/dd&gt;
&lt;dd&gt;発売日に増刷がかかった&lt;/dd&gt;


&lt;dt&gt;Problem&lt;/dt&gt;
&lt;dd&gt;和田さんに負担をかけすぎた&lt;/dd&gt;
&lt;dd&gt;開始が15分くらい遅れてしまった&lt;/dd&gt;
&lt;dd&gt;会場を見回しながら話ができなかった&lt;/dd&gt;
&lt;dd&gt;ちょっと内輪な話をしすぎたか？&lt;/dd&gt;
&lt;dd&gt;もうちょっと穏便な発言をすべきだったような&lt;/dd&gt;
&lt;dd&gt;話を伝えるのは難しい&lt;/dd&gt;
&lt;dd&gt;咳しすぎ&lt;/dd&gt;
&lt;dd&gt;レオの質問にちゃんと答えられなかった&lt;/dd&gt;
&lt;dd&gt;オライリーの高さんの前でRWSをDISってしまった&lt;/dd&gt;
&lt;dd&gt;懇親会で全員とお話できなかった&lt;/dd&gt;
&lt;dd&gt;JSONPは脆弱性だろjk、というコメントにogijunと簡単だからいいじゃんと軽く答えたんだけどもう少しまともに答えられれば良かった&lt;/dd&gt;
&lt;dd&gt;高橋会長とお話できなかった&lt;/dd&gt;
&lt;dd&gt;&lt;a href="http://twitpic.com/1ek523"&gt;POP&lt;/a&gt;を書いたのがそこそこ酔っ払ってから&lt;/dd&gt;

&lt;dt&gt;Try&lt;/dt&gt;
&lt;dd&gt;事前に参加者リストをジュンク堂さんからもらう&lt;/dd&gt;
&lt;dd&gt;体調管理は万全に&lt;/dd&gt;
&lt;dd&gt;火曜日に本書の打ち上げがあるのでそこで高橋会長と和田さんとじっくり話す&lt;/dd&gt;
&lt;dd&gt;サインの練習&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;こうしてみるとProblemばかりですが、&lt;a href="http://togetter.com/li/13287"&gt;twitter&lt;/a&gt;やブログでの反応をみると満足してくださった方が多いようなので安心しました。&lt;/p&gt;

&lt;p&gt;後から思ったこと。アドレスバーの話。アドレスバーに出現するURIをコピペできるのがWebの疎結合の源泉。
だからアドレスバーでURIが表示されてそれを別のアプリにコピペできることはとても重要。
これはレオさんの質問(URIでいいの?)に対する答のヒントになるかな。
URIのこのシンプルさと重要性はとても深くて、&lt;a href="http://d.hatena.ne.jp/takahashim/20100408/p1"&gt;高橋さんのつっこみのWebのフラットさ&lt;/a&gt;とか&lt;a href="http://mohican.g.hatena.ne.jp/essa/20050727/p1"&gt;アーレントの件&lt;/a&gt;とかにつながるんだろうな。&lt;/p&gt;

&lt;p&gt;トークセッション中に言及した書籍やリンクなどをご紹介しておきます。&lt;/p&gt;

&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4532146100//yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/4532146100.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt; 
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4532146100//yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;XML入門―HTMLの限界を打ち破るインターネットの新技術&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;村田 真&lt;/dd&gt;&lt;dd&gt;日本経済新聞社 1997-12&lt;/dd&gt;&lt;/dl&gt;
&lt;/div&gt;


&lt;p style="clear: both;"&gt;村田さんの本。もう絶版なんだよなー、もったいない。
この本はXMLの本なんですが、Webの本でもあります。
このころ検討されていたハイパーリンクの話は今読むと実は参考になるかも。&lt;/p&gt;


&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4894714981//yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/4894714981.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4894714981//yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;分散システム 原理とパラダイム 第2版&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;アンドリュー・S・タネンバウム, マールティン・ファン・スティーン&lt;/dd&gt;&lt;dd&gt;ピアソンエデュケーション 2009-01-23&lt;/dd&gt;&lt;/dl&gt;
&lt;/div&gt;

&lt;p style="clear: both;"&gt;分散システムの教科書。ちなみにタネンバウムと共著の&lt;a href="http://www.cs.vu.nl/~steen/"&gt;スティーン先生のWebページ&lt;/a&gt;では&lt;a href="http://www.cs.vu.nl/~steen/books/ds2/index.html"&gt;この本を使った授業のスライド&lt;/a&gt;が入手できます。&lt;/p&gt;


&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4798110663/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/4798110663.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4798110663/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;楽々ERDレッスン (CodeZine BOOKS)&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;(株)スターロジック 羽生 章洋&lt;/dd&gt;&lt;dd&gt;翔泳社 2006-04-18&lt;/dd&gt;&lt;/dl&gt;
&lt;/div&gt;


&lt;p style="clear: both;"&gt;リソースモデリングの話は羽生さんのこの本を目指して書いたのですが、とてもここまでは至りませんでした。
羽生さんは本当にすごいっす。ERDレッスンはWeb技術者必携の本です。&lt;/p&gt;


&lt;div class="product"&gt; 
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4839914192/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/4839914192.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt; 
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4839914192/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;ウェブ戦略としての「ユーザーエクスペリエンス」―5つの段階で考えるユーザー中心デザイン (Web designing books)&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Jesse James Garrett&lt;/dd&gt;&lt;dd&gt;毎日コミュニケーションズ 2005-02&lt;/dd&gt;&lt;/dl&gt; 
&lt;/div&gt; 

&lt;p style="clear: both;"&gt;僕はこの本で情報アーキテクチャを知りました。
著者の&lt;a href="http://en.wikipedia.org/wiki/Jesse_James_Garrett"&gt;Jesse James Garrett&lt;/a&gt;はAjaxという言葉を作った人です。
Amazonのレビューにもあるけど訳がちょっとやばいんですが、薄くてよい本です。&lt;/p&gt;


&lt;div class="product"&gt; 
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/487311134X/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/487311134X.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt; 
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/487311134X/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;Web情報アーキテクチャ―最適なサイト構築のための論理的アプローチ&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;ルイス ローゼンフェルド, ピーター モービル&lt;/dd&gt;&lt;dd&gt;オライリージャパン 2003-08&lt;/dd&gt;&lt;/dl&gt; 
&lt;/div&gt; 

&lt;p style="clear: both;"&gt;情報アーキテクチャ、ちゃんと学ぶならこちらの本の方がお勧めです。なんですがやっぱり訳が…。なんとかならないのかな、この状況。&lt;/p&gt;

&lt;p&gt;最後に業務連絡なのですが、おかげさまで増刷がかかったため、2刷に向けて改訂作業中です。明日(2010-04-11)までに&lt;a href="http://twitter.com/#search?q=%23webtechbook"&gt;twitterで#webtechbook&lt;/a&gt;をつけてつぶやいてもらえると、収集して反映します。&lt;a href="http://qwik.jp/webtechbook/"&gt;こちらのWiki&lt;/a&gt;にまとめ中です。よろしくお願いします&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-8167383854767771142?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/8167383854767771142/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=8167383854767771142' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/8167383854767771142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/8167383854767771142'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2010/04/web4.html' title='Webを支える技術ジュンク堂トークセッション（第4回卓人の部屋）総括'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-7077664430023285277</id><published>2010-03-03T13:13:00.000+09:00</published><updated>2010-03-07T09:20:08.495+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webtechbook'/><title type='text'>『Webを支える技術 ── HTTP、URI、HTML、そしてREST』という本を書きました</title><content type='html'>このブログ、1年近くご無沙汰していました。その間なにをやっていたかというと、実はずっと本を書いていました。『&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774142042/yoheiyweblog-22/"&gt;Webを支える技術 ── HTTP、URI、HTML、そしてREST&lt;/a&gt;』というなんとも挑戦的な題名の本です。&lt;a href="http://gihyo.jp"&gt;技術評論社&lt;/a&gt;さんの&lt;a href="http://gihyo.jp/magazine/wdpress/plus"&gt;WEB+DB PRESS Plusシリーズ&lt;/a&gt;の11冊目で、来月発売される予定です。&lt;/p&gt;

&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4774142042/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/4774142042.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4774142042/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;Webを支える技術 ── HTTP、URI、HTML、そしてREST&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;山本 陽平&lt;/dd&gt;&lt;dd&gt;技術評論社 2010-04-08&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;


&lt;p&gt;この本は、&lt;a href="http://wdpress.gihyo.jp"&gt;WEB+DB PRESS&lt;/a&gt;で連載していた「RESTレシピ」という連載がベースになっています。実は連載が1年経ったくらいから、技評さんからは書籍化のオファーをもらっていました。ただ、その時点では書いた分量も少ないし、そもそも自分に雑誌記事とは比べ物にならないくらい分量のある本が書けるとは思っていなかったので、書籍ではなく連載継続という形でトータル2年間連載をしました。&lt;/p&gt;

&lt;p&gt;ただ、「RESTレシピ」の連載を続けるうちに、少し疑問に思うことが出てきたのです。「RESTレシピ」は基本的にHTTPやURIの知識を前提に、それらをどうRESTfulに使うか、を解説しようと試みた連載です。HTTPとURIはいわば前提知識でした。しかし、その前提知識を得ようとすると、結構大変なことがわかります。&lt;/p&gt;

&lt;p&gt;具体的には本書のレビュアをお願いした&lt;a href="http://d.hatena.ne.jp/takahashim/"&gt;高橋さん&lt;/a&gt;（高橋さんは同時並行していた&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/477414164X/yoheiyweblog-22/"&gt;文字コード本&lt;/a&gt;もレビューしていたそうです。さらに最近&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873114453/yoheiyweblog-22/"&gt;監訳本&lt;/a&gt;も出てるし…凄いですね！）の&lt;a href="http://d.hatena.ne.jp/takahashim/20090520/p1"&gt;このエントリ&lt;/a&gt;が詳しいですが、HTTP解説本は現在壊滅的な状況です。僕も学んだ『&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4894715414/yoheiyweblog-22/ref=nosim/"&gt;Webプロトコル詳解&lt;/a&gt;』も『&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4894710412/yoheiyweblog-22/"&gt;HTTP詳説&lt;/a&gt;』も絶版なのです。僕が2007年に監訳した『&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113539/yoheiyweblog-22/"&gt;RESTful Webサービス&lt;/a&gt;』があるのですが、こちらはHTTPやURIを主題に解説しているわけではありません。オライリーにも英語であれば『&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/1565925092/yoheiyweblog-22/"&gt;HTTP Definitive Guide&lt;/a&gt;』がありますが、残念ながら日本語訳は出ていません。&lt;/p&gt;

&lt;p&gt;幸いなことに日本には&lt;a href="http://studyinghttp.net"&gt;Studying HTTP&lt;/a&gt;という素晴らしいサイトがあります。HTTPやURIの詳しい仕様を知ろうと思えば、このサイトで事足りることも多いです。ただし、&lt;a href="http://studyinghttp.net"&gt;Studying HTTP&lt;/a&gt;さんはあくまでも仕様の解説であり、その仕様をWebサービスの開発においてどのように実践的に使っていくか、という情報はあまりありません。&lt;/p&gt;

&lt;p&gt;ということで、このような状況を打破すべく本を書こうと思い立ったのでした。『&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774142042/yoheiyweblog-22/"&gt;Webを支える技術&lt;/a&gt;』というタイトルから想像する技術は人によって異なると思いますが、本書で対象としている技術は副題にある「HTTP、URI、HTML、そしてREST」です。ちなみにHTMLは代表例で本書では他のハイパーメディアフォーマット（Atom、JSON）も扱っています。これらの仕様を解説しながら、この仕様はなぜこうなっているのか、どのように使えばいいのか、を本書では解説しています。&lt;/p&gt;

&lt;p&gt;目次は以下のような感じです。大きくわけて5部構成で、第1部はWebの歴史とRESTについて、第2部はURIの仕様、第3部はHTTPの仕様、第4部はHTML、Atom、JSONの仕様、第5部はWeb サービスの設計になっています。&lt;/p&gt;

&lt;pre&gt;
◇第1部　Web概論
□第1章　Webとは何か
■1.1　すべての基盤であるWeb
■1.2　さまざまなWebの用途
■1.3　Webを支える技術
■1.4　本書の構成
□第2章　Webの歴史
■2.1　Web以前のインターネット
■2.2　Web以前のハイパーメディア
■2.3　Web以前の分散システム
■2.4　Webの誕生
■2.5　Webの標準化
■2.6　Web APIをめぐる議論
■2.7　すべてがWebへ
□第3章　REST ── Webのアーキテクチャスタイル
■3.1　アーキテクチャスタイルの重要性
■3.2　アーキテクチャスタイルとしてのREST
■3.3　リソース
■3.4　スタイルを組み合わせてRESTを構成する
■3.5　RESTの2つの側面
■3.6　RESTの意義

◇第2部　URI
□第4章　URIの仕様
■4.1　URIの重要性
■4.2　URIの構文
■4.3　絶対URIと相対URI
■4.4　URIと文字
■4.5　URIの長さ制限
■4.6　さまざまなスキーム
■4.7　URIの実装で気をつけること
□第5章　URIの設計
■5.1　クールなURIは変わらない
■5.2　URIを変わりにくくするためには
■5.3　URIのユーザビリティ
■5.4　URIを変更したいとき
■5.5　URI設計のテクニック
■5.6　URIの不透明性
■5.7　URIを強く意識する

◇第3部　HTTP
□第6章　HTTPの基本
■6.1　HTTPの重要性
■6.2　TCP/IPとは何か
■6.3　HTTPのバージョン
■6.4　クライアントとサーバ
■6.5　リクエストとレスポンス
■6.6　HTTPメッセージ
■6.7　HTTPのステートレス性
■6.8　シンプルなプロトコルであることの強み
□第7章　HTTPメソッド
■7.1　8つしかないメソッド
■7.2　HTTPメソッドとCRUD
■7.3　GET ── リソースの取得
■7.4　POST ── リソースの作成、追加
■7.5　PUT ── リソースの更新、作成
■7.6　DELETE ── リソースの削除
■7.7　HEAD ── リソースのヘッダの取得
■7.8　OPTIONS ── リソースがサポートしているメソッドの取得
■7.9　POSTでPUT/DELETEを代用する方法
■7.10　条件付きリクエスト
■7.11　べき等性と安全性
■7.12　メソッドの誤用
■7.13　Webの成功理由はHTTPメソッドにあり
□第8章　ステータスコード
■8.1　ステータスコードの重要性
■8.2　ステータスラインのおさらい
■8.3　ステータスコードの分類と意味
■8.4　よく使われるステータスコード
■8.5　ステータスコードとエラー処理
■8.6　ステータスコードの誤用
■8.7　ステータスコードを意識して設計する
□第9章　HTTPヘッダ
■9.1　HTTPヘッダの重要性
■9.2　HTTPヘッダの生い立ち
■9.3　日時
■9.4　MIMEメディアタイプ
■9.5　言語コード
■9.6　コンテントネゴシエーション
■9.7　Content-Lengthとチャンク転送
■9.8　認証
■9.9　キャッシュ
■9.10　持続的接続
■9.11　そのほかのHTTPヘッダ
■9.12　HTTPヘッダを活用するために

◇第4部　ハイパーメディアフォーマット
□第10章　HTML
■10.1　HTMLとは何か
■10.2　メディアタイプ
■10.3　拡張子
■10.4　XMLの基礎知識
■10.5　HTMLの構成要素
■10.6　リンク
■10.7　リンク関係 ── リンクの意味を指定する
■10.8　ハイパーメディアフォーマットとしてのHTML
□第11章　microformats
■11.1　シンプルなセマンティックWeb
■11.2　セマンティクス（意味論）とは
■11.3　RDFとmicroformats
■11.4　microformatsの標準化
■11.5　microformatsの分類
■11.6　microformatsとRDFa
■11.7　microformatsの可能性
■11.8　リソースの表現としてのmicroformats
□第12章　Atom
■12.1　Atomとは何か
■12.2　Atomのリソースモデル
■12.3　エントリ ── Atomの最小単位
■12.4　フィード ── エントリの集合
■12.5　Atomの拡張
■12.6　Atomを活用する
□第13章　Atom Publishing Protocol
■13.1　Atom Publishing Protocolとは何か
■13.2　AtomPubのリソースモデル
■13.3　ブログシステムを例に
■13.4　メンバリソースの操作
■13.5　サービス文書
■13.6　AtomPubに向いているサービス
□第14章　JSON
■14.1　JSONとは何か
■14.2　メディアタイプ
■14.3　拡張子
■14.4　データ型
■14.5　JSONPによるクロスドメイン通信
■14.6　ハイパーメディアフォーマットとしてのJSON

◇第5部　Webサービスの設計
□第15章　読み取り専用のWebサービスの設計
■15.1　リソース設計とは何か
■15.2　リソース指向アーキテクチャのアプローチ
■15.3　郵便番号検索サービスの設計
■15.4　Webサービスで提供するデータを特定する
■15.5　データをリソースに分ける
■15.6　リソースにURIで名前を付ける
■15.7　クライアントに提供するリソースの表現を設計する
■15.8　リンクとフォームを利用してリソース同士を結び付ける
■15.9　イベントの標準的なコースを検討する
■15.10　エラーについて検討する
■15.11　リソース設計のスキル
□第16章　書き込み可能なWebサービスの設計
■16.1　書き込み可能なWebサービスの難しさ
■16.2　書き込み機能な郵便番号サービスの設計
■16.3　リソースの作成
■16.4　リソースの更新
■16.5　リソースの削除
■16.6　バッチ処理
■16.7　トランザクション
■16.8　排他制御
■16.9　設計のバランス
□第17章　リソースの設計
■17.1　リソース指向アーキテクチャのアプローチの落とし穴
■17.2　関係モデルからの導出
■17.3　オブジェクト指向モデルからの導出
■17.4　情報アーキテクチャからの導出
■17.5　リソース設計で最も重要なこと

◇付録
□付録A　ステータスコード一覧
□付録B　HTTPヘッダ一覧
□付録C　解説付き参考文献
&lt;/pre&gt;

&lt;p&gt;2年の連載（全12回）のベースがあるから比較的楽に書けるよなーと最初は楽観的に思っていたのですが、これが大間違いでしたｗ。はっきりいって原型をとどめているところはほんの少しだけになっています。連載時の原稿は本書の100ページ分くらいだったので、最初はページ数が足りるかどうか心配だったのですが、書いてみたらなんと400ページの本になってしまいました。&lt;a href="http://twitter.com/inao/status/8630988618"&gt;前付けと後付けを除くと350ページ強&lt;/a&gt;なので、2/3を書きおろしたことになります。また、連載時の原稿もかなり修正したり切り貼りしたり、校正したりしてあるのでバグも直っているし文章も読みやすくなっているはずです。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;業務連絡&lt;/strong&gt;：すでにAmazonなどには本書の情報が載っていて、ブックマークもされているのですが2つ変更点をお知らせします。&lt;/p&gt;

&lt;p&gt;1つめは発売日についてです。&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774142042/yoheiyweblog-22/"&gt;Amazon上&lt;/a&gt;は3/18発売になっているかと思いますが、これが諸般の大人の事情で4/8になりました。すでにAmazon等で予約してくださったかたには3週間ほどの延期になってしまいます。申し訳ありません。&lt;/p&gt;

&lt;p&gt;2つめの変更点は価格です。発売日延期のお詫びというわけではないですが、10円値下げして2570円+税になりました。なので税込2700円以内で買えるようになりました。それでもやっぱり技術書は高いのですが、技評さんに頑張ってもらいました。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;追記(2010-03-07)&lt;/strong&gt; Amazon上の発売日と価格、そしてタイトルの誤記が直りました。&lt;/p&gt;

&lt;p&gt;最後にイベントのお知らせです。発売日の4/8(木)に合わせて、ジュンク堂書店池袋店にて&lt;a href="http://www.junkudo.co.jp/tenpo/evtalk.html#20100408ikebukuro"&gt;トークセッション&lt;/a&gt;をやります。さすがに僕一人で話すのは無理なので、レビュアをお願いした&lt;a href="http://d.hatena.ne.jp/t-wada/"&gt;t-wadaさん&lt;/a&gt;にお願いしました。なのでこのトークセッションは自動的に&lt;a href="http://twitter.com/t_wada/status/9374508267"&gt;第4回卓人の部屋になる予定&lt;/a&gt;ですｗ。&lt;/p&gt;

&lt;ul class="vevent"&gt;
  &lt;li class="summary"&gt;
    &lt;a class="url" href="http://www.junkudo.co.jp/tenpo/evtalk.html#20100408ikebukuro"&gt;
      『Webを支える技術』刊行記念トークセッション&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;日時: 2010年4月8日
    &lt;abbr class="dtstart" title="2010-04-08T19:00:00+09:00"&gt;19:00&lt;/abbr&gt;～&lt;/li&gt;
  &lt;li&gt;&lt;span class="location"&gt;ジュンク堂書店池袋本店4階カフェ&lt;/span&gt;にて&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;なお、ジュンク堂さんでは本書の発売に合わせてフェアもやってくださるそうなので、トークセッションにいらしていただくといろいろ面白い本が一緒に買えると思います。まだ何を話すのかとか全然決まっていないのですが、少しでも面白い話をできるように和田さんと打ち合わせるようにします。よろしくお願いします。&lt;/p&gt;

&lt;p&gt;あ、あともう一つ忘れていました。本書の公式ハッシュタグは「&lt;a href="http://twitter.com/#search?q=%23webtechbook"&gt;webtechbook&lt;/a&gt;」になりました。高橋さんの命名です。すでにtwitterでは少しだけ使い始めています。このエントリのタグもwebtechbookにしました。ご愛用ください。それから&lt;a href="http://togetter.com/li/7252
"&gt;togetterにまとめページがあります&lt;/a&gt;。このハッシュタグを使ってもらえるとまとめやすくなると思います。&lt;/p&gt;

&lt;p&gt;最後に、&lt;a href="http://wdpress.gihyo.jp/plus/978-4-7741-4204-3"&gt;gihyo.jpでそのうち公開される&lt;/a&gt;はずですが、本書のはじめにから少しだけ引用しておきます。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;システムとしてのWebの構造や設計思想、いわゆるアーキテクチャは初期からほとんど変わっていません。最初のWebブラウザと現在のWebブラウザでは実現している機能に雲泥の差がありますが、使っているプロトコルは依然としてHTTPですし、表示しているのは昔も今もHTMLです。Webが誕生してから20年、常に新しい技術が生まれてきました。しかしその基本となるアーキテクチャは同じです。これはアーキテクチャの完成度がとても高いことを示しています。&lt;/p&gt;
&lt;p&gt;（中略）&lt;/p&gt;
&lt;p&gt;しかし一方で、簡単に接続できなかったり、データを活用するのに特殊なノウハウが必要だったりするWebサービスも存在します。簡単に接続できるWebサービスと、接続するのが難しいWebサービスとの違いはどこにあるのでしょうか。&lt;/p&gt;
&lt;p&gt;その答えは「Webらしい設計」にある、と筆者は考えています。サービスをWebらしく作ると、ほかのシステムと簡単に連携でき、将来の拡張も楽になるのです。良い設計のWebサービスは、Web全体のアーキテクチャと調和しています。Webらしい良い設計をするためには、Webのアーキテクチャを理解して意識することが大切です。&lt;/p&gt;
&lt;p&gt;　本書は、WebサービスをいかにWebらしく設計するかをテーマとしています。クライアントとサーバはどのように役割分担するのか、望ましいURIとはどのようなものか、HTTPメソッドはどのように使い分けるのか。Webサービスにおけるこれらの設計課題について、現時点でのベストプラクティスを紹介します。このテーマを実現するために、本書は次の2つの目的を持って執筆しました。&lt;/p&gt;
&lt;p&gt;（中略）&lt;/p&gt;
&lt;p&gt;本書の対象読者は、規模の大小にかかわらずWeb技術を使ったシステムを開発した経験のある人です。本書にはプログラミング言語のコードはほとんど登場しません。なぜなら、アーキテクチャは実装よりも1段階抽象度が高い概念だからです。その代わりに登場するのが、具体的なHTTPのやりとりです。HTTPのライブラリは、ほとんどすべてのプログラミング言語で用意されています。読者のみなさんが得意な言語でどのように実装するかを想像しながら読んでいただけると、よりわかりやすくなると思います。&lt;/p&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-7077664430023285277?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/7077664430023285277/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=7077664430023285277' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/7077664430023285277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/7077664430023285277'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2010/03/web-httpurihtmlrest.html' title='『Webを支える技術 ── HTTP、URI、HTML、そしてREST』という本を書きました'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-7920569457106330941</id><published>2009-04-21T06:26:00.000+09:00</published><updated>2009-04-21T06:30:54.647+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eventuallyconsistent'/><category scheme='http://www.blogger.com/atom/ns#' term='cap'/><category scheme='http://www.blogger.com/atom/ns#' term='base'/><title type='text'>yokohama.pm で Eventually Consistent の話をしてきました</title><content type='html'>先週の金曜日に開催された yokohama.pm で、最近のこのブログのメインネタである
CAPとBASEとEventually Consistentについてお話してきました。
このネタ、あまり公の場で話すチャンスがないのでこういう機会をいただけてよかったです。
ありがとうございました。&lt;/p&gt;

&lt;div style="width:425px;text-align:left" id="__ss_1317897"&gt;&lt;a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/yohei/capbaseeventually-consistent?type=presentation" title="CAPとBASEとEventually Consistent"&gt;CAPとBASEとEventually Consistent&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=yokohama-pm-090420162428-phpapp02&amp;stripped_title=capbaseeventually-consistent" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=yokohama-pm-090420162428-phpapp02&amp;stripped_title=capbaseeventually-consistent" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;View more &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/yohei"&gt;yohei&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;最近なにかと忙しくてあんまり更新できませんが、
まだ続く予定です。&lt;/p&gt;



&lt;p&gt;そんじゃーね&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-7920569457106330941?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/7920569457106330941/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=7920569457106330941' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/7920569457106330941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/7920569457106330941'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2009/04/yokohamapm-eventually-consistent.html' title='yokohama.pm で Eventually Consistent の話をしてきました'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-5143780837998448296</id><published>2009-03-17T23:40:00.000+09:00</published><updated>2009-03-17T23:47:15.881+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cap'/><category scheme='http://www.blogger.com/atom/ns#' term='base'/><title type='text'>CAPのCとACIDのC</title><content type='html'>CAP 定理と BASE の概念を考えたのは UCB の Brewer 先生で、彼は inktomi の偉い人だったというのは&lt;a href="http://yohei-y.blogspot.com/2009/03/cap-base.html"&gt;前回&lt;/a&gt;述べた。

&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.ccs.neu.edu/groups/IEEE/ind-acad/brewer/sld003.htm"&gt;当時のinktomiはYahoo!や

Microsoft、それにgooにも検索エンジンを提供していて&lt;/a&gt;、&lt;a href="http://www.ccs.neu.edu/groups/IEEE/ind-

acad/brewer/sld004.htm"&gt;1億以上のWebページ(テラバイト級のデータ)を扱っていた&lt;/a&gt;ようだ。&lt;/p&gt;

&lt;p&gt;手元の&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774137529/yoheiyweblog-22/ref=nosim/"&gt;WEB+DB PRESS Vol.49&lt;/a&gt; のはてなブックマークリニューアル記事によると、現在のはてなブックマークは1160万URLと100GBのHTMLデータ(圧縮済み)を扱っているらしいので、ざっくりいって98年の時点でinktomi

は現在のはてブの10倍のデータを扱っていたといってもいい。inktomiで使っていたコンピュータの性能は現在のPCサ

ーバに比べれば1/10程度の性能なので、システム全体でみると現在のはてブの100倍の規模になるだろうか。&lt;/p&gt;

&lt;p&gt;結果的には、inktomiのビジネスは失敗し、検索大手の座はGoogleに奪われることになるのだが、Googleに数年先ん

じてWebのための分散システムを構築することでBrewerはWebスケールの分散システム構築における理論的基盤を獲得す

るための経験値を得たのだと思う。&lt;/p&gt;

&lt;p&gt;彼がこの時点で得た理論的基盤というのがCAP定理と伝統的なACIDトランザクションを緩和するBASEという考え方で

ある。これが2000年の話。&lt;/p&gt;

&lt;p&gt;CAPは2002年にMITのSeth Gilbert と Nancy Lynchによって&lt;a 

href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.20.1495&amp;rep=rep1&amp;type=pdf"&gt;形式化&lt;/a&gt;され、
晴れて定理となる。CAP定理によれば&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consistency (データの整合性)&lt;/li&gt;
&lt;li&gt;Availability (システムの可用性)&lt;/li&gt;
&lt;li&gt;tolerance to network Partitions (ネットワーク分断への耐性)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;の三つのうち同時に達成できるのは常に二つしかない、ことが明かになっている。&lt;/p&gt;

&lt;p&gt;CAP のうち、AとPの意味するところは簡単にいうと以下のようになる。&lt;/p&gt;

&lt;p&gt;Availability は分散システムにおけるデータの受給者(簡単にいうとブラウザなどのクライアントのこと)が、
常にサービスにアクセス(読込みも、書込みも)できるということを保証する。
サーバ側の都合でデータにアクセスできないことがあるとき、そのシステムは Availability を満たしていない。&lt;/p&gt;

&lt;p&gt;Partition tolerance は、分散システムを構成するノード(簡単に言うと物理・仮想サーバ)がひとつ壊れたとして

もシステム全体が問題なく動作しつづけることを保証する。
システム中のデータを保持しているサーバのうち1台がが物理的にクラッシュしたときに、
データの読込みや書込みができなくなったら、そのシステムは Partition tolerance を満たしていない。&lt;/p&gt;

&lt;p&gt;残りの一つ、Consistency はACIDのCと混同しがちであるが、両者の定義は違う(ここ重要)。
ACIDトランザクションの文脈での C は、
&lt;a href="http://ja.wikipedia.org/wiki/ACID_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E7%A7%

91%E5%AD%A6)"&gt;Wikipedia&lt;/a&gt;では以下のように説明されている。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;日本語では一貫性とも呼ばれる。トランザクション開始と終了時にあらかじめ与えられた整合性を満たすことを保

証する性質を指す。つまり、データベースのルール、つまり整合性条件を満たさない状態を起こすようなトランザクシ

ョンは実行が中断される。&lt;/p&gt;

&lt;p&gt;預金残高を例にすると、その値は一般的に0あるいは正の値を取る条件を満たす必要がある。よって、口座Aから送

金を行うとき、その前後でAの口座残高が負になるような額を送金することはできないが、これを保証するのが

Consistencyの役割である。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;これに対してCAP 定理の C は異なる。
CAPの Consistency は、あるクライアントがシステムのデータを更新したら、
続いてアクセスするすべてのクライアントが必ず更新されたデータを取得できることを保証するものである。&lt;/p&gt;

&lt;p&gt;このconsistency をめぐる混乱は、CAPとBASEの議論をわかりづらくしているように思える。
実際に Seth Gilbert と Nancy Lynchの論文では Consistency という言葉は使わずに、
Atomic data object という言葉を使っている(しかしこの Atomic も ACID の Aとは定義が違うので注意!)。&lt;/p&gt;

&lt;p&gt;インターネットスケールのサービスでは、
必然的に並列処理とノンストップのサービスが求められるので、
可用性とネットワーク分断耐性が必須となり、CAP定理に従えば整合性については妥協することになる…
&lt;/p&gt;

&lt;p&gt;…なる、はずだが現在のWebサービスは、超大規模な分散システムとして運用されているにもかかかわらず、
CAPのC(整合性)も満たした上でA(可用性)とP(ネットワーク分断耐性)を実現しているように見える。&lt;/p&gt;

&lt;p&gt;実はいろいろな大規模サイト(Amazon, eBay, Windows Live, ...)が、
CAP/BASE を知ってか知らずか、独自にそれぞれ分散システムを作ってきたら、
可用性とネットワーク分断耐性を確保しながら、
ある程度の整合性を確保するような分散システムの構築方法について同じような結論を得て、
その理論的背景として CAP/BASE がぴったり収まった、というのが面白いところだと思う。&lt;/p&gt;

&lt;p&gt;この分散システム構築のノウハウのキーワードとなるのが
BASE の E、Eventually Consistent という考え方なのである。&lt;/p&gt;

&lt;p&gt;つづく&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-5143780837998448296?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/5143780837998448296/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=5143780837998448296' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/5143780837998448296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/5143780837998448296'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2009/03/capcacidc.html' title='CAPのCとACIDのC'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-9177039637993971742</id><published>2009-03-03T07:08:00.000+09:00</published><updated>2009-03-17T23:42:20.947+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cap'/><category scheme='http://www.blogger.com/atom/ns#' term='base'/><title type='text'>CAP と BASE について調べたこと</title><content type='html'>時系列で&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;1990年代後半: Eric Brewer (UCB)が inktomi でいろいろ作る
    &lt;ul&gt;&lt;li&gt;CAPとBASEの基礎ができる&lt;/li&gt;
      &lt;li&gt;&lt;a href="http://www.ccs.neu.edu/groups/IEEE/ind-acad/brewer/"&gt;http://www.ccs.neu.edu/groups/IEEE/ind-acad/brewer/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
  &lt;li&gt;2000年7月19日: Eric Brewer が PODC (Principles of Distributed Computing) の&lt;a href="http://www.cs.berkeley.edu/~brewer/cs262b-2004/PODC-keynote.pdf"&gt;基調講演で CAP 定理?と BASE を発表&lt;/a&gt;
    &lt;ul&gt;&lt;li&gt;CAP は Brewer 予測として知られるようになる&lt;/li&gt;
      &lt;li&gt;この時点で、inktomiと同等スケールのWebサービスの問題に対処していた人はあまりいなかったのかもしれない&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.20.1495&amp;rep=rep1&amp;type=pdf"&gt;2002年 MIT の Seth Gilbert と Nancy Lynch が CAP を形式化&lt;/a&gt;
    &lt;ul&gt;&lt;li&gt;ここで Brewer の CAP が晴れて定理となった&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
  &lt;li&gt;この間、よくわからず&lt;/li&gt;
  &lt;li&gt;2007年-: eBay の Dan Pritchett が CAP/BASE ベースでいろいろ考える
    &lt;ul&gt;&lt;li&gt;&lt;a href="http://softwaresummit.com/2007/speakers/presentations/PritchettArchitectingForLatency.pdf"&gt;Colorado Software Summit 2007&lt;/a&gt;&lt;li&gt;
      &lt;li&gt;InfoQ の&lt;a href="http://www.infoq.com/articles/pritchett-latency"&gt;記事&lt;/a&gt;と&lt;a href="http://www.infoq.com/interviews/dan-pritchett-ebay-architecture"&gt;インタビュー&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="http://qconsf.com/sf2008/tracks/show_track.jsp?trackOID=158"&gt;QCon 2008&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;2008年1月の ACM Queue に Dan Pritchett の&lt;a href="http://delivery.acm.org/10.1145/1400000/1394128/p48-pritchett.pdf?key1=1394128&amp;key2=8793075321&amp;coll=GUIDE&amp;dl=GUIDE&amp;CFID=24431247&amp;CFTOKEN=51831511"&gt;記事(BASE an ACID alternative)&lt;/a&gt;が載る&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
  &lt;li&gt;2007年- Amazon CTO の Werner Vogels が Eventually Consistensy 関係でいろいろ
    &lt;ul&gt;&lt;li&gt;&lt;a href="http://www.infoq.com/news/2007/08/werner-vogels-pres"&gt;QCon London でのプレゼン&lt;/a&gt; (2007/08)&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.allthingsdistributed.com/2007/12/eventually_consistent.html"&gt;Eventually Consistent のエントリ(2007/12)&lt;/a&gt;をポスト(&lt;a href="http://www.hyuki.com/yukiwiki/wiki.cgi?EventuallyConsistent"&gt;日本語訳&lt;/a&gt;)&lt;/li&gt;
    &lt;li&gt;CACM に Vogels の論文(&lt;a href="http://delivery.acm.org/10.1145/1440000/1435432/p40-vogels.html?key1=1435432&amp;key2=5545565321&amp;coll=GUIDE&amp;dl=GUIDE&amp;CFID=23717521&amp;CFTOKEN=57678640"&gt;Eventually consistent&lt;/a&gt;)が載る(2009/01)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
  &lt;li&gt;今ここ&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;歴史的には Brewer が inktomi の創業者であることが興味深い。&lt;/p&gt;

&lt;p&gt;すでに inktomi を知らない人がいるかもしれないけれど、
検索エンジンの淘汰の歴史の流れの中で AltaVista と Google の間にいるのが inktomi だ。
inktomiは創業が1996年。Web初期の検索エンジンの座をAltaVistaから奪い、後にYahoo!に買収された。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://ja.wikipedia.org/wiki/Inktomi"&gt;Wikipedia の記事&lt;/a&gt;が詳しいが
AltaVista が DEC の Alpha サーバの性能を売りにした scale-up 的アプローチだったのに対し、inktomi は Scale-out 的アプローチを取ったのが(AltaVistaに対する)技術的な成功要因だったようだ。&lt;a href="http://www.ccs.neu.edu/groups/IEEE/ind-acad/brewer/sld002.htm"&gt;Brewer のスライドの写真&lt;/a&gt;を見ると、時期的にはどうやら Sun の UltraSparc II のクラスタを構築していたようだ。これはまさに僕がNAISTの自席で使っていたワークステーションだけれど、CPUが250MHzで640MBメモリを搭載していたと記憶している。&lt;/p&gt;

&lt;p&gt;inktomiが取ったこのscale-out戦略ベースのアーキテクチャは今のWebの大規模分散システムの根源となるアーキテクチャとなっている。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://yohei-y.blogspot.com/2009/03/capcacidc.html"&gt;つづく&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-9177039637993971742?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/9177039637993971742/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=9177039637993971742' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/9177039637993971742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/9177039637993971742'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2009/03/cap-base.html' title='CAP と BASE について調べたこと'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-7134971762937058644</id><published>2009-02-15T06:11:00.000+09:00</published><updated>2009-02-15T06:12:59.487+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>RESTレシピ ―― クールなWebシステムへの道しるべ【最終回】リソースモデリング</title><content type='html'>2年間 WEB+DB PRESS で連載してきましたが、今回ついに最終回となりました。
正直 REST ネタでこんなにも書くことがあるのかと今でも不思議です。
ほとんどコードが登場しないで文字ばかりという異色な連載を載せ続けてくれた編集部さんに感謝です。
あと毎回締切ギリギリになってすんませんでした。&lt;/p&gt;

&lt;p&gt;ところで最終回のネタですが、連載を始める前からずっと書きたかったリソースモデリングについてやっと書くことができました。
まだまだ確立された手法とは言い難いですが、僕なりにまとめてみたものです。
みなさんの Web システムを RESTful にするお手伝いができればいいなと思っています。&lt;/p&gt;

&lt;p&gt;ありがとうございました。&lt;/p&gt;


&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4774137529/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/4774137529.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4774137529/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;WEB+DB PRESS Vol.49&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;WEB+DB PRESS編集部&lt;/dd&gt;&lt;dd&gt;技術評論社 2009-02-24&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-7134971762937058644?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/7134971762937058644/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=7134971762937058644' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/7134971762937058644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/7134971762937058644'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2009/02/rest-web.html' title='RESTレシピ ―― クールなWebシステムへの道しるべ【最終回】リソースモデリング'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-9186956938862231318</id><published>2008-12-25T02:05:00.001+09:00</published><updated>2008-12-27T10:23:50.908+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='semistructureddata'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><title type='text'>半構造データ、あるいは Web 上のデータ</title><content type='html'>&lt;a href="http://kunishi.blogspot.com/"&gt;国島先生&lt;/a&gt;や&lt;a href="http://leoclock.blogspot.com/"&gt;斉藤先生&lt;/a&gt;が XML や半構造データについていろいろ書いてくださっており、それに反応する形ではてなブックマークや twitter 上での議論が日本語で進んでいて面白い。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://kunishi.blogspot.com/2008/12/twitter.html"&gt;http://kunishi.blogspot.com/2008/12/twitter.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://leoclock.blogspot.com/2008/12/relational-style-xml-query-sigmod-j.html"&gt;http://leoclock.blogspot.com/2008/12/relational-style-xml-query-sigmod-j.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://kunishi.blogspot.com/2008/12/xml-db.html"&gt;http://kunishi.blogspot.com/2008/12/xml-db.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;ブックマークや twitter で細かいコメントを書いているだけでは申し訳ないような気がするので、久々にエントリを書こうとしたのだけれど、なんだかバックグラウンドが長くなってしまった。最先端の研究者のみなさんに失礼な物言いもありますが、XML guy としては XML の話題は釣られるものなのでご容赦ください。&lt;/p&gt;

&lt;h3&gt;個人的なバックグランド&lt;/h3&gt;

&lt;p&gt;僕の個人的なコンピュータの原体験は、当時電電公社に勤めていた伯父からもらった &lt;a href="http://ja.wikipedia.org/wiki/PC-8200%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA"&gt;PC-8201&lt;/a&gt; である。これはいわゆるハンドヘルドコンピュータで、僕はこれを80年代後半に手に入れた。すでに世の中の流れからは置き去りにされてしまった悲しいコンピュータだったが、N82 BASIC が40文字×8行の液晶で動作して、プログラミングができた。&lt;/p&gt;

&lt;p&gt;僕が作ったプログラムは F1 データベースで、歴代のチャンピオンが&lt;a href="http://ja.wikipedia.org/wiki/%E3%82%B8%E3%83%A5%E3%82%BC%E3%83%83%E3%83%9A%E3%83%BB%E3%83%95%E3%82%A1%E3%83%AA%E3%83%BC%E3%83%8A"&gt;ファリーナ&lt;/a&gt;/&lt;a href="http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%83%B3%E3%83%BB%E3%83%9E%E3%83%8C%E3%82%A8%E3%83%AB%E3%83%BB%E3%83%95%E3%82%A1%E3%83%B3%E3%82%B8%E3%82%AA"&gt;ファンジオ&lt;/a&gt;から&lt;a href="http://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%A9%E3%83%B3%E3%83%BB%E3%83%97%E3%83%AD%E3%82%B9%E3%83%88"&gt;プロスト&lt;/a&gt;/&lt;a href="http://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%A4%E3%83%AB%E3%83%88%E3%83%B3%E3%83%BB%E3%82%BB%E3%83%8A"&gt;セナ&lt;/a&gt;まで検索できるものだった。このプログラムはデータとコードと画面がぐちゃぐちゃに入り混じった大変格好の悪いものだったが、それでも自分が書いたプログラムが動作する快感を知ることができたし、何より自分の中では実用的だった。&lt;/p&gt;

&lt;h3&gt;Web との出会い&lt;/h3&gt;

&lt;p&gt;PC-8201 のあとはプログラミングへの興味は薄れ、 &lt;a href="http://ja.wikipedia.org/wiki/PC-9801%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA"&gt;PC-9801 RX21&lt;/a&gt; でゲーム(&lt;a href="http://ja.wikipedia.org/wiki/A%E5%88%97%E8%BB%8A%E3%81%A7%E8%A1%8C%E3%81%93%E3%81%86III"&gt;A列車で行こうIII&lt;/a&gt;はやりまくったなあ)をしたりしていた程度だったが、94年に大学に入学し、その年の暮に「インターネット」の存在を知り、年明け早々に大学ネットワークのアカウントをもらったことでコンピュータ熱が再燃した。MLも入りまくったし、&lt;a href="http://ja.wikipedia.org/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9"&gt;ネットニュース&lt;/a&gt;もさんざんチェックしていた。&lt;a href="http://ja.wikipedia.org/wiki/SunOS"&gt;SunOS4&lt;/a&gt; の上で、&lt;a href="http://ja.wikipedia.org/wiki/NCSA_HTTPd"&gt;NCSA httpd&lt;/a&gt; 経由の CGI (JPerl4)でご多分にもれず掲示板を作ったりもしていた。&lt;/p&gt;

&lt;p&gt;こんなことを書いてるとおまえは情報系の学生だったのではないかと思われるかもしれないけれど、僕はれっきとした機械工学の学部生で、卒論はロボット(特に&lt;a href="http://ja.wikipedia.org/wiki/%E6%B0%B4%E5%B9%B3%E5%A4%9A%E9%96%A2%E7%AF%80%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88"&gt;Scara&lt;/a&gt;)のシミュレーションを &lt;a href="http://ja.wikipedia.org/wiki/OpenGL"&gt;OpenGL&lt;/a&gt; でやっていたりした。&lt;/p&gt;

&lt;h3&gt;NAIST へ&lt;/h3&gt;

&lt;p&gt;ロボットの研究はとても面白く、研究室も居心地がよかったのだけれど、一方で自分の中では Web、特にマークアップ言語・構造化文書としての &lt;a href="http://ja.wikipedia.org/wiki/SGML"&gt;SGML&lt;/a&gt;/&lt;a href="http://ja.wikipedia.org/wiki/XML"&gt;XML&lt;/a&gt; への興味が非常に大きくなってきたため、当時 XML を研究対象にしていた数少ない研究者のおひとりである当時 &lt;a href="http://www.naist.jp/"&gt;NAIST&lt;/a&gt; (現&lt;a href="http://www.kyoto-u.ac.jp/"&gt;京大&lt;/a&gt;)の&lt;a href="http://www.i.kyoto-u.ac.jp/~yoshikawa/indexj.html"&gt;吉川先生&lt;/a&gt;の研究室に行くことにした。幸い NAIST は大学院大学という特性もあり、情報系以外の学生にも手厚く教育をしてくれ、おもに M1 のときに僕はデータベースシステムについて学んだ。&lt;/p&gt;

&lt;h3&gt;XML への熱い期待&lt;/h3&gt;

&lt;p&gt;当時(90年代後半)の XML 業界はある種異常な雰囲気に包まれており、当時世間知らずの田舎学生だった僕の目から見てもアヤシゲなベンダーやコンサルが入り乱れていた(日本国内も、米国も)。それでも毎日 &lt;a href="http://www.w3.org/TR/"&gt;W3C TR&lt;/a&gt; のページは必ずチェックし、&lt;a href="http://www.xml.org/xml-dev"&gt;xml-dev&lt;/a&gt;/&lt;a href="http://www2.xml.gr.jp/1ml_main.html?MLID=xmlusers"&gt;xml-user&lt;/a&gt; を購読し、暇さえあれば XSL(T) のアップデートを追随する毎日を送っていた。&lt;/p&gt;

&lt;p&gt;XML勧告直後からは、&lt;a href="http://ja.wikipedia.org/wiki/%E6%9D%91%E7%94%B0%E7%9C%9F"&gt;村田さん&lt;/a&gt;という偉大な存在があったこともあり、日本国内でも XML コミュニティが立ち上がった。&lt;a href="http://www.xml.gr.jp/event/"&gt;XML開発者の日&lt;/a&gt;というイベントは、昨今の勉強会・カンファレンスブームのさきがけだったと思う。そして、僕はそのコミュニティである程度のポジションを得ることができて、世の中にはすごい人がいるということを実感した。&lt;/p&gt;

&lt;h3&gt;XML を使う&lt;/h3&gt;

&lt;p&gt;当時から今まで、僕の基本的な興味のスタンスは変わっていない。僕にとって XML はあくまでも応用ありきである。もちろん基本知識として &lt;a href="http://www.w3.org/TR/REC-xml/"&gt;XML 1.0 のスペック&lt;/a&gt;は抑えなければいけないし、最低限 &lt;a href="http://ja.wikipedia.org/wiki/Document_Object_Model"&gt;DOM&lt;/a&gt;/&lt;a href="http://ja.wikipedia.org/wiki/Simple_API_for_XML"&gt;SAX&lt;/a&gt;/&lt;a href="http://ja.wikipedia.org/wiki/XSLT"&gt;XSLT&lt;/a&gt; (今なら &lt;a href="http://ja.wikipedia.org/wiki/XQuery"&gt;XQuery&lt;/a&gt; か)を使って XML 処理を行えなければならないが、しかし仕様をいくら知っていても、変換プログラムがいくらあっても現実の世界では役に立たないのである。XML で最も重要なのは XML インスタンス、XML 文書そのものであり、スキーマや各種 API はそれを便利に使うための補助ツールでしかない、という意識が僕にはある。&lt;/p&gt;

&lt;p&gt;では僕にとって重要な XML 応用は何かというと、当時でいえば &lt;a href="http://ja.wikipedia.org/wiki/Extensible_HyperText_Markup_Language"&gt;XHTML&lt;/a&gt; であり、現在はそれに &lt;a href="http://ja.wikipedia.org/wiki/Atom"&gt;Atom&lt;/a&gt;/&lt;a href="http://ja.wikipedia.org/wiki/RSS"&gt;RSS&lt;/a&gt; と &lt;a href="http://ja.wikipedia.org/wiki/Microformats"&gt;microformats&lt;/a&gt; が加わったくらいである。もちろん必要であれば &lt;a href="http://ja.wikipedia.org/wiki/DocBook"&gt;docbook&lt;/a&gt; を使うし(&lt;a href="http://www.gca.org/attend/1999_conferences/markup_99/default.htm"&gt;Markup Technologies99&lt;/a&gt;(&lt;a href="http://www.gca.org/attend/1999_conferences/xml_99/"&gt;XML99&lt;/a&gt;併催)の論文は docbook で書いた、というより書かされた)、&lt;a href="http://ja.wikipedia.org/wiki/ODF"&gt;ODF&lt;/a&gt; や &lt;a href="http://ja.wikipedia.org/wiki/OOXML"&gt;OOXML&lt;/a&gt; も使うのだけれど、自分の中で重要なのは簡単にいえば XHTML と Atom なのである。これは言い換えると Web 上で流通するデータである。&lt;/p&gt;

&lt;h3&gt;Web とデータベースとデータベース管理システム&lt;/h3&gt;

&lt;p&gt;Web はデータベースか? この問いに対する答えは人によって異なると思うけれど、僕の答えは簡単だ。Web は&lt;a href="http://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9"&gt;データベース&lt;/a&gt;である。しかし、Web は&lt;a href="http://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E7%AE%A1%E7%90%86%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0"&gt;データベース管理システム&lt;/a&gt;ではない。&lt;/p&gt;

&lt;p&gt;Web には集中管理機構はない。Web はその名の通り世界規模の&lt;a href="http://ja.wikipedia.org/wiki/%E5%88%86%E6%95%A3%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0"&gt;分散システム&lt;/a&gt;であるが、そのアーキテクチャは集中的な管理機構で守られるのではなく、統一インターフェースとアドレス可能性というアーキテクチャスタイル(制約)で形作られている。&lt;/p&gt;

&lt;p&gt;つまり Web 上のデータというのは、管理システムの制約から解放され、(RESTの制約にさえ逆らわなければ)自由にただデータとして振る舞うことができるのである。ここが RDBMS 中に格納されたデータと Web 上のデータの一番の違いだと思う。&lt;/p&gt;

&lt;p&gt;Web 上のデータは、あらゆるプログラムから独立して生き延びることができる。Web 上のデータはプログラムによって性格を変える。Web アプリケーションを作る人と、検索エンジンを作る人、フィードリーダを作る人が独立して作業を行えるのは、Web上のデータがプログラムから独立しているからである。&lt;/p&gt;

&lt;h3&gt;データの天動説&lt;/h3&gt;

&lt;p&gt;XML の最も革新的な一面をあげるとすれば、僕は真っ先に整形式を許したことを挙げたい。XML ではスキーマが明示的に存在しなくても、プログラムからデータを利用可能になったのである。XML 文書に固定的なスキーマはない。これは逆に言うと、一つのXML文書に複数のスキーマを適用してもいい、ということになる。&lt;/p&gt;

&lt;p&gt;一つのXML文書に複数のスキーマを適用できるとどうなるのか。それぞれのスキーマごとに、一つのXML文書が違った顔を見せるようになるのである。たとえばあるフィードリーダから見ると単純にサイトの新着情報を通知してくれていたAtomフィードが、&lt;a href="http://ja.wikipedia.org/wiki/OpenSearch"&gt;OpenSearch&lt;/a&gt; 拡張を解釈できる検索アプリから見ると検索結果一覧に見える、といった具合である。&lt;/p&gt;

&lt;p&gt;これはすなわち、XML文書はアプリケーションプログラムから独立しており、それはつまり Web 上のデータが持つ特性そのものである(整形式と名前空間でその特性をエンハンスしている)。&lt;/p&gt;

&lt;h3&gt;Data on the Web と半構造データ&lt;/h3&gt;

&lt;p&gt;「Web 上のデータ」とさんざん言ってきたのだが、わかる人にはわかると思うけどこれは "&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/155860622X/yoheiyweblog-22/ref=nosim/"&gt;Data on the Web&lt;/a&gt;" なわけである。僕の意見がどれくらい &lt;a href="http://www-rocq.inria.fr/~abitebou/"&gt;Abiteboul 先生&lt;/a&gt;の意思と被っているのかはわからないけれど、彼の最初の半構造データ論文が "&lt;a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.40.2751"&gt;Querying semi-structured data&lt;/a&gt;" であり、"Managing semi-structured data" ではなかったのは何かを暗示しているような気がしてならない(単なる思い込みかもしれないが)。&lt;/p&gt;

&lt;p&gt;半構造データとは Web 上のデータであり、原理上 Web 上のデータは集中管理できない。なので単一の「管理システム」は存在するはずもない。逆に言うと単一の管理システムで管理できるような XML データは半構造データの文脈を持っていない XML データなわけで、そのようなデータは本来のモデルに基づいて管理するのが正しい姿だと思われる。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-9186956938862231318?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/9186956938862231318/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=9186956938862231318' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/9186956938862231318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/9186956938862231318'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2008/12/web.html' title='半構造データ、あるいは Web 上のデータ'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-8924398085410274956</id><published>2008-04-11T16:08:00.000+09:00</published><updated>2008-04-11T16:13:36.923+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>連載読んでても楽しめた。子飼弾のアルファギークに逢ってきた</title><content type='html'>WEB+DB PRESS 編集長の細谷さんから献本してもらいました。ありがとうございます。&lt;/p&gt;

&lt;p&gt;WEB+DB PRESS は毎号もらっているし、弾さんの連載もいつも読んでいるのでそんなに読むところないかなーと思っていたのですが、
意外と(失礼!)楽しく読めて、空いた時間2,3時間でさくっと読了しました。&lt;/p&gt;

&lt;p&gt;本書の対象読者は弾さんのまえがきに書いてあります。&lt;/p&gt;

&lt;blockquote&gt;
世界を変えたいあなた、ギークの世界へようこそ。ギークとなる最短の道は、ギークを知ることです。本書はそんなあなたのためにあります。
&lt;/blockquote&gt;

&lt;p&gt;自分のことを思い出しても、Web に出会って以来、世の中にいるすごい人々に大いに刺激を受けました。
本書はそんなソフトウェアエンジニアの入り口に立っている若者(には限らないだろうけど、主に)に読んでもらいたい本です。
昔はすごい人と簡単にコミュニケートすることができなかったけれど、今はblogでフラットにつながれるので、
本書を読んだら登場人物のブログをどんどんRSSリーダーに追加していくといいですね。
そういう新米エンジニアさんが羅針盤的に使える本だと思います。
&lt;/p&gt;


&lt;dl&gt;
&lt;dt&gt;よかった&lt;/dt&gt;
&lt;dd&gt;縦書きは良い。読みやすい&lt;/dd&gt;
&lt;dd&gt;版型も良い。手ごろで読みやすい&lt;/dd&gt;
&lt;dd&gt;きたみさんによる弾さんのインタビューもよかった&lt;/dd&gt;
&lt;dt&gt;もう一歩&lt;/dt&gt;
&lt;dd&gt;登場する人全員の URI リストがあればよかった。今からでもgihyo.jpでOPMLを提供すればいいのでは&lt;/dd&gt;
&lt;dd&gt;せっかくだから注のインデックスも0からはじめればよかった&lt;/dd&gt;
&lt;dd&gt;索引もあればよかったような&lt;/dd&gt;
&lt;/dl&gt;


&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/477413452X/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/477413452X.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/477413452X/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;小飼弾のアルファギークに逢ってきた [WEB+DB PRESS plus]&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;小飼弾&lt;/dd&gt;&lt;dd&gt;技術評論社 2008-04-15&lt;/dd&gt;&lt;/dl&gt;
&lt;/div&gt;

&lt;p style="clear: both;"&gt;それにしても弾さんの写真がいっぱいですｗ弾さんファンにはたまらないのではないでしょうか。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-8924398085410274956?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/8924398085410274956/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=8924398085410274956' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/8924398085410274956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/8924398085410274956'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2008/04/blog-post.html' title='連載読んでても楽しめた。子飼弾のアルファギークに逢ってきた'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-1271517609979236999</id><published>2008-01-19T14:42:00.000+09:00</published><updated>2008-01-19T14:48:24.134+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>RESTful Web サービスの読みどころ: 4章 リソース指向アーキテクチャ(ROA)</title><content type='html'>&lt;a href="http://d.hatena.ne.jp/t-wada/20071219/p1"&gt;t-wada さんも書かれて&lt;/a&gt;ますが、この4章は本書の一つの山場です。
RESTの制約に基いたWeb技術(HTTP/URI/XML)ベースの具体的な
アーキテクチャであるリソース指向アーキテクチャについて説明しています。
&lt;/p&gt;

&lt;p&gt;先週、池袋のジュンク堂に以下のような POP を&lt;a href="http://yohei-y.blogspot.com/2008/01/restful-web-t.html"&gt;置いてきた&lt;/a&gt;のですが&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/60043209@N00/2202507051/in/photostream/"&gt;&lt;img src="http://farm3.static.flickr.com/2259/2202507051_d724a30da7.jpg?v=0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;この一つ目の質問「URIをメールで送れるのはなぜか?」
についての回答がこの章に書いてあります。
キーワードは「アドレス可能性」と「ステートレス性」そして「統一インターフェース」です。&lt;/p&gt;

&lt;p&gt;Web 上のリソースは URI によって「アドレス可能」となります。
すなわち、「このWebページ」とか「この写真」というリソースを URI によって
指し示すことができるようになります。
URI をメールに書くためには、このアドレス可能性という性質は必要不可欠です。
URI が発明される以前は、「example.com というサーバの 80番ポートにアクセスして、GETメソッドを
/foo/bar というパスに送る」というように自然言語で書かなければならなかったものが、
統一的な識別子一つでアクセスできるようになりました。
&lt;/p&gt;


&lt;p&gt;また、HTTPはステートレスなプロトコルです。
ある Web ページを取得するのに、
事前条件やセッション初期化などは(基本的には)必要ありません。
メールでもらった URI をブラウザのアドレス欄に入れるだけでアクセスできるのは
ステートレス性のおかげです。
&lt;/p&gt;

&lt;p&gt;そして統一インターフェースです。
たとえ URI があって、ステートレスでも、
どのようなメソッドを発行すればいいのかがわからなければ、
そのリソースには一生アクセスできません。
HTTP メソッドが固定されているからこそ、URI にアクセスできるのです。
&lt;/p&gt;

&lt;p&gt;これ意外にも状態の話や表現の話など、盛り沢山ながら比較的ページ数の少い4章は、
REST はだいたい知っているからもっと具体的な設計のことを知りたいよ、
という方にピッタリの章だと思います。&lt;/p&gt;

&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113539/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/4873113539.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113539/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;RESTful Web サービス&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Leonard Richardson Sam Ruby 山本 陽平 株式会社クイープ&lt;/dd&gt;&lt;dd&gt;オライリー・ジャパン 2007-12-21&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;


&lt;p style="clear: both;"&gt;ジュンク堂さんには販促アイテムであるTシャツも飾ってありました。
同じTシャツが&lt;a href="http://blogs.ricollab.jp/webtech/2008/01/gifts/"&gt;プレゼント中&lt;/a&gt;です。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/60043209@N00/2203298470/in/photostream/"&gt;&lt;img src="http://farm3.static.flickr.com/2409/2203298470_433db559a6.jpg?v=1200719350" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-1271517609979236999?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/1271517609979236999/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=1271517609979236999' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/1271517609979236999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/1271517609979236999'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2008/01/restful-web-4-roa.html' title='RESTful Web サービスの読みどころ: 4章 リソース指向アーキテクチャ(ROA)'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-4640843070946451210</id><published>2008-01-19T00:40:00.000+09:00</published><updated>2008-01-19T00:53:00.912+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>RESTful Web サービスTシャツプレゼント企画</title><content type='html'>RESTful Web サービスのTシャツプレゼント企画を始めました。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.ricollab.jp/webtech/2008/01/gifts/"&gt;http://blogs.ricollab.jp/webtech/2008/01/gifts/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;詳細はリンク先を見てください。
すでに感想を書いていただいている方ももちろん応募可能です。
どしどしご応募ください。&lt;/p&gt;

&lt;p&gt;「RESTful Web サービス」は Amazon でずっと在庫切れしていたのですが、やっと復活したようです。
&lt;a href="http://www.junkudo.co.jp/detail2.jsp?ID=0108529794"&gt;池袋のジュンク堂&lt;/a&gt;にはこの記事を書いている時点で81冊在庫があるみたいです。
なかなか手に入らなかった方もこの機会にぜひ。&lt;/p&gt;

&lt;p&gt;ところでジュンク堂といえば、先日池袋店にこの本を宣伝する自筆のPOPを置いてきました。
&lt;a href="http://d.hatena.ne.jp/takahashim/"&gt;高橋さん&lt;/a&gt;に店員さんを紹介していただき、POP用紙まで送ってもらいました。高橋さんすごいっす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-4640843070946451210?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/4640843070946451210/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=4640843070946451210' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/4640843070946451210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/4640843070946451210'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2008/01/restful-web-t.html' title='RESTful Web サービスTシャツプレゼント企画'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-794767823872180282</id><published>2007-12-20T19:04:00.000+09:00</published><updated>2007-12-20T19:07:20.239+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>RESTful Web サービスの読みどころ: 3章　RESTfulサービスの特徴</title><content type='html'>RWSが本屋さんに並びはじめました。
今日外出のついでに神保町に行ってみたら、
三省堂は10冊、書泉グランデは16冊も平積みにされていて
結構圧巻でした。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/60043209@N00/2124682810/"&gt;&lt;img src="http://farm3.static.flickr.com/2413/2124682810_12688d1f10.jpg?v=1198142216" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;今日は3章です。&lt;/p&gt;

&lt;p&gt;3章では、きちんと RESTful で広く運用されている
数少いサービスの一つである Amazon S3 の ruby クライアントを作りながら、
RESTful な Web サービスの設計とはどんなことなのか、
そのサービスのクライアントはどう作るのか、を解説します。
&lt;/p&gt;

&lt;p&gt;僕は S3 について、これまであまり知らなかったのですが、
この章を読んでよく設計されているなー感心しました。
もちろん S3 には接続性という、本書で提唱されている ROA に
則っていない部分があるのですが、
それを差し引いても設計の参考になると思います。
特に S3 の認証と認可の仕組みは
サービスそのものに課金を考えた場合にとても参考になるでしょう。
&lt;/p&gt;


&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113539/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/4873113539.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113539/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;RESTful Web サービス&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Leonard Richardson Sam Ruby 山本 陽平 株式会社クイープ&lt;/dd&gt;&lt;dd&gt;オライリー・ジャパン 2007-12-21&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;

&lt;p&gt;P.S. 3章では ActiveResource の話もありました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-794767823872180282?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/794767823872180282/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=794767823872180282' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/794767823872180282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/794767823872180282'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2007/12/restful-web-3restful.html' title='RESTful Web サービスの読みどころ: 3章　RESTfulサービスの特徴'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-2211824059874274325</id><published>2007-12-17T01:10:00.000+09:00</published><updated>2007-12-17T01:16:08.410+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>RESTful Web サービスの読みどころ: 2章 Web サービスクライアントの作成</title><content type='html'>先週金曜日「RESTful Web サービス」が手元に届きました。
こうやって手に取ると実感がわいて嬉しいですね。
&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm3.static.flickr.com/2018/2109737705_6e64177bca.jpg?v=0" /&gt;&lt;/p&gt;

&lt;p&gt;写真はこの半年ずっと鞄の中にあってボロボロになってきた原書(右)と金曜に届
いた翻訳版(左)、そしてオライリーの中の人からいただいた原書カバーのT-シャ
ツです。&lt;/p&gt;

&lt;p&gt;ところで、
先日見た&lt;a href="http://ja.wikipedia.org/wiki/%E5%83%8D%E3%81%8D%E3%83%9E%E3%83%B3"&gt;働きマン&lt;/a&gt;の第9話で、本の出版には様々な人がかかわっていることを
再認識しました。
著者はもちろん、編集者、印刷所のみなさん、製本所のみなさん、営業担当者
配送に関わる方、書店の方々などさまざまな人が関わっているんですよね。
こうやって本が出て、実際に書店に並んで買えるようになるのはすごいことだ
と改めて感じた次第です。&lt;/p&gt;


&lt;p&gt;さて、今日ご紹介する2章ですが、この章では del.icio.us のクライアントを
様々な言語で作ってみる、という内容になっています。
del.icio.us の API は RESTful じゃないじゃん、というつっこみへの回答は
書籍に譲るとして、ここでは苦労話をひとつ。&lt;/p&gt;

&lt;p&gt;本書では、ほとんどのサンプルコードは Ruby を使って記述されています。
しかし、本章では Ruby, Python, Java, C#, PHP, JavaScript, curl のサンプルコー
ドが、そして ActionScript, C, C++, Common Lisp, Perl のライブラリにつ
いての言及がされています。
これをチェックするのが結構大変でした。
Common Lisp の HTTP ライブラリは URL が切れていて、
編集者さんに原著者に問い合わせてもらったりもしました。
&lt;/p&gt;

&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113539/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/4873113539.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113539/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;RESTful Web サービス&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Leonard Richardson Sam Ruby 山本 陽平 株式会社クイープ&lt;/dd&gt;&lt;dd&gt;オライリー・ジャパン 2007-12-21&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;

&lt;p&gt;本書はおかげさまで予約注文が好調なようで、発売前に増刷が決りました。
感想や不明点を blog やメールでお知らせいただければと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-2211824059874274325?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/2211824059874274325/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=2211824059874274325' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/2211824059874274325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/2211824059874274325'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2007/12/restful-web-2-web.html' title='RESTful Web サービスの読みどころ: 2章 Web サービスクライアントの作成'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-6229146236773383114</id><published>2007-12-14T00:20:00.000+09:00</published><updated>2007-12-14T00:24:18.452+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>WEB+DB PRESS Vol.42 と7周年記念イベント</title><content type='html'>来週 20 日に &lt;a href="http://gihyo.jp/magazine/wdpress/information/2007/tech-meeting"&gt;WEB+DB PRESS の7周年記念イベント&lt;/a&gt;が開催されます。
関係者枠で招待していただいたので、僕も参加します。
スピーカーがすごい面子で、楽しみですね。連載しててよかった。&lt;/p&gt;

&lt;p&gt;ところで次回の WEB+DB PRESS には上記イベントのスピーカーの一人&lt;a href="http://d.hatena.ne.jp/habuakihiro/20071012#1192183887"&gt;羽生章洋さん&lt;/a&gt;と、&lt;a href="http://d.hatena.ne.jp/t-wada/20071012#p1"&gt;t-wada こと和田卓人さん&lt;/a&gt;と3人で
REST に関して鼎談した内容をもとにした記事が特集として載る予定です。&lt;/p&gt;

&lt;p&gt;もともとは、編集者さんから、t-wada さんが WEB+DB PRESS を読むときに僕の連載を一番最初に読むと言っていると教えてもらって、
僕の方も和田さんの TDD の記事でたくさん勉強させてもらったので(題材が REST だったし)、
ぜひ和田さんとお話したいと返信したら、話がどんどん大きくなって羽生さんを交えての鼎談になってしまったのでした。&lt;/p&gt;

&lt;p&gt;ビデオ収録の鼎談なんて初めての経験だったのでかなり不安だったんですが、
自分の出来はともかくむちゃくちゃ楽しかったです。
鼎談の内容はニコニコ動画で公開されるらしいので、お楽しみに。&lt;/p&gt;

&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4774133310/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/4774133310.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4774133310/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;WEB+DB PRESS Vol.42&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;WEB+DB PRESS編集部&lt;/dd&gt;&lt;dd&gt;技術評論社 2007-12-22&lt;/dd&gt;&lt;/dl&gt;
&lt;/div&gt;

&lt;p&gt;鼎談では URI を Universal Resource Identifier とか間違って喋っていて非常に恥ずかしいので(いつも Uniform か Universal かわからなくなる)、
あんまり DIS らないでください。もちろん記事の方は直っています。&lt;/p&gt;

&lt;p&gt;それから和田さんが書いてくれた &lt;a href="http://www.restlet.org"&gt;Restlet&lt;/a&gt; をベースに RESTful なシステムを実装する章は必見です。
Java じゃない人でも、実際に RESTful にリソースを設計するというのはどういうことかを学べるすばらしい記事になっていると思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-6229146236773383114?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/6229146236773383114/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=6229146236773383114' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/6229146236773383114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/6229146236773383114'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2007/12/webdb-press-vol42-7.html' title='WEB+DB PRESS Vol.42 と7周年記念イベント'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-1196955322391779520</id><published>2007-12-13T23:33:00.000+09:00</published><updated>2007-12-13T23:35:35.201+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>RESTful Web サービスの読みどころ: 1章プログラマブルWebとWebサービス</title><content type='html'>RESTful Web サービスの発売が近付いてきました。&lt;/p&gt;

&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113539/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/4873113539.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113539/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;RESTful Web サービス&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Leonard Richardson Sam Ruby 山本 陽平 株式会社クイープ&lt;/dd&gt;&lt;dd&gt;オライリー・ジャパン 2007-12-21&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;

&lt;p&gt;この章では、いわゆる「Web サービス」の概要を解説します。
Web サービス、およびそれを使って実現されるプログラマブルWebでは
どのような技術が使われているのか、それらはどのような関係にあるのか
がわかると思います。&lt;/p&gt;


&lt;p&gt;本書のタイトルでもある RESTful な Web サービスを実現するためには、
基本的に HTTP, URI, XML, JSON, (X)HTML, 等の知識が必要ですが、
これらの技術を&lt;strong&gt;使うだけ&lt;/strong&gt;では RESTful にはなりません。
単なる XML over HTTP が RESTful でないことがしばしばあります。
Web サービスを RESTful たらしめる本質は何なのでしょうか。&lt;/p&gt;

&lt;p&gt;本章では「メソッド情報」と「スコープ情報」というキーワードを使い、
アーキテクチャで Web サービスを分類することでこの問いに答えています。
この二つの情報が、HTTP エンベロープのどこに含まれているかで、
Web サービスは3種類に分類できます(そのうち RESTful なのは一つだけ)。
この分類手法は、自分が作った Web サービスが RESTful かどうかを
チェックする簡単な手法になると思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-1196955322391779520?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/1196955322391779520/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=1196955322391779520' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/1196955322391779520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/1196955322391779520'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2007/12/restful-web-1webweb.html' title='RESTful Web サービスの読みどころ: 1章プログラマブルWebとWebサービス'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-7319488121220512388</id><published>2007-12-08T00:12:00.000+09:00</published><updated>2007-12-08T21:42:49.404+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>RESTful Web サービスの読みどころ: はじめに</title><content type='html'>すでにオライリージャパンの&lt;a href="http://www.oreilly.co.jp/books/9784873113531/"&gt;サイト&lt;/a&gt;や&lt;a href="http://twitter.com/kakutani/statuses/434498932"&gt;メール&lt;/a&gt;&lt;a href="http://twitter.com/kakutani/statuses/434948282"&gt;ニュース&lt;/a&gt;で新刊情報が流れていますが、
&lt;a href="http://yohei-y.blogspot.com/2006/11/rest.html"&gt;以前から&lt;/a&gt;&lt;a href="http://yohei-y.blogspot.com/2007/04/restful-web-services.html"&gt;何回か紹介してきた&lt;/a&gt; &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/0596529260/yoheiyweblog-22/ref=nosim/"&gt;RESTful Web Services&lt;/a&gt; の翻訳版の監修をさせてもらいました。&lt;/p&gt;

&lt;p&gt;すでにさまざまな&lt;a href="http://b.hatena.ne.jp/entry/http://www.oreilly.co.jp/books/9784873113531/"&gt;ブック&lt;/a&gt;&lt;a href="http://clip.livedoor.com/page/http://www.oreilly.co.jp/books/9784873113531/"&gt;マーク&lt;/a&gt;&lt;a href="http://del.icio.us/url/542bc58576228ce81da62dde061e42c2"&gt;サイト&lt;/a&gt;で好意的に言及していただいており、とても光栄です。&lt;/p&gt;

&lt;p&gt;まだ amazon には掲載されていませんが、12月19日か20日には都内主要書店に並ぶそうです。&lt;/p&gt;

&lt;p&gt;追記(2007-12-08) 掲載されました&lt;/p&gt;

&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113539/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/4873113539.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113539/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;RESTful Web サービス&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Leonard Richardson Sam Ruby 山本 陽平 株式会社クイープ&lt;/dd&gt;&lt;dd&gt;オライリー・ジャパン 2007-12-21&lt;/dd&gt;&lt;/dl&gt;
&lt;/div&gt;



&lt;p&gt;そこで、今回から何回かにわたって、発売記念でこの本の「読みどころ」を紹介したいと思います。
今回は初回なので、僕が書いた監訳者まえがきから少し引用して、本書全体の読みどころを紹介します。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;本書 「RESTful Web サービス」 は &lt;a href="http://www.crummy.com/"&gt;Leonard Richardson&lt;/a&gt; と &lt;a href="http://intertwingly.net/blog/"&gt;Sam Ruby&lt;/a&gt; の二人が
世に送る、世界初の REST に関する本格的な解説書です。本書を読めば、REST
アーキテクチャスタイルとは何か、それを使ってどのように Web システムを効
率的に構築するか、アーキテクチャが RESTful だと何が嬉しいのか、が理解で
きるでしょう。&lt;/p&gt;

&lt;p&gt;(中略)&lt;/p&gt;

&lt;p&gt;「はじめに」にもある通り、REST に関する設計ノウハウは、Roy Fielding の
博士論文を除けば blog やメーリングリストへの投稿という形でインターネッ
ト上に散在している状況です。それらの情報を集めながら学ぶのはとても楽
しくためになる作業ですが、REST の普及の観点からは喜ばしい状況ではありま
せん。REST に基づいた Web システムの設計を体系的に学ぶことができるベスト
プラクティス集が必要とされていたのです。そして本書はまさにそれを実現し
ています。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;目次は以下のとおり。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;はじめに&lt;/li&gt;
&lt;li&gt;1章　プログラマブルWebとWebサービス&lt;/li&gt;
&lt;li&gt;2章　Webサービスクライアントの作成&lt;/li&gt;
&lt;li&gt;3章　RESTfulサービスの特徴&lt;/li&gt;
&lt;li&gt;4章　リソース指向アーキテクチャ（ROA）&lt;/li&gt;
&lt;li&gt;5章　読み取り専用のリソース指向サービスの設計&lt;/li&gt;
&lt;li&gt;6章　読み取り/書き込み可能なリソース指向サービスの設計&lt;/li&gt;
&lt;li&gt;7章　サービスの実装&lt;/li&gt;
&lt;li&gt;8章　RESTとROAのベストプラクティス&lt;/li&gt;
&lt;li&gt;9章　サービスの基本要素&lt;/li&gt;
&lt;li&gt;10章　リソース指向アーキテクチャと大Webサービス&lt;/li&gt;
&lt;li&gt;11章　RESTクライアントとしてのAjaxアプリケーション&lt;/li&gt;
&lt;li&gt;12章　RESTfulサービスのためのフレームワーク&lt;/li&gt;
&lt;li&gt;付録A　RESTおよびRESTfulリソースの参考文献&lt;/li&gt;
&lt;li&gt;付録B　最もよく使用される42のHTTPレスポンスコード&lt;/li&gt;
&lt;li&gt;付録C　最もよく使用されるHTTPヘッダー&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ちなみに監訳者が付かない本当のまえがきは DHH が書いています(&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/0596529260/yoheiyweblog-22/ref=nosim/"&gt;原書&lt;/a&gt;は表紙にも DHH の名前が)。こちらも要注目です。&lt;/p&gt;

&lt;p&gt;tsupo さんがブックマークで&lt;a href="http://b.hatena.ne.jp/tsupo/20071205#bookmark-6704835"&gt;コメント&lt;/a&gt;してくれてますが、12/21の&lt;a href="http://www.asahi-net.or.jp/~eb2m-mrt/kaihatsu10.html"&gt;XML開発者の日&lt;/a&gt;に本書を持参していただければ、いくらでもサインします :-) (販売の予定はありません...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-7319488121220512388?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/7319488121220512388/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=7319488121220512388' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/7319488121220512388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/7319488121220512388'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2007/12/restful-web.html' title='RESTful Web サービスの読みどころ: はじめに'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-7367017091770168081</id><published>2007-11-23T23:49:00.000+09:00</published><updated>2007-11-23T23:53:26.988+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xmldevday'/><category scheme='http://www.blogger.com/atom/ns#' term='atompub'/><title type='text'>第10回XML開発者の日</title><content type='html'>今年もXML開発者の日が
&lt;a href="http://www.asahi-net.or.jp/~eb2m-mrt/kaihatsu10.html"&gt;12月21日&lt;/a&gt;に行われます。
今回は XML 色が強いので、一参加者として楽しみです。&lt;/p&gt;

&lt;p&gt;REST関係では&lt;a href="http://gihyo.jp"&gt;gihyo.jp&lt;/a&gt; で &lt;a href="http://gihyo.jp/dev/feature/01/atompub"&gt;AtomPub 解説を連載中&lt;/a&gt;なあさくらさんに
AtomPub の紹介をお願いしました。AtomPub の Interop にほぼ皆勤賞のあさくらさんにいろいろ面白いお話を聞けるのではないかと期待しています。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-7367017091770168081?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/7367017091770168081/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=7367017091770168081' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/7367017091770168081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/7367017091770168081'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2007/11/10xml.html' title='第10回XML開発者の日'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-4320792393995169704</id><published>2007-10-28T10:45:00.001+09:00</published><updated>2007-10-28T10:47:14.484+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><title type='text'>ステートレスとは何か</title><content type='html'>&lt;a href="http://rest.blueoxen.net/cgi-bin/wiki.pl"&gt;RestWiki&lt;/a&gt; をたまに見直すと新たな発見があって面白い。&lt;/p&gt;

&lt;p&gt;たとえば先日、「&lt;a href="http://rest.blueoxen.net/cgi-bin/wiki.pl?RestFaq#nid5EC"&gt;ステートレスなやりとりとは何か(What is Stateless Interaction?)&lt;/a&gt;」という箇所を見つけて、興味深く読んだ。このページは以前も絶対に読んでいるはずなのだが、
人間は忘れてしまうものである。&lt;/p&gt;
&lt;p&gt;RestWiki の例でも充分わかりやすいのだけれど、自分でも例を思いついたので書きとめておく。&lt;/p&gt;

&lt;p&gt;ステートフルサーバとステートレスサーバはどう違うのか。&lt;/p&gt;

&lt;p&gt;まずは、ステートフルの例:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;客: こんにちは&lt;/li&gt;
&lt;li&gt;店員: いらっしゃいませ。○○バーガーへようこそ&lt;/li&gt;
&lt;li&gt;客: ハンバーガーセットをお願いします&lt;/li&gt;
&lt;li&gt;店員: サイドメニューは何になさいますか?&lt;/li&gt;
&lt;li&gt;客: ポテトで&lt;/li&gt;
&lt;li&gt;店員: ドリンクは何になさいますか?&lt;/li&gt;
&lt;li&gt;客: ジンジャーエールで&lt;/li&gt;
&lt;li&gt;店員: +50円でドリンクをLサイズにできますがいかがですか?&lt;/li&gt;
&lt;li&gt;客: Mでいいです&lt;/li&gt;
&lt;li&gt;店員: 以上でよろしいですか?&lt;/li&gt;
&lt;li&gt;客: はい&lt;/li&gt;
&lt;li&gt;店員: かしこまりました&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;これはいたって普通の会話に見える。では、ステートレスな場合はどうなのか。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;客: こんにちは&lt;/li&gt;
&lt;li&gt;店員: いらっしゃいませ。○○バーガーへようこそ&lt;/li&gt;
&lt;li&gt;客: ハンバーガーセットをお願いします&lt;/li&gt;
&lt;li&gt;店員: サイドメニューは何になさいますか?&lt;/li&gt;
&lt;li&gt;客: ハンバーガーセットをポテトでお願いします&lt;/li&gt;
&lt;li&gt;店員: ドリンクは何になさいますか?&lt;/li&gt;
&lt;li&gt;客: ハンバーガーセットをポテトとジンジャーエールでお願いします&lt;/li&gt;
&lt;li&gt;店員: +50円でドリンクをLサイズにできますがいかがですか?&lt;/li&gt;
&lt;li&gt;客: ハンバーガーセットをポテトとジンジャーエール(M)でお願いします&lt;/li&gt;
&lt;li&gt;店員: 以上でよろしいですか?&lt;/li&gt;
&lt;li&gt;客: ハンバーガーセットをポテトとジンジャーエール(M)でお願いします。以上&lt;/li&gt;
&lt;li&gt;店員: かしこまりました&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;これは明らかに冗長であほらしいのだけれど、サーバがステートレスというのはこういうことである。&lt;/p&gt;

&lt;p&gt;ステートフルの例では、2回目以降の対話では、客(クライアント)はそれまでの前提(ハンバーガーセットを頼んでいること)は
繰り返さなくてもよかった。なぜか。それは店員(サーバ)が客(クライアント)の注文状態を覚えていたからである。
この店員(サーバ)は「この客(クライアント)はハンバーガーセットをポテトで頼んでいる」ということを覚えている。
これをアプリケーション状態、あるいはセッション状態と呼ぶ。
次にドリンクの種類を聞いたときに店員(サーバ)は自分で覚えている客(クライアント)のアプリケーション状態を
「この客はハンバーガーセットをポテトとジンジャーエールで頼んでいる」と更新する。
&lt;/p&gt;

&lt;p&gt;ファーストフード店の店員であれば、ステートフルな実装は当たり前なのだが、Web サーバは異なる。
それはスケーラビリティの問題である。
店員(サーバ)が一人の客(クライアント)をずっと相手にしていると、その間別の客に対応することができない。
店が込んできたら(アクセスが集中したら)、店員を増員して(Webサーバを増設して)対応する。
普通の店舗では、ひとつのレジで一人の店員がずっと同じ客を受け付けるのだが、
Web の場合は複数の Web サーバ(比較的少数)で複数のクライアント(比較的多数)を同時に受け付ける。
ここで、ステートレスサーバであれば、以下のように、各インタラクションで別々の店員(サーバ)が
客(クライアント)の注文(リクエスト)に応答(レスポンス)することが可能になる。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;客: こんにちは&lt;/li&gt;
&lt;li&gt;店員1: いらっしゃいませ。○○バーガーへようこそ&lt;/li&gt;
&lt;li&gt;客: ハンバーガーセットをお願いします&lt;/li&gt;
&lt;li&gt;店員2: サイドメニューは何になさいますか?&lt;/li&gt;
&lt;li&gt;客: ハンバーガーセットをポテトでお願いします&lt;/li&gt;
&lt;li&gt;店員3: ドリンクは何になさいますか?&lt;/li&gt;
&lt;li&gt;客: ハンバーガーセットをポテトとジンジャーエールでお願いします&lt;/li&gt;
&lt;li&gt;店員4: +50円でドリンクをLサイズにできますがいかがですか?&lt;/li&gt;
&lt;li&gt;客: ハンバーガーセットをポテトとジンジャーエール(M)でお願いします&lt;/li&gt;
&lt;li&gt;店員5: 以上でよろしいですか?&lt;/li&gt;
&lt;li&gt;客: ハンバーガーセットをポテトとジンジャーエール(M)でお願いします。以上&lt;/li&gt;
&lt;li&gt;店員6: かしこまりました&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;ステートレスサーバというのは一見冗長なように見えるが、
スケーラビリティの観点から見ると、理に適っているものである。&lt;/p&gt;


&lt;p&gt;合わせて読みたい: &lt;a href="http://www.prescod.net/rest/state_transition.html"&gt;A Web-Centric Approach to State Transition&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-4320792393995169704?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/4320792393995169704/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=4320792393995169704' title='4 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/4320792393995169704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/4320792393995169704'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2007/10/blog-post.html' title='ステートレスとは何か'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-4668201017352048216</id><published>2007-10-12T18:18:00.000+09:00</published><updated>2007-10-21T14:35:29.194+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atom'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='atompub'/><title type='text'>AtomPub が RFC 5023 に/日本語訳を公開します</title><content type='html'>AtomPub がついに RFC になりました!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://tools.ietf.org/rfc5023.txt"&gt;RFC 5023 The Atom Publishing Protocol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tools.ietf.org/html/rfc5023"&gt;RFC 5023 The Atom Publishing Protocol(HTML)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;関係者のブログ&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Joe Gregorio: &lt;a href="http://bitworking.org/news/250/RFC-5023-The-Atom-Publishing-Protocol"&gt;RFC 5023 - The Atom Publishing Protocol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sam Ruby: &lt;a href="http://intertwingly.net/blog/2007/10/09/app-draftno-app-draft"&gt;&amp;lt;appdraft&gt;no&amp;lt;app:draft&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;RFC になるまでずいぶんと長かったように感じますが、
その分完成度は上ったのだと思います。
interop もすでに何回も開催されており、その結果も良好です。
&lt;/p&gt;

&lt;p&gt;AtomPub は全ての、とはいかないまでも、多くの Web サービスのベースとなることが
できるプロトコルです。
たとえば blog 、何らかのデータベース、画像/映像リポジトリ、
Wiki、カレンダー、ソーシャルブックマークなど、title/author/updated というメタデー
タがあって、その読み書きができるサービスは全て AtomPub ベースの API を
出せる可能性があるでしょう。&lt;/p&gt;

&lt;p&gt;さて、そんな AtomPub を会社の同僚と翻訳したので、公開したいと思います。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.ricoh.co.jp/src/news/07_07-12.html#20071012"&gt;2007/10/12　Atom Publishing Protocol (RFC5023）の日本語訳を公開&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ricoh.co.jp/src/rd/webtech/rfc5023_ja.html"&gt;Atom 出版プロトコル(RFC 5023 日本語訳)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;draft-15 から翻訳を始めたので、比較的長い時間レビューしていますが、
それでもミスや変なところがある可能性はあります。
もし何か問題があれば、ご連絡ください。&lt;/p&gt;

&lt;p&gt;AtomPub 実装者の方々の一助となれば幸いです。&lt;/p&gt;

&lt;p&gt;追記: 技評さんが gihyo.jp で&lt;a href="http://gihyo.jp/news/nr/2007/101201"&gt;取り上げてくれた&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;さらに追記(2007-10-21): WEB+DB PRESS の連載で AtomPub を取り上げています。
今月発売の Vol.41 では AtomPub で導入されたサービス文書やメディアエントリの解説をしています。&lt;/p&gt;

&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/477413256X/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/477413256X.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/477413256X/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;WEB+DB PRESS Vol.41&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;WEB+DB PRESS編集部&lt;/dd&gt;&lt;dd&gt;技術評論社 2007-10-24&lt;/dd&gt;&lt;/dl&gt;
&lt;/div&gt;

&lt;p style="clear: left"&gt;コレクションとエントリの基本を解説した Vol. 40 と合わせてどうぞ。&lt;/p&gt;

&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/477413192X/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/477413192X.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/477413192X/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;WEB+DB PRESS Vol.40&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;WEB+DB PRESS編集部&lt;/dd&gt;&lt;dd&gt;技術評論社 2007-08-24&lt;/dd&gt;&lt;/dl&gt;
&lt;/div&gt;

&lt;p style="clear: left"&gt;ちなみに Vol. 41 では RFC 5023 という番号を紙面に入れることができました。
正にぎりぎりの修正だったのですが、間に合ってよかった。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-4668201017352048216?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/4668201017352048216/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=4668201017352048216' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/4668201017352048216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/4668201017352048216'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2007/10/atompub-rfc-5023.html' title='AtomPub が RFC 5023 に/日本語訳を公開します'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-2406097531419263356</id><published>2007-09-08T14:56:00.000+09:00</published><updated>2007-09-21T23:50:21.687+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>REST の勝利宣言と良い XML の見分け方</title><content type='html'>&lt;a href="http://itpro.nikkeibp.co.jp/article/Watcher/20070906/281310/"&gt;ITpro Challenge&lt;/a&gt;
行ってきました。&lt;/p&gt;

&lt;p&gt;豪華なメンバーでどの講演もとても面白かったですね。
江島さんの講演は、Web 上でサービスをやるとはどういうことなのかについてとても示唆に富んだ話だったし、
鵜飼さんのハッカーのソフト工学の話は職場的にすげータイムリーだったし、
なおやさんの話は同時代を生きてきた、生きている者としてとても共感できる内容だったし、
戀塚さんはこれぞハッカーという感じのすごい人でした。&lt;/p&gt;

&lt;p&gt;僕は LT の最後に話をさせてもらったわけですが、
ネタを二つ持っていって聴衆のみなさんに選んでもらうことにしました。&lt;/p&gt;


&lt;object type="application/x-shockwave-flash" data="http://s3.amazonaws.com/slideshare/ssplayer.swf?id=105357&amp;doc=849" width="425" height="348"&gt;&lt;param name="movie" value="http://s3.amazonaws.com/slideshare/ssplayer.swf?id=105357&amp;doc=849" /&gt;&lt;/object&gt;

&lt;p&gt;結果は REST が勝ったので、当初の予告どおり REST の話をすることに。&lt;/p&gt;

&lt;object type="application/x-shockwave-flash" data="http://s3.amazonaws.com/slideshare/ssplayer.swf?id=105359&amp;doc=rest2812" width="425" height="348"&gt;&lt;param name="movie" value="http://s3.amazonaws.com/slideshare/ssplayer.swf?id=105359&amp;doc=rest2812" /&gt;&lt;/object&gt;


&lt;p&gt;結局お蔵入りになった XML の話ですが、もったいなかったので懇親会でお話させてもらいました。&lt;/p&gt;

&lt;object type="application/x-shockwave-flash" data="http://s3.amazonaws.com/slideshare/ssplayer.swf?id=105360&amp;doc=xml-20074551" width="425" height="348"&gt;&lt;param name="movie" value="http://s3.amazonaws.com/slideshare/ssplayer.swf?id=105360&amp;doc=xml-20074551" /&gt;&lt;/object&gt;

&lt;p&gt;プレゼン中で引用した Web ページはこちらです。&lt;/p&gt;

&lt;p&gt;檜山さんの記事&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.itarchitect.jp/xml/-/10865.html"&gt;XML ボキャブラリのデザインパターン&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.itarchitect.jp/xml/-/10904.html"&gt;XML ボキャブラリのアンチパターン&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Tim Bray の記事&lt;/p&gt;


&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.tbray.org/ongoing/When/200x/2006/01/08/No-New-XML-Languages"&gt;Don't Invent XML Languages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://po3a.blogspot.com/2006/01/xml.html"&gt;日本語訳: もう XML 言語を開発するな&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;リンクは重要ですよ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-2406097531419263356?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/2406097531419263356/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=2406097531419263356' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/2406097531419263356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/2406097531419263356'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2007/09/rest-xml.html' title='REST の勝利宣言と良い XML の見分け方'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-2220479647790393585</id><published>2007-08-20T23:07:00.000+09:00</published><updated>2007-09-21T23:49:44.865+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='atompub'/><title type='text'>いろいろ改め AtomPub の話と、パターンの話と、消費電力の話と、古くて新しい開発環境の話と、Tim Bray のインタビューと、Dave Thomas のTシャツプレゼントが載ってる WEB+DB PRESS Vol.40</title><content type='html'>&lt;/p&gt;
&lt;div class="hreview" &gt;

&lt;div class="description"&gt;

&lt;p&gt;WEB+DB PRESS の Vol. 40 が届きました。どうもありがとうございます。&lt;/p&gt;

&lt;p&gt;僕は Atom API 改め AtomPP 改め APP 改め AtomPub/Atompub な Atom Publishing Protocol の解説を
REST の連載で書きました。
記事のドラフトではずっと APP で通してきたのですが、
最後の最後で AtomPub に切り替えました。
いろいろ考えたんですが AtomPub で統一して呼んでいこうかと。&lt;/p&gt;

&lt;p&gt;今回は 40号記念だからか、すごく充実した内容です。
パターンの特集はここまでまとまってるのは今までなかったし、
サーバの消費電力の話なんて、他にどこで読めるのかわからないような記事でした。
僕はどちらかというとソフトウェアの抽象レイヤをいつも考えているので、
たまにこういう物理的な話を読むととても勉強になります。
&lt;/p&gt;


&lt;p&gt;それにしても id:naoya 氏はどんだけ記事書いてるんだと小一時間問い詰めたい。
はてなのCTOはよっぽど暇なのかそれとも文章書くのが速いのか。
まあどう考えても後者ですよね。
&lt;/p&gt;

&lt;p&gt;…という微妙な DIS はともかく、
新人さんとか向けに古くて新しい unix 開発環境を整えさせるにはとてもよい導入記事だと思います。
&lt;/p&gt;

&lt;p&gt;それからなにげにニュースのところに Tim Bray のインタビュー記事が載ってますが
WADL どうよとか聞いていてよいですね(自作自演)。
ちなみに僕は WADL いらない派です。&lt;/p&gt;

&lt;p&gt;そしてなんといっても Dave Thomas (とプレゼントの Tシャツ)でしょう。
僕もこれから応募はがき書くところです。
メッセージがまたかっこいい。Tシャツ画像は&lt;a href="http://d.hatena.ne.jp/hirose31/20070820/1187609627"&gt;ひろせさんのところ&lt;/a&gt;で見れます。
プログラミングはやっぱり楽しくなきゃいけないですね。
&lt;/p&gt;


&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/477413192X/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/477413192X.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/477413192X/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;WEB+DB PRESS Vol.40&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;WEB+DB PRESS編集部&lt;/dd&gt;&lt;dd&gt;技術評論社 2007-08-24&lt;/dd&gt;&lt;/dl&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-2220479647790393585?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/2220479647790393585/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=2220479647790393585' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/2220479647790393585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/2220479647790393585'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2007/08/atompub-tim-bray-dave-thomas-t-webdb.html' title='いろいろ改め AtomPub の話と、パターンの話と、消費電力の話と、古くて新しい開発環境の話と、Tim Bray のインタビューと、Dave Thomas のTシャツプレゼントが載ってる WEB+DB PRESS Vol.40'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-4702027944284602061</id><published>2007-07-25T21:45:00.000+09:00</published><updated>2007-09-21T23:48:57.016+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atompub'/><title type='text'>APP の標準化作業がほぼ終了</title><content type='html'>&lt;a href="http://www.tbray.org/ongoing/When/200x/2007/07/24/Atom-is-Finished"&gt;Tim Bray からアナウンスがあったとおり&lt;/a&gt;、
&lt;a href="http://www1.ietf.org/mail-archive/web/ietf-announce/current/msg03937.html"&gt;APP の標準化作業がほぼ終了しました&lt;/a&gt;。
RFC 番号が付くのはしばらく先だと思いますが、
現状の仕様を実装してもう問題ありません。
最後の &lt;a href="http://bitworking.org/projects/atom/draft-ietf-atompub-protocol-17.html"&gt;draft-17&lt;/a&gt; ベースの仕様が RFC になります。今後の修正は editorial なものだけのはずです。&lt;/p&gt;

&lt;p&gt;この先、Web API を設計する人は、まず APP が利用できないか検討しましょう。
APP を採用すれば自然と REST スタイルを採用することになります。
これまで悩みがちだった Web API の設計が、かなり楽になると思います。
Web API を設計する人は、オレオレXMLを設計する前に、Atom/APP をベースにしたらどうなるか、
を考えて見ましょう。きっと Atom/APP は良い選択肢になってくれるはずです。
&lt;/p&gt;

&lt;p&gt;日本では AtomPP で定着しつつあった Atom Publishing Protocol の略語ですが、
Tim Bray のエントリにあるとおり、
Atom プロトコル、APP、Atompub があちらでは標準的な略語になりつつあります。
とりあえず AtomPP と呼ぶのはやめたほうが、相互運用性の観点から望ましいと思います。
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://intertwingly.net/wiki/pie/July2007InteropTokyo"&gt;来週月曜には、APP の Interop が日比谷であります&lt;/a&gt;。
日本でも APP を盛り上げていきたいですね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-4702027944284602061?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/4702027944284602061/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=4702027944284602061' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/4702027944284602061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/4702027944284602061'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2007/07/app.html' title='APP の標準化作業がほぼ終了'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-2403343369086651919</id><published>2007-07-20T22:20:00.000+09:00</published><updated>2007-09-21T23:49:15.466+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atompub'/><title type='text'>APP Interop in Tokyo</title><content type='html'>NTT コミュニケーションズの朝倉さん(実は NAIST の研究室の先輩です)と一緒に 7/30 に Atom Publishing Protocol の接続試験を東京で行います。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://intertwingly.net/wiki/pie/July2007InteropTokyo"&gt;http://intertwingly.net/wiki/pie/July2007InteropTokyo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://intertwingly.net/wiki/pie/April2007Interop"&gt;4月に Google Campus で行われたもの&lt;/a&gt;の日本版です。
今のところ参加する予定なのは&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;あさくらさん(ntt.com)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.witha.jp/blog/"&gt;丸本さん&lt;/a&gt;(ウィザ)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.s14u.info/mt/"&gt;shigeta さん&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.bulknews.net"&gt;miyagawa さん&lt;/a&gt;(リモート)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://teahut.sakura.ne.jp/b/"&gt;たけまるさん&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yohei-y.blogspot.com"&gt;我&lt;/a&gt;&lt;a href="http://d.hatena.ne.jp/StL/"&gt;々&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;参加されたい方は上記 Wiki に名前を書く、あるいは僕(yoheiy at gmail dot com)までメールください。APP の実装をお持ちの方はぜひ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-2403343369086651919?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/2403343369086651919/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=2403343369086651919' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/2403343369086651919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/2403343369086651919'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2007/07/app-interop-in-tokyo.html' title='APP Interop in Tokyo'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-3769461913880214201</id><published>2007-06-29T21:50:00.000+09:00</published><updated>2007-09-21T23:47:48.276+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mixi'/><category scheme='http://www.blogger.com/atom/ns#' term='atompub'/><title type='text'>[これはすばらしい] mixi ステーション API。ただ一つ注文が…</title><content type='html'>via: &lt;a href="http://ido.nu/kuma/2007/06/29/mixi%e3%81%ae%e3%81%82%e3%81%97%e3%81%82%e3%81%a8api%e7%99%ba%e6%8e%98/"&gt;mixi あしあとAPI発掘&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;mixi が &lt;a href="http://bitworking.org/projects/atom/"&gt;Atom Publishing Protocl&lt;/a&gt; (APP) 対応の Web API を mixi ステーションで利用しているそうだ。&lt;/p&gt;

&lt;p&gt;さっそく手元にあった APP クライアントで試してみると
30分くらいであっさりと接続成功。本当に素晴しい。
ざっくりと Web API を見させてもらったのだけれど、
拡張タグの使い方などセンスが良いし、さすがという感じだ。
&lt;/p&gt;

&lt;p&gt;ただ一点だけ、どうしても直してほしいのは
APP の service document の名前空間 URI。
これは &lt;a href="http://www.w3.org/2007/app"&gt;http://www.w3.org/2007/app&lt;/a&gt;
が本番仕様である。mixi の Web API は古い名前空間を使ってる。
中の人はわかっていると思うんだけど、APP は&lt;a href="http://sdc.sun.co.jp/news/2007/06/feature01.html"&gt;もう少し&lt;/a&gt;で &lt;a href="https://datatracker.ietf.org/idtracker/11965/"&gt;RFC になる&lt;/a&gt;。
APP を実装する人は&lt;a href="http://www.imc.org/atom-protocol/mail-archive/msg09852.html"&gt;必ず RFC になる名前空間 URI を実装&lt;/a&gt;しましょう。
mixi の API を真似している人は気をつけてね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-3769461913880214201?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/3769461913880214201/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=3769461913880214201' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/3769461913880214201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/3769461913880214201'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2007/06/mixi-api.html' title='[これはすばらしい] mixi ステーション API。ただ一つ注文が…'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-8065966640986893315</id><published>2007-06-18T18:35:00.000+09:00</published><updated>2007-09-21T23:48:21.367+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='http'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>HTTP ステータスコードを正しく使おう</title><content type='html'>先月、&lt;a href="http://api.gnavi.co.jp/api/manual.htm"&gt;ぐるなび API&lt;/a&gt;
がリリースされていました。
ぐるなびさんの持っている膨大なデータベースに Web API を通して気軽にア
クセスできるようになったのは、非常に喜ばしいし、その英断に感謝したいと
思います。&lt;/p&gt;

&lt;p&gt;しかし、Web API 仕様書、特にエラー仕様を見てちょっとがっかりしました。
もう少し上手にデザインすれば、もっとよかったのに…、という思いです。&lt;/p&gt;

&lt;p&gt;一度出してしまった API はそう簡単に変えられないと思いますが、
参考までに僕だったらどうするか、を書いてみます。&lt;/p&gt;

&lt;p&gt;この仕様の一番の問題はエラーコードです。
以下は 2-2 のエラー仕様に記述されているサンプルです。&lt;/p&gt;

&lt;pre&gt;
&amp;lt;?xml version="1.0" encoding="UTF-8"?&gt;
&amp;lt;gnavi&gt;
 &amp;lt;error&gt;
   &amp;lt;code&gt;602&amp;lt;/code&gt;
 &amp;lt;/error&gt;
&amp;lt;/gnavi&gt;
&lt;/pre&gt;

&lt;p&gt;タグが三つ(gnavi, error, code)出てきます。
重要なのは code だけで、ここにエラーコードが入ります。
602 というコードは Invalid Shop Number を示します。
エラーコード一覧を見ると、現在五つのコードが定義されていることがわかり
ます。&lt;/p&gt;

&lt;p&gt;よくない点を一言で言うと、エラーコードを再発明してしまっているということです。
たとえば 604 は "Internal Server Error" なんですが、
このフレーズに覚えがありませんか? そう HTTP の 500 Internal Server
Error と同じです。HTTP で 500 を返せばいいところを、
独自 XML 形式でしかも 604 という独自のエラーコードを再発明しています。
&lt;/p&gt;

&lt;pre&gt;
HTTP/1.1 200 OK
Content-Type: application/xml

&amp;lt;?xml version="1.0" encoding="UTF-8"?&gt;
&amp;lt;gnavi&gt;
 &amp;lt;error&gt;
   &amp;lt;code&gt;604&amp;lt;/code&gt;
 &amp;lt;/error&gt;
&amp;lt;/gnavi&gt;
&lt;/pre&gt;

&lt;p&gt;本来はこうあるべきです。&lt;/p&gt;

&lt;pre&gt;
HTTP/1.1 500 Internal Server Error
Content-Type: text/plain; charset=utf-8

処理中にエラーが発生しました。
&lt;/pre&gt;

&lt;p&gt;なぜエラーコードの再発明は駄目なのでしょうか。それは専用のクライアントが必要になる
からです。単なる HTTP クライアントではなく、ぐるなびのエラーコードを実
装した専用クライアントが必要になってしまうからです。専用クライアントが
必要なので、その分余計なコードが必要となって、障害が発生する確立も上り
ます。&lt;/p&gt;

&lt;p&gt;参考までに、ぐるなび API のエラーコードを HTTP のステータスコードにマッピングしてみました。&lt;/p&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;gnavi エラーコード&lt;/th&gt;&lt;th&gt;HTTP ステータスコード&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;600 NoShop&lt;/td&gt;&lt;td&gt;404 Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;601 Invalid Access&lt;/td&gt;&lt;td&gt;403 Forbiddden&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;602 Invalid Shop Number&lt;/td&gt;&lt;td&gt;400 Bad Request&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;603 Invalid Type&lt;/td&gt;&lt;td&gt;400 Bad Request&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;604 Internal Server Error&lt;/td&gt;&lt;td&gt;500 Internal Server Error&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;601 は通常は 401 Unauthorized にしたいところですが、
ぐるなび API は api key 方式を採用しているので 403 にしてみました。
また、この対応により 602 と 603 が 400 にまとめられてしまっていますが、
両者の違いは HTTP のレスポンスボディで記述すればいいでしょう。
もし、この二つを区別する理由が、エラーメッセージを出すためだけであれば、
メッセージそのものをプレーンテキストで返せばいいのです。
&lt;/p&gt;

&lt;pre&gt;
HTTP/1.1 400 Bad Request
Content-Type: text/plain; charset=utf-8

指定された店舗の情報が存在しません。
&lt;/pre&gt;

&lt;pre&gt;
HTTP/1.1 400 Bad Request
Content-Type: text/plain; charset=utf-8

不正なぐるなび店舗IDパラメータが指定されました。
&lt;/pre&gt;



&lt;div class="hreview" &gt;

&lt;div class="description"&gt;
&lt;p&gt;WEB+DB Press の今月号には、まさにこの話を書きました。
本文とコラムが同じくらいのページ数という、一時期の JavaWorld の檜山さ
んみたいな構成ですが、
普段なにげなく使っている HTTP のステータスコードは
Web API を作る上でどうあるべきか、という話です。&lt;/p&gt;

&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4774131407/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/4774131407.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4774131407/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;WEB+DB PRESS Vol.39&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;WEB+DB PRESS編集部&lt;/dd&gt;&lt;dd&gt;技術評論社 2007-06-22&lt;/dd&gt;&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-8065966640986893315?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/8065966640986893315/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=8065966640986893315' title='8 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/8065966640986893315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/8065966640986893315'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2007/06/http.html' title='HTTP ステータスコードを正しく使おう'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-2672885416879639372</id><published>2007-04-25T20:16:00.000+09:00</published><updated>2007-09-21T23:42:47.201+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Restful Web Services</title><content type='html'>&lt;div class="hreview"&gt;
&lt;div class="description"&gt;
&lt;p&gt;&lt;a href="http://yohei-y.blogspot.com/2006/11/rest.html"&gt;以前言及したオ
ライリーの REST 本&lt;/a&gt; Restful Web Services が Amazon で予約可能になっていました。&lt;/p&gt;

&lt;p&gt;この本、とても素晴しい内容です。
レビュアに応募して原稿を見せてもらったのですが、
REST に関する ABC が一通りつまっていて、
何が RESTful なのかについてしっかりと書いてあります。&lt;/p&gt;

&lt;p&gt;RESTful でないことについてもちゃんと記述があって、
xml-rpc とか POX over HTTP とかも出てきます。
また、アーキテクチャの面からはRPC(SOA)とREST(ROA)の違いもあったはず。&lt;/p&gt;

&lt;p&gt;Ruby (&lt;a href="http://www.intertwingly.net/blog/"&gt;Sam Ruby&lt;/a&gt; じゃな
くて&lt;a href="http://www.ruby-lang.org/ja/"&gt;プログラミング言語 ruby&lt;/a&gt;)のコード例なんかも載っていて読む価値十分です。
&lt;/p&gt;

&lt;p&gt;残念ながら原稿を読むのに時間がかかり過ぎて、後の方の章にした僕のコメント(文字コー
ドとか)は反映されてないみたいなんですが、REST を体系的に学びたい方には
超おすすめの1冊です。&lt;/p&gt;
&lt;/div&gt;

&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/0596529260/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/0596529260.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="border: medium none ; margin: 0pt 15px 10px 10px; padding: 0pt; float: left;"&gt;&lt;/a&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url"
href="http://www.amazon.co.jp/exec/obidos/ASIN/0596529260/yoheiyweblog-22/ref=nosim/"&gt;&lt;span
class="fn"&gt;Restful Web Services&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;Leonard Richardson, Sam Ruby&lt;/dd&gt;&lt;dd&gt;Oreilly &amp; Associates Inc 2007-05&lt;/dd&gt;&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-2672885416879639372?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/2672885416879639372/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=2672885416879639372' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/2672885416879639372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/2672885416879639372'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2007/04/restful-web-services.html' title='Restful Web Services'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-8617677753727044330</id><published>2007-04-19T23:18:00.000+09:00</published><updated>2007-09-21T23:46:20.061+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='uri'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>WEB+DB PRESS Vol. 38</title><content type='html'>&lt;div class="hreview" &gt;

&lt;div class="description"&gt;
&lt;p&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774131008/yoheiyweblog-22/ref=nosim/"&gt;&lt;span &gt;WEB+DB PRESS Vol. 38&lt;/a&gt; で REST 周りのことについての連載を始めました。&lt;/p&gt;

&lt;p&gt;ちょうど1年前に REST の解説を書いたんですが、
その直後に &lt;a href="http://naoya.g.hatena.ne.jp/naoya/20060420/1145510366"&gt;naoya さんが連載で、と書いて&lt;/a&gt;くれて
それを見た技評の中の人が mixi で「連載しませんか」というメッセージくれたんだけど、
ちょっと1年続くネタに困りそうなのでやんわりと断ったのでした。
んで、1年後、技評の中の人がもう一度話を持ってきてくれて、
今年は APP もついに RFC になりそうだし、
連載してもいいかなーと思って連載することにしました。
ということで何が言いたいかというと、naoya さんの影響力と
技評の中の人の企画力はすごい、ということでした。&lt;/p&gt;

&lt;p&gt;肝心の今回の内容ですが、円グラフで表現すると、こんなかんじです。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm1.static.flickr.com/223/464998854_d217970c34.jpg?v=0" alt="べつやくメソッド" /&gt;
&lt;/div&gt;

&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4774131008/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/4774131008.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4774131008/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;WEB+DB PRESS Vol.38&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;WEB+DB PRESS編集部&lt;/dd&gt;&lt;dd&gt;技術評論社 2007-04-24&lt;/dd&gt;&lt;/dl&gt;
&lt;/div&gt;


&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-8617677753727044330?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/8617677753727044330/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=8617677753727044330' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/8617677753727044330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/8617677753727044330'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2007/04/webdb-press-vol-38.html' title='WEB+DB PRESS Vol. 38'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-981457659303578960</id><published>2007-01-30T20:21:00.000+09:00</published><updated>2007-01-30T20:23:22.874+09:00</updated><title type='text'>Dr. Jim Gray がヨットで行方不明に</title><content type='html'>Amazon CTO の Werner Vogels の&lt;a href="http://www.allthingsdistributed.com/2007/01/jim_gray_missing_at_sea.html"&gt;ブログ&lt;/a&gt;から。データベース界の偉人、マイクロソフトリサーチの &lt;a href="http://research.microsoft.com/~Gray/"&gt;Dr. Jim Gray&lt;/a&gt; がヨットで航海中に行方不明になっているとのこと。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.nbc4.tv/news/10873028/detail.html"&gt;NBC4.tv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2007/01/29/BAGB5NR0GL6.DTL&amp;feed=rss.bayarea"&gt;SFGate.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/James_N._Gray"&gt;Wikipedia 英語版&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developers.slashdot.org/article.pl?sid=07/01/30/0353228&amp;from=rss"&gt;slashdot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mercurynews.com/mld/mercurynews/16575073.htm"&gt;Mercury
News&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;心配です。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-981457659303578960?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/981457659303578960/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=981457659303578960' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/981457659303578960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/981457659303578960'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2007/01/dr-jim-gray.html' title='Dr. Jim Gray がヨットで行方不明に'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-116956225417954458</id><published>2007-01-23T23:21:00.000+09:00</published><updated>2007-09-22T00:04:45.904+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='ws-star'/><category scheme='http://www.blogger.com/atom/ns#' term='soap'/><category scheme='http://www.blogger.com/atom/ns#' term='wsdl'/><category scheme='http://www.blogger.com/atom/ns#' term='translations'/><title type='text'>S はシンプルの S</title><content type='html'>This entry is a Japanese transration of Pete Lacey's "&lt;a href="http://wanderingbarque.com/nonintersecting/2006/11/15/the-s-stands-for-simple/"&gt;The S stands for Simple&lt;/a&gt;".
&lt;/p&gt;

&lt;p&gt;&lt;!--There has been a long running debate in the Application Platform Services Group here at Burton Group between the REST people on one side and the SOAP people on the other.  --&gt;
Burton グループのアプリケーションプラットフォームサービスグループでは、
REST派とSOAP派の間でずっと継続中の議論がある。
&lt;!--For the most part it mirrors the external debate.  --&gt;
その大部分は外部での議論によく似ている。
&lt;!--In one recent exchange, while discussing the complexity of SOAP and the web services framework, the SOAP side said, 懼Before all of the WS-* stuff, SOAP was actually simple.  --&gt;

最近のやりとりの一つ、
SOAP と Web サービスフレームワークの複雑さの議論で、
SOAP 側は「WS-* の前は、SOAP は実際にシンプルだった。S はシンプルの略だ」といった。
&lt;!--That懼s what the 懼S懼 stood for.懼・--&gt;&lt;/p&gt;
&lt;p&gt;
さあ歴史を学ぼう。
2000年、悩める開発者が問題をかかえている。
&lt;!--And now a history lesson.  It懼s the year 2000, a harried developer has a problem--&gt;&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;:
うちの上司が先週末ゴルフをやってきて、
いわゆる SOAP なエンタープライズをやる必用があるんです。
でも私は SOAP が何なのか知りません。
教えてもください、 SOAP の人。
&lt;!--So, my boss was playing golf this weekend,
and now I have to懼quote,
unquote懼SOAP-enable the enterprise,
but I don懼t know what SOAP is.  Can you help, SOAP Guy?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人:&lt;/strong&gt;  もちろんです。
まず、SOAP は「シンプル・オブジェクト・アクセス・プロトコル」の略なんです。
&lt;!--Sure thing.  First, SOAP stands for Simple Object Access Protocol.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  シンプルなんですね?&lt;!--So it懼s simple?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人:&lt;/strong&gt;  日曜日のようにシンプルですよ &lt;!--Simple as Sunday, my friend.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  オーケー、教えてください。&lt;!--Okay, lay it on me.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  はい、その名前のとおり、SOAP はリモートオブジェクトにアクセスするのに使います。&lt;!--Well, just like it says in the name, SOAP is used for accessing remote objects.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  CORBA みたいなもの? &lt;!--Like CORBA?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  シンプルなこと以外はまさに CORBA に似ています。&lt;!--Exactly like CORBA, only simpler.  --&gt;
ファイアーウォールを通過できない複雑なトランスポートプロトコルの代りにHTTP を使います。
&lt;!--Instead of some complex transport protocol that no one will let traverse a firewall, we use HTTP.  --&gt;
そして、バイナリメッセージフォーマットの代りに XML を使うのです。
&lt;!--And instead of some binary message format we use XML.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  面白いですね。どのように動作するのか教えてもらえますか? &lt;!--I懼m intrigued. Show me how it works.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  もちろんです。
&lt;!--Sure thing.--&gt;
まず、SOAP エンベロープというのがあります。
これは非常にシンプルです。
SOAP エンベロープはヘッダとボディで構成される XML 文書なんです。
そしてボディには RPC コールが書けます。
&lt;!--  First there懼s the SOAP envelope.  It懼s pretty simple.  It懼s just an XML document consisting of a header and a body.  And in the body you make your RPC call.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  SOAP は RPC なんですか? &lt;!--So this is all about RPCs?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  そのとおりです。
&lt;!--Absolutely.  --&gt;
さきほど述べた通り、SOAP ボディにメソッド名と引数を埋め込むことで PRC コールが作れます。
&lt;!--As I was saying, you make your RPC call by putting the method name and its arguments in the body.  --&gt;
メソッド名は一番外側の要素でその子要素がパラメータです。
&lt;!--The method name is the outermost element and each sub-element is a parameter.  --&gt;
そして全てのパラメータはこの仕様書の第5節の定義に従って型を持ちます。
&lt;!--And all the parameters can be typed as specified right here in Section 5 of the specification.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  &lt;em&gt;(第5節を読む)&lt;!--(reads Section 5)--&gt;&lt;/em&gt;  オーケー、悪くないですね。&lt;!--Okay, that懼s not too bad.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  そして、サービスを配備したら、エンドポイントを指定します。&lt;!--Now, when your service is deployed, you specify the endpoint.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  エンドポイント? &lt;!--Endpoint?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  エンドポイントはサービスのアドレスですよ.&lt;!--Endpoint, the address of the service.  --&gt;
SOAP エンベロープをエンドポイントの URL に POST するんです。
&lt;!--You POST your SOAP envelope to the endpoint懼s URL.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  エンドポイントの URL を GET したらどうなるんですか? &lt;!--What happens if I GET the endpoint懼s URL?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  わかりません。GET の利用は定義されていないんです。&lt;!--Don懼t know.  Using GET is undefined.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  ふーむ。でももしサービスのエンドポイントを別のエンドポイントに移動したらどうなるんですか? 301 が返されるんですか? &lt;!--Hrrm.  And what happens if I move the service to a different endpoint?  Do I get a 301 back?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  違います。SOAP は実際には HTTP のレスポンスコードは使っていないんです。&lt;!--No.  SOAP doesn懼t really use HTTP response codes.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  つまり、SOAP が HTTP を使っているというのは、
HTTP 上をトンネルしているという意味ですか?
&lt;!--So, when you said SOAP uses HTTP, what you meant to say is SOAP tunnels over HTTP.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  はい、トンネルはちょっと悪い言葉ですけどね。SOAP はトランスポートを意識しない(transport agnostic)と言った方が良いですね。&lt;!--不可知Well, tunnel is such an ugly word.  We prefer to say SOAP is transport agnostic.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  でも HTTP はトランスポートじゃなくてアプリケーションプロトコルですよね。まあとにかく、SOAP がサポートしている他の「トランスポート」には何があるんですか? &lt;!--But HTTP isn懼t a transport, it懼s an application protocol.  Anyway, what other 懼transports懼・ does SOAP support?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  えーとですね、公式にはありません。&lt;!--Well, officially none.  --&gt;
ただ、どんなトランスポートも潜在的にはサポート可能です。
そして、JMS や FTP や SMTP をサポートしたプラットフォームがたくさんあります。
&lt;!--But you can potentially support any of 懼em.  And there懼s lots of platforms that support JMS, and FTP, and SMTP.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; 開発者&lt;/strong&gt;  誰かそれらのトランスポートを使っている人はいるんですか? &lt;!--Does anyone actually use these other transports?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  うーん、いません。でも重要なのはそれができる、ってことなんですよ。&lt;!--Uhm, no.  But the point is you can.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  そうですか。ところでこの SOAPAction ヘッダというのは何のためにあるんですか? &lt;!--Fine.  How 懼bout this SOAPAction HTTP header, what懼s that for?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  正直に言えば、誰も知りません。&lt;!--To be honest, no one懼s really sure.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  じゃ、この "actor" とか "mustUnderstand" 属性というのは? 誰かこれを使っている人はいますか? &lt;!--And these 懼actor懼・ and 懼mustUnderstand懼・ attributes, does anyone use those?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  いいえ。誰も使ってません。とりあえず無視してください。&lt;!--No.  Not really.  Just ignore those.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  わかりました。やってみます。&lt;!--All right, let me give it a shot.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(時間の経過)&lt;!--(time passes)--&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  えーと、一つの SOAP スタック上だけでなら、だいたい動くようになりました。&lt;!--Well, I could mostly make things work, but only if I stick with one SOAP stack.  --&gt;
あと RPC とオブジェクトのシリアライズはどうも好きになれません。
&lt;!--Also, I can懼t say I like the idea of remote procedure calls and serializing objects.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  RPC! オブジェクトのシリアライズですって!
&lt;!--Remote procedure calls!  Serialized objects!  --&gt;
SOAP が RPC だなんてどこで影響を受けたんですか?
&lt;!--Where did you get the impression that SOAP was about RPCs?  --&gt;
SOAP はドキュメントベースのメッセージングですよ!
&lt;!--SOAP is all about document-based message passing, my friend.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  え、でもたしかあなたがそう…&lt;!--But you just said懼--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  私が何て言ったかなんて忘れてください。
&lt;!--Forget what I said.  --&gt;
これからは
大粒度メッセージ
をやりとりするんです。
いいでしょ? 大粒度って言葉。
メッセージは XML スキーマに従ったものです。
この新しいスタイルは document/literal って言うんです。
あ、古いのは RPC/encoded ね。
&lt;!--From here on in we pass around coarse-grained messages懼you like that term, coarse-grained?.  Messages that conform to an XML Schema.  We call the new style Document/Literal and the old style RPC/Encoded.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  XML スキーマ?&lt;!--XML Schema?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  大流行してるんです。次はこれですよ。見てみてください。&lt;!--Oh, it懼s all the rage.  Next big thing.  Take a look.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  &lt;em&gt;(XMLスキーマ仕様を読む)&lt;!--(Reads XML Schema spec)--&gt;&lt;/em&gt;。
天よ、お助けください!
アレクサンドロス大王でも解けないよ、こんなの。
&lt;!--.  Saints preserve us!  Alexander the Great couldn懼t unravel that.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  心配しないでください。ツールがあなたのためにスキーマを作ってくれるんです。本当ですよ。これは全部ツールがやってくれるんです。&lt;!--Don懼t worry about it.  Your tools will create the schema for you.  Really, its all about the tooling.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  ツールはどうやってスキーマを作るんですか?&lt;!--How are the tools gonna do that?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  はい、
ツールは(可能なら)あなたのコードを反映したスキーマを自動的生成します。
&lt;!--Well, they will reflect on your code (if possible) and autogenerate a compliant schema.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  私のコードを反映するんですか?
オブジェクトのシリアライズではなくて、ドキュメントなんじゃないんですか?
&lt;!--Reflect on my code?  I thought it was all about documents, not serialized objects.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  私の話を聞いてなかったんですか?
全部ツールがやってくれるんです。
とにかく、あなたが手で XML スキーマと WSDL (ウィズドゥール)を書くとは期待していません。さらに、これは配管工事なんです。これを見る必用はないんです。
&lt;!--Didn懼t you hear me?  It懼s all about the tools.  Anyway, we can懼t expect you to write XML Schema and WSDL by hand.  Besides, its just plumbing.  You don懼t need to see it.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  ちょっとまったー。ウィズドゥール? 何それ?
&lt;!--Whoa, back up.  What was that word?  Wizzdle?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  あれ、まだ WSDL の説明をしてませんでしたっけ?
ダブリュ・エス・ディー・エル、Web サービス記述言語です。
&lt;!--Oh, haven懼t I mentioned WSDL?  W-S-D-L.  Web Services Description Language.  --&gt;
クライアント開発者がアクセスするサービスのデータ型やパラメータ、オペレーション名、トランスポートバインディング、エンドポイント URI を指定できるんです。
ほら見てください。
&lt;!--It懼s how you specify the data types, parameter lists, operation names, transport bindings, and the endpoint URI, so that client developers can access your service.  Check it out.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  &lt;em&gt;(WSDL 仕様を読む)&lt;!--(Reads WSDL spec)--&gt;&lt;/em&gt;
これ書いたやつ逝ってよし。
内部矛盾してるよ。
あとこの HTTP GET バインディングって何さ。
GET は未定義じゃなかったの?
&lt;!--.  I trust that the guys who wrote this have been shot.  It懼s not even internally consistent.  And what懼s with all this HTTP GET bindings.  I thought GET was undefined.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  気にしないでください。
&lt;!--Don懼t worry about that.  --&gt;
誰も使ってませんから。
とにかく、ツールが WSDL を生成してくれて、WSDL に XML スキーマも含まれているんです。
&lt;!--Nobody uses that.  Anyway, your tools will generate a WSDL, and in the WSDL will be the schema.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  しかしそれは逆であるべきじゃないんですか?
最初にコントラクトを設計してそれからコードを生成するべきではないんですか?
&lt;!--But shouldn懼t it be the other way 懼round?  Shouldn懼t I design the contract first and then generate the code?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;
はい、ええ、原理上はそうだと思います。
でも、それをやるのは簡単ではないんです。
それと WSDL を最初に作る開発手法をサポートしている SOAP スタックは少いんです。
それはツールにやらせてください
&lt;!--Well, yeah, I guess that sounds right in principle.  But that懼s not so easy to do, and very few SOAP stacks support WSDL-first development.  Just let the tools worry about it.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  もう一つ質問。&lt;!--One more question.  --&gt;
XML スキーマに適合したメッセージをやりとりするなら、
オペレーション名はどこで指定するんですか?
&lt;!--If we懼re now passing around XML Schema compliant messages, where do you specify the operation name?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  はい、SOAPAction HTTP ヘッダは覚えておられますか?
みんなそこにオペレーション名を書いています。
&lt;!--Well, remember that SOAPAction HTTP header?  Most people are putting it there.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  みんな?&lt;!--Most people?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  はい、この新しいスタイルは実はまだどこにも記載されていないんです。
&lt;!--Well, this new style isn懼t actually written down anywhere.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;
うーん
おたくの業界はしょっちゅうあいまいで間違ってて確実に標準化されていない仕様で構築されてるのに注意しないとなー。
実際、SOAP と WSDL 仕様はただの W3C Note であってワーキングドラフトでもないじゃないですか。
&lt;!--I懼ll also note that your entire industry is built around ambiguous, sometimes erroneous, and definitely not standardized specifications.  In fact, the SOAP and WSDL specs are just W3C Notes, not ever working drafts.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  今頑張っているところです。&lt;!--We懼re working on that.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  これで相互運用性が得られるんですか? 約束してもらえますか?&lt;!--Will this give me the interoperability I懼ve been promised?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  もちろんです。&lt;!--Absolutely.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  試してみます。&lt;!--I懼ll try it out.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(時間の経過)&lt;!--(Time passes)--&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  なんてこった。
俺のツールで生成した WSDL はお客様が使っているツールでは読み込めなかったよ。
&lt;!--This is getting ugly.  The WSDL my tools generated can懼t be consumed by the tools my partners use.  --&gt;
それだけじゃない、スキーマはわけかわらないし再利用できないじゃないか。
&lt;!--Not only that, the schemas it generates are impenetrable and can懼t be reused.  --&gt;
それに SOAPAction ヘッダの扱いを合意しているツールなんてないみたいだし。
&lt;!--And no tool seems to have agreed on how best to handle the SOAPAction header.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  御愁傷様です。
ただ救われるのは、もうだれも doc/lit スタイルを使っていないことです。
トランスポート独立にするために、wrapped-doc/lit をみんな使っているところです。
wrapped-doc/lit ってかっこよくないですか?
&lt;!--Sorry to hear that, buddy.  On the bright side, nobody uses the Doc/Lit style anymore.  In order to get transport independence back we懼re all using wrapped-doc/lit now.  Doesn懼t that sound cool: wrapped-doc/lit?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  何それ?&lt;!--What懼s that?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  はい、wrapped-doc/lit は doc/lit に似ているんですが、メッセージ全体をオペレーション名と同じ要素でラップするんです。
オペレーション名はメッセージに戻ってきました。
&lt;!--Well, it懼s just like Doc/Lit, but you take the whole message and wrap it in an element that has the same name as the operation.  Now the operation name is back in the message where it belongs.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  オーケイ、仕様はどこですか?&lt;!--Okay, where懼s the spec on this?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  あ、仕様はありません。&lt;!--Oh, there is no spec.  --&gt;
これはマイクロソフトがやろうとしているらしいことです。
&lt;!--This is just what Microsoft seems to be doing.  --&gt;
いいアイデアなので、賢い子たちはみんなこうやってますよ。
&lt;!--Looked like a good idea, so now all the cool kids are doing it.  --&gt;
それに、新しい話もあるんです。きっと気に入ると思います。
&lt;!--However, there is this new thing. I think you懼re gonna like it.  --&gt;
Web Service Interoperability Group、またの名を WS-I って言うんです。
&lt;!--It懼s called the Web Services Interoperability Group, or the WS-I.  --&gt;
彼らがやろうとしているのは
SOAP と WSDL 仕様のあいまいな部分をとりのぞくことです。
&lt;!--What they懼re doing is trying to remove a lot of the ambiguity in the SOAP and WSDL specs.  --&gt;
&lt;!--I know how you like specs.--&gt;
仕様がお好きなことは知ってますよ。
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;
それは言い換えると、仕様が非常に悪かったので、標準を標準化するための標準化団体が必用だったということですね。なんつーか。
で、WS-I は相互運用性問題を解決してくれるんですか?
&lt;!--So, in other words, the specs were so bad you need a standards body to standardize the standards.  Lord.  Well, will this solve my interoperability problems?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  ええ、そうです。&lt;!--Oh, yeah.  --&gt;
WS-I に適合した SOAP スタックを使って、
XML スキーマの80%を回避して、変なデータ型を使わずに、そして WebSphere と Apache Axis での動作を考えなければね。
&lt;!--So long as you use a WS-I compliant SOAP stack, avoid using 8/10ths of XML Schema, don懼t use any unusual data types, and don懼t count on working with WebSphere and Apache Axis.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; 開発者&lt;/strong&gt;  つーか wrapped-doc/lit はそこで説明されてるんですか?&lt;!--And is wrapped-doc/lit explained in there?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  えー、されないです。&lt;!--Ermm, no.  --&gt;
でも問題ないです。ツールは理解してくれますから。とにかく、ほとんどは。
&lt;!--But that懼s okay, you懼re tools understand it.  Most of them, anyway.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  まとめるとこうですか。
&lt;!--Let me sum up.  --&gt;
SOAP の定義は不安定で、SOAP は全然シンプルじゃなくて、
&lt;!--The definition of SOAP is in constant flux, SOAP is anything but simple, --&gt;

それは全てのツールがまだしていることだけれど、
もはやオブジェクトにアクセスという意味はないってことですね。
&lt;!--and it is no longer meant for accessing objects-even though that懼s what all the tools still do.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  だいたい正しいです。&lt;!--That懼s about right, --&gt;
ただ我々は一歩先を行っています。
&lt;!--but we懼re way ahead of you on this.  --&gt;
&lt;!--We懼ve deprecated the meaning of the SOAP acronym.--&gt;
SOAP の略語の意味を廃止したんです。
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt;  えー! &lt;!--Really! --&gt;何の略になったんですか?&lt;!-- What does it stand for now?--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  何の略でもないんです。&lt;!--Nothing.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;開発者&lt;/strong&gt; (ﾟДﾟ)ハア?&lt;!--(blink)--&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SOAP の人&lt;/strong&gt;  UDDI について説明させてもらえますか?&lt;!--Let me tell you about UDDI.--&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;!--I see that Duncan Cragg has beat me to the punch by also using the dialog format for his most recent &lt;a href="http://duncan-cragg.org/blog/post/getting-data-rest-dialogues/"&gt;REST/SOAP related post&lt;/a&gt;.  --&gt;
Duncan Cragg の最近の
&lt;a href="http://duncan-cragg.org/blog/post/getting-data-rest-dialogues/"&gt;REST/SOAP 関係のポスト&lt;/a&gt;
に、対話形式を使うのを先を越されてしまった。
このうぬぼれはソクラテスの時代から使われてきたという事実を勇気を持つ材料にしよう。
&lt;!--I take solace in the fact that 
this conceit has been used since the days of Socrates.--&gt;

&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-116956225417954458?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/116956225417954458/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=116956225417954458' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/116956225417954458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/116956225417954458'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2007/01/s-s.html' title='S はシンプルの S'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-116481306849442418</id><published>2006-11-30T00:10:00.000+09:00</published><updated>2007-09-21T23:43:57.996+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>[図解]東京の地下技術</title><content type='html'>&lt;/p&gt;
&lt;div class="hreview" &gt;

&lt;div class="description"&gt;
&lt;p&gt;思わず [これはすごい] タグを付けたくなる内容の本だった。&lt;/p&gt;
&lt;p&gt;そもそもなんで自分の Amazon のおすすめリストに入ってきたのかわからないんだけれど、
たぶん鉄関係の本をチェックしているからなんだろう。
&lt;/p&gt;
&lt;p&gt;本書は書名のとおり東京を例に、土木技術(特に地下および超大規模構造物)を平易な文章と豊富なイラストで紹介したものである。専門家には当たり前すぎてつまらない内容なのかもしれないけれど、建築初心者の僕には丁度よかった。
&lt;/p&gt;
&lt;p&gt;
たとえば&lt;a href="http://ja.wikipedia.org/wiki/%E6%9D%B1%E4%BA%AC%E6%B8%AF%E8%87%A8%E6%B5%B7%E9%81%93%E8%B7%AF"&gt;東京港臨海道路&lt;/a&gt;のトンネル部は4万トンの重さのトンネルブロックを11個、それぞれ海に浮べて引っ張っていき、海に沈めて連結してできた全長1.3km のトンネルである、というような一般人の想像をはるかに越えた現実を知ることができる。いったいどうやって4万トンの物体を海に浮べるのか、そしてそれをどうやって沈めるのか、その手法は知ってしまえば確かにそのとおりと思うのだけれど、それを想像できるかというと僕には自身がなかった。
&lt;/p&gt;
本書を読むと、トンネルや地下施設というのはそれぞれがオーダーメイドなのだ、ということがよくわかる。シールド機はトンネルにあわせて特注のものが作られるし、その土地の土壌や地盤の性質、あるいは周辺の環境に併せて適宜工法が選択・開発される。
&lt;/p&gt;
&lt;p&gt;
これはやっぱりソフトウェア開発でいうところのデザインパターンや開発手法に近いな、と思った。ソフトウェア開発手法に興味があるのなら、建築関係の本を読むのはやっぱり必要なのかも。
&lt;/p&gt;
&lt;/div&gt;

&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4761259787/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://ec2.images-amazon.com/images/P/4761259787.09._SCMZZZZZZZ_V1056613573_.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4761259787/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;図解 東京の地下技術―地面の下は「知」の結集、「技」の競演!&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;青山 ヤスシ 古川 公毅 &lt;/dd&gt;&lt;dd&gt;かんき出版 2001-12&lt;/dd&gt;&lt;/dl&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-116481306849442418?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/116481306849442418/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=116481306849442418' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/116481306849442418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/116481306849442418'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2006/11/blog-post.html' title='[図解]東京の地下技術'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-116437806043660417</id><published>2006-11-24T23:20:00.000+09:00</published><updated>2007-09-21T23:44:20.805+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xmldevday'/><title type='text'>第九回XML開発者の日 終了</title><content type='html'>無事終了しました。&lt;/p&gt;

&lt;p&gt;プレゼンは &lt;a href="http://d.hatena.ne.jp/secondlife/"&gt;secondlife さん&lt;/a&gt;のプレゼンツールをカスタマイズして使わせてもらいました。ありがとうございました。はてな記法なんで、&lt;a href="http://d.hatena.ne.jp/yohei/20061124"&gt;はてなダイアリーに置いておきます&lt;/a&gt;。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-116437806043660417?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/116437806043660417/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=116437806043660417' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/116437806043660417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/116437806043660417'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2006/11/xml_24.html' title='第九回XML開発者の日 終了'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-116291156429339916</id><published>2006-11-07T23:47:00.000+09:00</published><updated>2007-09-21T23:43:27.676+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='xmldevday'/><title type='text'>第九回XML開発者の日</title><content type='html'>11月24日に、昨年と同じ新富町の印刷会館で&lt;a href="http://www.asahi-net.or.jp/~eb2m-mrt/kaihatsu9.html"&gt;第九回XML開発者の日&lt;/a&gt;が開催されます。現時点で六つの発表が予定されていますが、あと一つか二つ追加されるかもしれません。&lt;/p&gt;

&lt;p&gt;今回、僕は「現実的な REST の実践(仮)」というタイトルで、実際のところ REST はどうつかえるのか、という話をしようと思っています。Cool URI とか Uniform Interface などが実際にどう Cool で Uniform なのかを昨年よりは具体的にお話できればと思っています。&lt;/p&gt;

&lt;p&gt;これが知りたい、という話があったらブログのコメントかブックマークコメント(del.icio.us とはてなブックマークとライブドアクリップは見てます)でご意見をいただければ、できるだけ応えられるようにしたいと思います。&lt;/p&gt;

&lt;p&gt;先ほどの xml-users への村田さんの投稿によると数日前の段階で70名の参加者だそうなので、参加希望の方はお早めに申し込みください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-116291156429339916?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/116291156429339916/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=116291156429339916' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/116291156429339916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/116291156429339916'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2006/11/xml.html' title='第九回XML開発者の日'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-116281172975794065</id><published>2006-11-06T20:15:00.000+09:00</published><updated>2007-09-21T23:42:13.346+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>REST 本</title><content type='html'>&lt;a href="http://www.crummy.com/writing/REST-Web-Services/"&gt;オライリーから REST の本が来年5月に出るらしい。&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;著者は &lt;a href="http://www.crummy.com/"&gt;Leonard Richardson&lt;/a&gt; と &lt;a href="http://www.intertwingly.net/blog/"&gt;Sam Ruby&lt;/a&gt;。
Leonard Richardson さんは知らなかったけど、有名な人なんですね。&lt;/p&gt;

&lt;p&gt;目次を見るとわかるけど、REST のアーキテクチャスタイルと
その実装としての Web をリソース指向アーキテクチャの観点で ruby コード付きで語るという
わくわくするような内容です。&lt;/p&gt;

&lt;p&gt;日本語版欲しいなあ。誰か訳してくれないかなあ。&lt;p&gt;

&lt;p&gt;[update 2007-09-21] &lt;a href="http://yohei-y.blogspot.com/2007/04/restful-web-services.html"&gt;その後出版されました&lt;/a&gt;。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-116281172975794065?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/116281172975794065/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=116281172975794065' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/116281172975794065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/116281172975794065'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2006/11/rest.html' title='REST 本'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-115884722009438633</id><published>2006-09-21T22:59:00.000+09:00</published><updated>2007-09-21T23:51:37.133+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ws-star'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Webサービスプラットフォームアーキテクチャ</title><content type='html'>という本が2月に出ていたらしい(結構分厚いので読むのに時間がかかる)。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4434073435/yoheiyweblog-22/ref=nosim/"&gt;Webサービスプラットフォームアーキテクチャ&lt;/a&gt;&lt;br /&gt;Sanjiva Weerawarana Frank Leymann Donald F. Ferguson &lt;br /&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4434073435/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://ec1.images-amazon.com/images/P/4434073435.09._SCMZZZZZZZ_.jpg" border="0" alt="4434073435" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/0131488740/yoheiyweblog-22/ref=nosim/"&gt;原著&lt;/a&gt;の著者はみなさんは WS-* の著者欄に名前を連ねている方々(特にIBM)で、
仕様策定のバックグラウンドを語らせたら右に出るものはいないと思われる。
本書ではその著者達が WS-* の各仕様を設計思想から解説しているので
仕様書を読むよりも楽にその背景思想を理解できる、と思う。
&lt;/p&gt;
&lt;p&gt;ちなみに REST もしっかりとアーキテクチャスタイルとして紹介されていて、
その最大の特徴(Uniform Interface)と WS-* の interface 中心主義との違いが簡単に述べられていた。
&lt;/p&gt;
&lt;p&gt;
さらに、実は本書はエンタープライズ環境の分散コンピューティングの技術の基本をざっと概観するのに適しているのではないかとも思う。
目次を見てもらうとわかるけれど、メッセージングの基礎から、discovery, description, reliability, security 等一通りのことは書いてある。
WS-* からより抽象的な概念に変換する能力は必要だが、このあたりに興味のある方にはお勧めである。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-115884722009438633?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/115884722009438633/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=115884722009438633' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/115884722009438633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/115884722009438633'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2006/09/web.html' title='Webサービスプラットフォームアーキテクチャ'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-115625524773345938</id><published>2006-08-22T22:57:00.000+09:00</published><updated>2007-09-21T23:52:36.709+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openid'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>WEB+DB PRESS Vol.34</title><content type='html'>&lt;/p&gt;
&lt;div class="hreview" &gt;
&lt;div class="description"&gt;
&lt;p&gt;&lt;a href="http://www.gihyo.co.jp/magazines/wdpress/"&gt;WEB+DB PRESS&lt;/a&gt; Vol.34 が届いたので読んでみました。&lt;/p&gt;
&lt;p&gt;
内容は &lt;a href="http://d.hatena.ne.jp/naoya/20060818/1155873566"&gt;naoya さんが書いてる&lt;/a&gt;とおり。
かなりいいかんじ。
&lt;/p&gt;
&lt;p&gt;まず僕が気になった記事は Web 認証 API 特集でした。
かなり基礎から最新動向までコンパクトにまとまった記事なので、
Web の認証まわりにそんなに詳しくない人に説明するのに丁度いいです。
ただ例がはてな認証APIばっかなので :-)、もう少し他の例があると嬉しかったです。
&lt;/p&gt;
&lt;p&gt;次に、弾さんの DHH インタビューも面白かった。
弾さんのインタビューの仕方がとても上手で、
DHH がいかにエンジニアとしてセンスいいかを引き出している感じでした。&lt;/p&gt;
&lt;p&gt;あとは第一特集の性能改善かなあ。
この辺も Web 上を頑張って探せば見つけられるんだろうけど、
こういう風に紙媒体でまとまって読めると人に勧めやすいし、
体系的に書いてあるので自分が知らなかった使い方を発見できます。
&lt;/p&gt;
&lt;p&gt;
これだけ Web に情報が溢れている現在、
紙媒体の従来メディアは存在意義を問われているわけですが、
WEB+DB PRESS さんは自身の立ち位置をちゃんと意識して
すごく上手に企画をされていると思いました。
&lt;/p&gt;
&lt;/div&gt;
&lt;div class="product" style="margin-bottom:0.5em; text-align:left;"&gt;&lt;a
class="item url"
href="http://www.amazon.co.jp/exec/obidos/ASIN/4774128694/yoheiyweblog-22/ref=nosim/"&gt;&lt;img
src="http://ec1.images-amazon.com/images/P/4774128694.01._SCMZZZZZZZ_.jpg"
alt="image WEB+DB PRESS Vol.34" class="photo"
style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt;
&lt;dl&gt;
 &lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4774128694/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;WEB+DB PRESS Vol.34&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;WEB+DB PRESS編集部 &lt;/dd&gt;&lt;dd&gt;技術評論社 2006-08-24&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-115625524773345938?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/115625524773345938/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=115625524773345938' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/115625524773345938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/115625524773345938'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2006/08/webdb-press-vol34.html' title='WEB+DB PRESS Vol.34'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-115607994033687128</id><published>2006-08-20T22:17:00.000+09:00</published><updated>2007-09-21T23:53:08.975+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='extensibility'/><title type='text'>XML の本当のメリットは拡張性を保証して構造化文書もマークアップできること</title><content type='html'>&lt;a href="http://yohei-y.blogspot.com/2005/01/xml-chimaira.html"&gt;デジャビュを感じる&lt;/a&gt;。&lt;/p&gt;

&lt;blockquote cite="http://www.rubyist.net/~matz/20060814.html#p03"&gt;
&lt;p&gt;XMLの「本当のメリット」ってなに？&lt;/p&gt;
&lt;p&gt;&lt;cite&gt;&lt;a href="http://www.rubyist.net/~matz/20060814.html#p03"&gt;Matzにっき XML のメリット、デメリット&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;XML の仕様には歴史的・政治的理由でいろいろと不満な点があります。
これは XML をやればやるほど感じるものです。
しかし、拡張性を保証して構造化文書もマークアップしようとすると
選択肢は XML しかないのもまた事実です。&lt;/p&gt;

&lt;p&gt;ということで、&lt;/p&gt;

&lt;blockquote cite="http://www.rubyist.net/~matz/20060814.html#p03"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;構造のあるデータが書けること(すずきひろのぶさん)&lt;/p&gt;
&lt;p&gt;別にS式でもYAMLでも書けますよね。拡張性のあるテキストのマークアップという意味(テキストが主、マークアップが従)ならSGMLの系譜を否定しませんが、データ記述や設定ファイルにまでとなると話は別です。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;cite&gt;&lt;a href="http://www.rubyist.net/~matz/20060814.html#p03"&gt;Matzにっき XML のメリット、デメリット(追記より)&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;結局はここに落ち着くのではないでしょうか。
XML というメタ言語の設計が構造化文書のマークアップに寄っているので、
データ記述や設定ファイルに使うとどうしても冗長性が鼻についてしまいます。
つまり用途によっては XML が最良の選択とはなりえないと僕も思います。
(参考: &lt;a href="http://d.hatena.ne.jp/m-hiyama/20060524/1148430450"&gt;檜山さんによる JSON と XML の比較&lt;/a&gt;)
&lt;/p&gt;



&lt;p&gt;あと「野良XML」のほとんどが名前空間を使っていない云々というのは
単なる印象っぽいので、どのくらいの割合で使っていないのか不明なんですが、
仮に名前空間を使っていない野良 XML であったとしても
将来的には名前空間を使って拡張することが可能になることは忘れてはいけないと思います(例: RSS 2.0)。&lt;/p&gt;

&lt;p&gt;Open Data が叫ばれる昨今、Web 上を流通するデータフォーマットでは
この拡張性というのは非常に重要な概念なのでやっぱりX重要&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-115607994033687128?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/115607994033687128/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=115607994033687128' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/115607994033687128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/115607994033687128'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2006/08/xml.html' title='XML の本当のメリットは拡張性を保証して構造化文書もマークアップできること'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-115444373910931635</id><published>2006-08-01T23:47:00.000+09:00</published><updated>2007-09-21T23:53:26.130+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atompub'/><title type='text'>The Atom Publishing Protocol as Universal Web Glue</title><content type='html'>&lt;p&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/1932394494/yoheiyweblog-22/ref=nosim/"&gt;RSS and Atom in Action&lt;/a&gt;
の人 Dave Johnson が &lt;a href="http://rollerweblogger.org/page/roller?entry=tri_xml_2006_presentation"&gt;TriXML 2006 で発表したスライド&lt;/a&gt;。74ページより&lt;/p&gt;

&lt;blockquote cite="http://rollerweblogger.org/downloads/presentations/TriXML2006-BeyondBlogging.pdf" title="Beyound blogging: Understanding feeds and publishing protocols"&gt;
&lt;h4&gt;APP as universal web glue&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Not just for blogs anymore&lt;/li&gt;
&lt;li&gt;Entries can carry any type of data&lt;/li&gt;
&lt;li&gt;You can do a lot with collections + CRUD&lt;/li&gt;
&lt;li&gt;Consider Atom Publishing Protocol as the basis for your next web service&lt;/li&gt;
&lt;li&gt;What's missing
&lt;ul&gt;
&lt;li&gt;Hierarchical collections&lt;/li&gt;
&lt;li&gt;Collection queries&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;p&gt;&lt;cite&gt;&lt;a href="http://rollerweblogger.org/downloads/presentations/TriXML2006-BeyondBlogging.pdf"&gt;Beyound blogging: Understanding feeds and publishing protocols&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;


&lt;p&gt;フィードや APP はもはやブログだけのものではなく、
Atom の提供する entry と collection という汎用 XML と CRUD は
Web 全体をつなぐ接着剤の役目を果たし始めていると。
APP を Web サービス基盤として捕らえるのがもう普通になってきた感じです。&lt;/p&gt;

&lt;p&gt;ちなみに "The Atom Publishing Protocol as Universal Web Glue" というのは
&lt;a href="http://conferences.oreillynet.com/cs/os2006/view/e_sess/9568"&gt;OSCON での Tim Bray のセッション&lt;/a&gt;のタイトルですね。
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-115444373910931635?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/115444373910931635/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=115444373910931635' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/115444373910931635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/115444373910931635'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2006/08/atom-publishing-protocol-as-universal.html' title='The Atom Publishing Protocol as Universal Web Glue'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-115409596349567288</id><published>2006-07-28T23:12:00.000+09:00</published><updated>2007-09-21T23:54:12.169+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>本3冊</title><content type='html'>&lt;p&gt;しばらく時間が空いてしまいましたが、最近気になった本を3冊紹介します。&lt;/p&gt;


&lt;p&gt;まずは Flickr の中の人、&lt;a href="http://www.iamcal.com/"&gt;Cal Henderson&lt;/a&gt; の Building Scalable Web Site。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.google.co.jp/search?q=rest"&gt;REST&lt;/a&gt; が設計思想からスケーラビリティを攻めているのに対し、この本は実践からいかにスケーラブルなサイトを構築するかを攻めています。
似たような話は古くは &lt;a href="http://www.danga.com/words/2005_oscon/oscon-2005.pdf"&gt;LiveJournal の中の人&lt;/a&gt;から、
&lt;a href="http://jeff-kubina.blogspot.com/2006/03/etech-2006-session-scaling-fast-and.html"&gt;Flickr の中の人&lt;/a&gt;まで、
さらに最近は &lt;a href="http://www.archive.org/details/YAPC2006TokyomixijpChangeLog"&gt;mixi の中の人&lt;/a&gt;や
&lt;a href="http://d.hatena.ne.jp/naoya/20060404/1144121846"&gt;はてなブックマークの中の人&lt;/a&gt;
(&lt;a href="http://www.archive.org/details/YAPCAsia2006TokyoInsideHatenaBookmarksBackend"&gt;ビデオ&lt;/a&gt;)、
&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774128104/yoheiyweblog-22/ref=nosim/"&gt;ライブドアの中の人&lt;/a&gt;まで
さまざまなテクニックや経験則を公開してくれていて、まさに高速道路建設中なわけですが、
この本はその高速道路のひとつの出口になるんじゃないでしょうか。
ぜひ日本語版もほしい一冊だと思います。
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/0596102356/yoheiyweblog-22/ref=nosim/" target="_top"&gt;Building Scalable Web Sites&lt;/a&gt;&lt;br /&gt;Callum Henderson Cal Henderson &lt;br /&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/0596102356/yoheiyweblog-22/ref=nosim/" 
&gt;&lt;img src="http://images.amazon.com/images/P/0596102356.01._SCMZZZZZZZ_.jpg" border="0" alt="0596102356" /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;2冊目はデータ工学の研究者なら誰でも知っている &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/155860622X/yoheiyweblog-22/ref=nosim/"&gt;Data 
on the Web&lt;/a&gt; の翻訳、「XML データベース入門」です。&lt;/p&gt;
&lt;p&gt;訳者の&lt;a href="http://alpha.c.oka-pu.ac.jp/~kunishi/"&gt;国島先生&lt;/a&gt;は&lt;a href="http://aquamarine.c.oka-pu.ac.jp/weblog/archives/2006/05/xpath_20.html"&gt;僕も知り合いですが&lt;/a&gt;、日本でまじめに XML 関連の研究をなさっている研究者のお一人です。
&lt;a href="http://aquamarine.c.oka-pu.ac.jp/weblog/archives/2006/07/20067xmldata_on.html"&gt;国島先生の翻訳解説エントリ&lt;/a&gt;にもあるとおり、
かなり丁寧に翻訳さている印象です。特に XML の解説の章の訳注の入れ方は半端じゃないです。&lt;/p&gt;

&lt;p&gt;
本書で扱われているトピックは半構造データ(semi-structured data)、特に XML のデータモデルとその問合せ処理についてです。
いわゆる学術書なので、自分には関係ないと思う人も多いかもしれないですが、
現在一般に扱われているデータ RSS, Atom, JSON なんてのはまさに半構造データなわけです。
そういったデータをいかに蓄積し、検索するか。
そんな問題を考えている人は手にとってみるとよいかもしれません。
&lt;/p&gt;

&lt;p&gt;
ただ、一点だけ気になったのは、キーワードが日本語オンリーなところ。
英語も併記してもらえると、特に初学者には理解が進むと思いました。
もし訳語リストがあれば、公開していただけませんか＞国島先生。
2006-08-01 追記: コメント欄で索引に訳語リストがあることを教えてもらいました。
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4320121627/yoheiyweblog-22/ref=nosim/" &gt;XMLデータベース入門&lt;/a&gt;
&lt;br /&gt;
Serge Abiteboul Dan Suciu Peter Buneman
&lt;br /&gt;
&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4320121627/yoheiyweblog-22/ref=nosim/" &gt;&lt;img src="http://images-jp.amazon.com/images/P/4320121627.09.MZZZZZZZ.jpg" order="0" alt="4320121627" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;最後は翔泳社の Web 2.0 キーワードブックです。
これは僕もお手伝いをしました。REST の章を書いてます。
たぶん、これまで書いた REST の解説の中で一番コンパクトにまとめたものになっています。
あまり Web 技術に詳しくない人にも理解できるように、なるべく平易な記述を心がけたつもりです。
&lt;/p&gt;

&lt;p&gt;Web 2.0 という言葉はすでに陳腐化してしまった感がありますが、
ギークのそういった気分もいくらか取り込まれていて、特に&lt;a href="http://kiri.jblog.org/"&gt;切込隊長&lt;/a&gt;のエピローグには思わずニヤッとしました。
&lt;/p&gt;

&lt;p&gt;それにしても、献本をもらうまで著者陣を知らなかったのですが、&lt;a href="http://watcher.moe-nifty.com/memo/2006/06/web20__0e66.html"&gt;かなり強力&lt;/a&gt;ですね。
個人的には自分の原稿が&lt;a href="http://www.rubyist.net/~matz/"&gt;まつもとさん&lt;/a&gt;と&lt;a href="http://ch.kitaguni.tv/u/5250/"&gt;村田さん&lt;/a&gt;の間だった
のに感動しました。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798111260/yoheiyweblog-22/ref=nosim/" &gt;Web2.0 キーワードブック&lt;/a&gt;&lt;br /&gt;SE 編集部 &lt;br /&gt;&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798111260/yoheiyweblog-22/ref=nosim/"&gt;&lt;img 
src="http://images.amazon.com/images/P/4798111260.01._SCMZZZZZZZ_.jpg" border="0" alt="4798111260" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-115409596349567288?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/115409596349567288/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=115409596349567288' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/115409596349567288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/115409596349567288'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2006/07/3.html' title='本3冊'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-114719139016616357</id><published>2006-05-10T01:15:00.000+09:00</published><updated>2006-05-10T01:40:37.030+09:00</updated><title type='text'>次の話</title><content type='html'>blogger が落ちてたんで遅くなりました。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://subtech.g.hatena.ne.jp/miyagawa/20060509/1147161767"&gt;http://subtech.g.hatena.ne.jp/miyagawa/20060509/1147161767&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://naoya.g.hatena.ne.jp/naoya/20060509/1147157679"&gt;http://naoya.g.hatena.ne.jp/naoya/20060509/1147157679&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;この Hack が素晴らしい。で、見てておもったんだけど、ウェブのフロントエンドアプリケーション作りが得意な人は、そのフロントエンドアプリケーションから利用するバックエンドの API を規定して、API のエンドポイントを任意の URL に設定できるとかそういうものを作ったりとか、そういう時代が来る。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;大体近いんだけど、ちょっとまとめ方が違ってる。&lt;/p&gt;
&lt;p&gt;(中略)&lt;/p&gt;
&lt;p&gt;Amazon Web Services みたいな、「APIでデータとれるのでどうぞあなたのアプリでつかってください」っていうのが旧時代の Web API で、Amazon の場合はこれでも結局最後は集客につながるからいいんだけど、次の Web API ってのは逆で、「APIにあわせてアプリかけば、こっちのサービスで使えるようにしてあげますよ」ってやつ。こっちのほうがより「つながってる」感じがする。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;このやり取りがこれだけの短時間のうちに行われているのがさすが 
miyagawa さんと naoya さんという感じ。
僕はこういう見方で Livedoor Reader を見ていなかったので、かなり感銘を受けた。
以下はそこから出た妄想です。&lt;/p&gt;


&lt;p&gt;思うにこれからの Web サービスは三つに分離するのではないか。
ひとつは Amazon S3 や Google Base や Flickr や
はてなブックマークのようなデータストア提供サービス。
二つ目は OpenID/Typekey 認証やはてブの件数取得 API 
や SimpleAPI のような機能提供サービス。
そして三つ目が今回の LDR のような UI 提供サービス。&lt;/p&gt;

&lt;p&gt;データストア提供サービスというのはわかりやすいと思う。
これまではローカルに保存されていたようなユーザデータを 
Web 上にもってきて付加価値をつけて提供するサービスのこと。&lt;/p&gt;

&lt;p&gt;これに対して機能提供サービスは基本的にデータは保持しない。
もちろん設定情報とか最低限は持つんだろうけど、あくまでもそれだけ。
ユーザの一番大切なデータの保管は他にまかせちゃう。
そのかわりにそこでしか提供できない機能を提供する。&lt;/p&gt;

&lt;p&gt;んで UI 提供サービスを使ってそれらをマッシュアップするわけです。&lt;/p&gt;

&lt;p&gt;こうなってくると、データストア提供サービスや機能提供サービスは、
固有の UI を持つかもしれないけどそれはあくまでもオマケで、
彼らの本当の価値はユーザデータの格納と各種機能の提供になる。
そして UI サービスは、
いかに汎用的かつ拡張可能な機能を持ち、
かつ洗練されたユーザインターフェースを作るか、
が勝負になる。
LDR は今まさにこの先頭を走っていて、そこにこそ価値があるのかも。&lt;/p&gt;

&lt;p&gt;つまりはてブの編集フロントエンドに 
LDR がなったらすごくね、ということですね。今はまだ完全にはできないけど。
もっと言うと誰でも最速の人が作る UI 
を自分のサービスのフロントエンドエンジンとして使えるようになるということです。
&lt;/p&gt;

&lt;p&gt;あとは各サービス間のインターフェースが問題になるんだけど、
データストアの大本命は Atom Store (APP)でしょうね。
各データストアサービスは GData のように必要な拡張タグを施して
Atom フィード/エントリを提供する。
UI や機能提供サービス側は共通タグにはもちろん対応するんだけど、
それ以外の拡張タグや microformats にも対応していく。
拡張タグに対応する UI 機能を pluggable に作る必要もありそうだ。&lt;/p&gt;

&lt;p&gt;もちろん課題はかなりある。
たとえば現状では Greasemonkey がないとだめ。
しかもたぶん GM_xmlhttpRequest 使って別ドメインにアクセスすることになるんで、
セキュリティの問題がつきまとう。
これは cross-domain 対応の XMLHttpRequest の実装が揃うまで待つしかないのかな。
よく知らんけど&lt;/p&gt;

&lt;p&gt;それから認証と SSO も。そこをうまくやらないと使ってもらえないし。&lt;/p&gt;

&lt;p&gt;あと一番難しくてだからこそ希少価値があるのは LDR レベルの UI が作れるエンジニア(というかデザイナかな)かもしれない。流れはそっちだと思うんで、がんがれ若者&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-114719139016616357?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/114719139016616357/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=114719139016616357' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/114719139016616357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/114719139016616357'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2006/05/blog-post.html' title='次の話'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-114597218191994687</id><published>2006-04-25T22:36:00.000+09:00</published><updated>2007-09-21T23:55:01.205+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='soap'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>日経SYSTEMS。</title><content type='html'>&lt;a href="http://coin.nikkeibp.co.jp/coin/sys/"&gt;日経SYSTEMS&lt;/a&gt; 5月号で Web 2.0 関連技術(特にREST)がシステム開発に与える影響についての取材を受けました。
P60に数行だけ僕の発言が引用されていました(下記に引用したので全文)。
僕がしゃべったこととはちょっと違ったのでここで訂正しておきます。&lt;/p&gt;

&lt;blockquote&gt;
コンテンツを読むだけでなく、簡単に書き込めることが重要。
&lt;/blockquote&gt;

&lt;p&gt;これはそのとおり。&lt;/p&gt;

&lt;blockquote&gt;
REST では GET に PUT と DELETE を加えれば Web ブラウザだけでそれが簡単に実現できる。
&lt;/blockquote&gt;

&lt;p&gt;これは言ってないよー。ブラウザだけで簡単に実現はできないっしょ。少くとも現時点では。&lt;/p&gt;


&lt;blockquote&gt;
新たに SOAP を覚える必用がない
&lt;/blockquote&gt;

&lt;p&gt;まあそうかもしれない。ただ、これに相当することを言った覚えはないんですが…。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-114597218191994687?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/114597218191994687/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=114597218191994687' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/114597218191994687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/114597218191994687'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2006/04/systems.html' title='日経SYSTEMS。'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-114554023248170119</id><published>2006-04-20T22:03:00.000+09:00</published><updated>2007-09-21T23:55:55.581+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>WEB+DB PRESS Vol.32 に REST の記事を書きました</title><content type='html'>&lt;a href="http://naoya.g.hatena.ne.jp/naoya/20060420/1145510366"&gt;naoya さんが先に言及&lt;/a&gt;してくれてますが、&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774127523/yoheiyweblog-22/ref=nosim/"&gt;WEB+DB PRESS Vol.32&lt;/a&gt; に 「REST アーキテクチャスタイル入門」という記事を書きました&lt;/p&gt;

&lt;p&gt;Web アプリケーション開発者の方を対象に
Web アプリでの REST から Atom Publishing Protocol まで、
かなり細かく解説したつもりです。
&lt;a href="http://hatena.g.hatena.ne.jp/hatenatech/"&gt;はてな技術発表会&lt;/a&gt;で &lt;a href="http://hatena.g.hatena.ne.jp/hatenatech/20060207/1139287164"&gt;naoya さんが XML 開発者の日の参加報告をしている&lt;/a&gt;のを聴いて、
普通の Web アプリケーション開発者の人にももっと REST を知ってもらえたらいいなと感じたのがその理由です。
なので&lt;a href="http://d.hatena.ne.jp/keyword/%a4%cf%a4%c6%a4%ca%a5%b9%a5%bf%a5%c3%a5%d5"&gt;はてなスタッフの方々&lt;/a&gt;にはぜひ一人一冊ずつ購入していただければと:-)。&lt;/p&gt;

&lt;p&gt;ただ、&lt;a href="http://yohei-y.blogspot.com/2006/03/rest.html"&gt;やっぱり REST は難しい&lt;/a&gt;ですね。人に説明するたびに思います。記事でわからないことがあれば、ここにコメントしていただければできる範囲で返答しようと思います。
&lt;/p&gt;

&lt;div class="product"&gt;
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4774127523/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/4774127523.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt;
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4774127523/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;WEB+DB PRESS Vol.32&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;WEB+DB PRESS編集部&lt;/dd&gt;&lt;dd&gt;技術評論社 2006-04-25&lt;/dd&gt;&lt;/dl&gt;
&lt;/div&gt;

&lt;p style="clear: left"&gt;しかしこの号、結構面白いですね。
&lt;a href="http://blog.bulknews.net/mt/archives/002035.html"&gt;miyagawa さんの連載&lt;/a&gt;は参考になるし、その隣の&lt;a href="http://blog.livedoor.jp/dankogai/"&gt;弾さん&lt;/a&gt;の連載にはお茶目な &lt;a href="http://www.wall.org/~larry/"&gt;Larry Wall&lt;/a&gt; が登場しています。あとは &lt;a href="http://d.hatena.ne.jp/naoya/20060223/1140663498"&gt;naoya さんの新連載&lt;/a&gt;は &lt;a href="http://www.catalystframework.org/"&gt;Catalyst&lt;/a&gt; の話だし、&lt;a href="http://d.hatena.ne.jp/secondlife/"&gt;gorou さん&lt;/a&gt;の新連載は &lt;a href="http://www.wall.org/~larry/"&gt;prototype.js&lt;/a&gt; の解説と、かなりツボを抑えている感じです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-114554023248170119?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/114554023248170119/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=114554023248170119' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/114554023248170119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/114554023248170119'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2006/04/webdb-press-vol32-rest.html' title='WEB+DB PRESS Vol.32 に REST の記事を書きました'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-114506062729609916</id><published>2006-04-15T09:22:00.000+09:00</published><updated>2007-09-21T23:57:11.481+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Shibuya.js 行ってきた ($X 最高)</title><content type='html'>昨日&lt;a href="http://www.dhw.co.jp/school/location/tokyo/location_tokyo.html"&gt;デジハリ&lt;/a&gt;で行われた 
&lt;a href="http://shibuyajs.org/articles/2006/03/27/shibuya-js-technical-talk-1"&gt;Shibuya.js Technical Talk#1&lt;/a&gt; に行ってきました。
&lt;a href="http://d.hatena.ne.jp/secondlife/"&gt;id:secondlife&lt;/a&gt; さんの結成宣言に始まり、
&lt;a href="http://eto.com"&gt;えとさん&lt;/a&gt;による&lt;a href="http://eto.com/d/PresenShibuyaJS.presen"&gt;この10年と次の10年の話&lt;/a&gt;、
&lt;a href="http://d.hatena.ne.jp/amachang/"&gt;IT戦記 amachang&lt;/a&gt; さんが javascript を300倍高速化した後、
&lt;a href="http://www.namazu.org/~takesako/"&gt;竹迫さん&lt;/a&gt;による爆笑プレゼン、
&lt;a href="http://ma.la/"&gt;mala さん&lt;/a&gt;が&lt;a href="http://la.ma.la/blog/diary_200604151914.htm"&gt;自身の開発環境+ポリシーを余すことなく公開&lt;/a&gt;し、
&lt;a href="http://d.hatena.ne.jp/secondlife/"&gt;id:secondlife さん&lt;/a&gt;から 
&lt;a href="http://rails2u.com/misc/shibuyajs1/"&gt;RJS Template のソース嫁&lt;/a&gt;とありがたいお言葉を頂戴して、
怒涛のライトニングトークの最後は怖いビデオをマッタリと視聴しつつ、
&lt;a href="http://d.hatena.ne.jp/tnx/"&gt;id:thx&lt;/a&gt; さんの軽快な司会て幕を閉じました。&lt;/p&gt;

&lt;p&gt;どの発表も大変面白かったのですが個人的には &lt;a href="http://lowreal.net/"&gt;cho45(さとう)さん&lt;/a&gt;の &lt;a href="http://lowreal.net/2006/shibuya-js-1-lt.html"&gt;$X リスペクト&lt;/a&gt;です。
僕もグリモンスクリプトをちょこちょこ書いて遊んでいるんですが、
ちょっと前に見つけたこの &lt;a href="http://lowreal.net/logs/2006/03/13/3"&gt;$X&lt;/a&gt; なしではもう書けません。
&lt;a href="http://www.w3.org/TR/DOM-Level-3-XPath/"&gt;DOM level 3 の XPath 拡張&lt;/a&gt;は非常に低レベルで、
単に XPath でノード指定したいだけなのになんでこんな長ったらしいコードを書かなければいけないのだと思うわけですが、
この &lt;a href="http://lowreal.net/logs/2006/03/13/3"&gt;$X&lt;/a&gt; 使うと1行で書けます。
さらに &lt;a href="http://lowreal.net/logs/2006/03/13/3"&gt;$X&lt;/a&gt; のインターフェースがまたよく考えられていて、
XPath の評価結果のノードタイプに応じてきちんと返る値が動的に変わったり、
context 省略できたり、
コードを書いていてストレスがまったくありません(&lt;a href="http://lowreal.net/logs/2006/03/16/1"&gt;名前空間出てくるとちょっとストレスたまる&lt;/a&gt;けど…)。
これと &lt;a href="http://tokyoenvious.xrea.jp/b/javascript/xpath_finder.html"&gt;XPath 検索バー&lt;/a&gt;組み合わせて開発してると、
いわゆる「&lt;a href="http://www.google.co.jp/search?q=%E4%BF%BA%E3%81%A3%E3%81%A6%E3%81%B0%E3%82%B9%E3%82%B2%E3%83%BC"&gt;俺ってばスゲー&lt;/a&gt;」的爽快感を味わえます。&lt;/p&gt;

&lt;p&gt;グリモン使いには超おすすめ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-114506062729609916?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/114506062729609916/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=114506062729609916' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/114506062729609916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/114506062729609916'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2006/04/shibuyajs-x.html' title='Shibuya.js 行ってきた ($X 最高)'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-114292735084769425</id><published>2006-03-21T16:40:00.000+09:00</published><updated>2007-09-21T23:57:58.477+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='ws-star'/><category scheme='http://www.blogger.com/atom/ns#' term='soap'/><title type='text'>カミングアウト。</title><content type='html'>Tim Bray の &lt;a href="http://www.tbray.org/ongoing/When/200x/2006/03/16/WS-Gartner"&gt;WS-Crossroads&lt;/a&gt; から REST 関連のブログエントリが凄いことになってます。
Tim のエントリはガートナーの group VP で chief fellow な Daryl Plummer の &lt;a href="http://www.optimizemag.com/article/showArticle.jhtml?articleId=180207087"&gt;Web Services At A Crossroads&lt;/a&gt; という記事を受けてのもの。
Plummer の文章はツッコミどころがあるものの、いいこといっているのも事実だと。&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Tim のエントリは最後の段落がとてもいいです。&lt;/p&gt;

&lt;blockquote&gt;
Speaking for myself, not for Sun, I think that we ought to be pouring resources and investment into tooling and developer support around simple XML/HTTP/REST technologies. You know, the standardized ones that work today.
&lt;/blockquote&gt;

&lt;p&gt;これを受けたのがマイクロソフトの Don Box です。
まず &lt;a href="http://pluralsight.com/blogs/dbox/archive/2006/03/18/20235.aspx"&gt;Going Down To The Crossroads...&lt;/a&gt; というエントリで、
Tim の上記の段落を受けて、マイクロソフトの環境・ツールがどれくらい HTTP/XML/REST をサポートしているかをまとめてくれています。&lt;/p&gt;

&lt;p&gt;さらに Don の次のエントリでは &lt;a href="http://pluralsight.com/blogs/dbox/archive/2006/03/18/20236.aspx"&gt;HTTP, XML, REST, and $100&lt;/a&gt; と題して、もし $100 あったら、HTTP/XML/REST 関係の開発の何にどれくらいを費やしてほしいか、の意見を求めています。
このコメントやトラックバックが面白いんですが、&lt;a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=473cc14f-4668-43cf-b5b9-0178f9271296"&gt;Dare Obasanjo の反応&lt;/a&gt;がまじめにいいです。
いわく $40 を IE での XML サポート強化(E4Xとか)に、$30 を WCF での RESTful サービスサポートに、
$20 が C# と VB.NET での &lt;a href="http://research.microsoft.com/%7Eemeijer/Papers/XLinq%20XML%20Programming%20Refactored%20%28The%20Return%20Of%20The%20Monoids%29.htm"&gt;XLinq&lt;/a&gt; サポート、最後の $10 は W3C じゃない XML 技術(RELAX NG や Schematron)のサポートと。&lt;/p&gt;

&lt;p&gt;その後は&lt;a href="http://lesscode.org/2006/03/19/rest-wins-noone-goes-home/"&gt;lesscord での勝利宣言&lt;/a&gt;(いくつか心配もありますが)があったり、
&lt;a href="http://mix06.com/"&gt;Mix06&lt;/a&gt; で&lt;a href="http://microformats.org/blog/2006/03/20/bill-gates-at-mix06-we-need-microformats"&gt;ビルゲイツが "We need microformats"&lt;/a&gt; と言ったり、時代が確実に動いているという感じですね。
&lt;/p&gt;



&lt;p&gt;最後に僕もいちおう&lt;a href="http://pluralsight.com/blogs/dbox/archive/2006/03/18/20246.aspx"&gt;カミングアウト&lt;/a&gt;しておこうかな。&lt;/p&gt;

&lt;p&gt;I'm a Restafarian.

&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-114292735084769425?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/114292735084769425/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=114292735084769425' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/114292735084769425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/114292735084769425'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2006/03/blog-post.html' title='カミングアウト。'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-114140057141823085</id><published>2006-03-04T00:42:00.000+09:00</published><updated>2007-09-21T23:59:21.071+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><title type='text'>REST ってやっぱり難しいかも。</title><content type='html'>&lt;a href="http://yohei-y.blogspot.com/2006/01/rest.html"&gt;前のエントリでこんなことを書いたばかり&lt;/a&gt;だけれど、REST ってやっぱりどうよ、という気分になったので久々に blog を更新してみる。&lt;/p&gt;

&lt;p&gt;ただただしさんの&lt;a href="http://sho.tdiary.net/20060301.html#p03"&gt;おれだったらフォト蔵APIをこうする&lt;/a&gt;を読んで、僕が del.icio.us に書いた感想は&lt;/p&gt;

&lt;blockquote&gt;
+1。ID == URI ですよね。Cool URI は名詞であるべき、というのは強調したい。「日本REST協会」入りたくないなー(笑)。みんな休んでそう
&lt;/blockquote&gt;

&lt;p&gt;というもの。たださんのエントリでは URI と書くべきところが ID になっててちょっと気になったり、「作法」は「アーキテクチャ」じゃなくて「アーキテクチャスタイル」だ、とか思ったのだけれど、でも本筋としては納得の内容だった。&lt;/p&gt;

&lt;p&gt;しかし、たださんのエントリの、&lt;a href="http://sho.tdiary.net/20060301.html#c06"&gt;たかはしさん&lt;/a&gt;や &lt;a href="http://sho.tdiary.net/20060301.html#c07"&gt;mizzy&lt;/a&gt; さんのコメントを読んでうーんと唸ってしまった。&lt;/p&gt;

&lt;p&gt;僕にはお二人の言いたいことがわかる。んで両方間違っていないと思う。&lt;/p&gt;

&lt;p&gt;たとえばたかはしさんの言うとおり、RoyF の元論文では GET/POST/PUT/DELETE を使えなんて一言も書いてないわけで。そうじゃなくて単に Uniform Interface が重要だよ、というだけの話。&lt;/p&gt;

&lt;p&gt;でも今回のフォト蔵 API に関して言えば、Uniform Interface の間違った使い方をしちゃっているので、ちゃんと RESTful に設計するなら HTTP の GET/POST/PUT/DELETE をたださんが指摘したように使うのがまっとうな方法だとも思う。&lt;/p&gt;

&lt;p&gt;mizzy さんのコメントの最後&lt;/p&gt;

&lt;blockquote&gt;
ここでたださんが言っているRESTというのは、正確には「RESTアーキテクチャスタイルのアーキテクチャであるHTTPを利用したAPI」のことだと思われますので、アーキテクチャの話に絞って問題ないかと思います。 
&lt;/blockquote&gt;

&lt;p&gt;というのは重要で、問題の根源はここにある気がする。異なる次元の別の話(アーキテクチャスタイルの話、HTTP の話、Web API 設計の話)が全部 REST という名前の下で行われていうので、混乱してしまう。これは僕にも一因があって、これまでのこの blog のエントリでも上記をごっちゃで使ってしまっている。&lt;/p&gt;

&lt;p&gt;言葉を正確に使おうとすると非常にメンドウなので、僕自身の文章力ではなんともならないのだけれど、ここではせめてそれぞれの次元がどう違うのかを下記に列挙しておきたい。&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;REST アーキテクチャスタイル&lt;/dt&gt;
&lt;dd&gt;RoyF の元論文に基くアーキテクチャスタイルについての議論。
ここでは HTTP のメソッドがどうしたという話は原則関係ない。
REST アーキテクチャスタイルを基にした Web アプリのアーキテクチャを設計する段で、
たとえば GET/POST/PUT/DELETE を使うのがいいのか、
GET と POST だけを使えばいいのか、という議論もありえる。
このレベルの話を、下記の偶然 REST っぽい Web API に適用してもあまり意味がない。
プログラミング初心者にいきなり最先端のデザインパターンの話を聞かせるようなもの。
&lt;/dd&gt;

&lt;dt&gt;偶然 REST っぽい Web API&lt;/dt&gt;
&lt;dd&gt;いわゆる XML を HTTP でやりとりしますよ的な API を
REST API と呼んでいるケース。
この場合の REST という言葉は非常に矮小化されてしまっていて、
僕としてはこれは POX over HTTP と呼びたい。
個人的には正直あんまり興味なし。
&lt;/dd&gt;

&lt;dt&gt;Restful Web サービス&lt;/dt&gt;
&lt;dd&gt;RoyF の論文はそこらの××な(自己規制)博士論文の1万倍凄いんだが、
それでもやっぱり脇が甘いところもあるし古くなっちゃってるところもある。
それに REST アーキテクチャスタイルを実装(アーキテクチャ)に落そうとすると
とたんに色々な問題が出てきて、そう単純な話では済まないのも事実。
一方で2000年以降、このような設計・実装の議論はずっとされてきて、進化してる。
実際にいろいろな試みがなされていて、Paul Prescod の経験則とか
Mark Baker の蘊蓄とか、すごく蓄積されている。
たとえば POST は新規作成とか URI は名詞でとかいう話はより実装に近い話。
APP(AtomPP) はここでの重要な成果の一つ。&lt;/dd&gt;
&lt;dd&gt;
その他にも REST にまつわる現在進行形の議論はたくさんあって、
たとえば OOP と REST とか SOA/WS-* と REST とか Ajax と REST とか XML vs YAML vs JSON とか階層化ファイルシステムと単一階層モデルとか microformats と REST とか。まさに Web 2.0 が表現するアルファギークの気分の中でフワフワ浮いているような話題なんだけれど、この話題、まだ体系的に言語化/文書化されてないので
現在進行形の文脈を共有している人とじゃないと議論できない。
僕が今一番興味があるのはここ。
&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;実は今 REST の入門記事を某誌向けに書いているんだけど、
この原稿でも上記の次元の異る REST が無意識にまざってしまっていて、
困ったなあと思っていたりする。締切も近いしどうするかなあ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-114140057141823085?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/114140057141823085/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=114140057141823085' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/114140057141823085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/114140057141823085'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2006/03/rest.html' title='REST ってやっぱり難しいかも。'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-113871267111090325</id><published>2006-01-31T22:01:00.000+09:00</published><updated>2007-09-22T00:00:05.298+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='ws-star'/><title type='text'>REST は難しい、だからこそ面白い</title><content type='html'>知り合いに教えてもらって知ったのだが、&lt;a href="http://software.nikkeibp.co.jp/software/backno/2006/0603indexc.html"&gt;今月の日経ソフトウエア&lt;/a&gt;は
Web プログラミングの特集である。
ちょっと立ち読みしたところ、内容は Web 2.0 まわりの記事だった。
その特集の中の囲み記事で REST と僕の名前が出てくるところがある。
「わかりづらい REST という言葉」というタイトルで、
REST がアーキテクチャスタイルであること、
一方で REST API は「ホームページ」のような誤用であるが、そちらの方が一般的になってしまっていること、
が簡単に記述されていた。&lt;/p&gt;

&lt;p&gt;REST == HTTP GET+XML のような紹介よりも1万倍よかったし、
何よりこういう初心者向けのメジャー(?)な雑誌記事で REST に言及するよ
うになって、本当によかったと思う。1年前には考えられなかったことだ。&lt;/p&gt;

&lt;p&gt;ただ、気になったのは REST が難しくてわかりづらい、という話だ。&lt;/p&gt;

&lt;p&gt;そりゃ確かに REST は難しい。&lt;a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm"&gt;RoyF の論文&lt;/a&gt;を読みこなすには相当知識が必用だし、僕の &lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html"&gt;REST 入門&lt;/a&gt;もやっぱり難しいと思います。コンテキストを共有していないと。
僕自身、SOAP で Web サービスを一通りやって、その長所短所がわかってからやっと、REST の良さを認識できた。&lt;/p&gt;

&lt;p&gt;でも一方で本当に難しいのかな、とも思う。
いや、なんというか、「難しさの質」の問題とでもいうか。
たとえば XML Schema の複雑怪奇でどこから手をつけていいのかわからないような難しさ、あるいは &lt;a href="http://namazu.org/~satoru/misc/bad-knowhow.html"&gt;BK 的な奥が深い難しさ&lt;/a&gt;、とは性格が違うんじゃないだろうか。&lt;/p&gt;

&lt;p&gt;そしてさらに思うのは、そういう難しさの質が違うものに対して、単に難しくてわかりづらいから、楽でわかりやすい方に流れるというのは技術者としてどうなんだろう、ということ。
難しくてもシンプルだったり、美しかったり、論理的に納得させてくれたりするものの方が、
複雑なものを上辺だけ楽そうに見えるカワを被せて隠蔽しているものよりも
&lt;a href="http://www.symmetric.co.jp/hiyama/SoftwareEngineering.htm"&gt;ずっと本質的で面白いのではないだろうか&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;REST は難しい。でも、ただそれだけの理由で
REST がバズワード化して誤解されてしまうのはなんだか悲しい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-113871267111090325?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/113871267111090325/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=113871267111090325' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/113871267111090325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/113871267111090325'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2006/01/rest.html' title='REST は難しい、だからこそ面白い'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-113439853466653565</id><published>2005-12-12T23:35:00.000+09:00</published><updated>2007-09-22T00:00:54.854+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='atompub'/><title type='text'>Atom で件数取得</title><content type='html'>&lt;a href="http://d.hatena.ne.jp/naoya/20051212/1134382021"&gt;なんか催促されちゃったみたいなので :-)&lt;/a&gt; 詳しく書いてみます。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://d.hatena.ne.jp/naoya/20051212/1134375086"&gt;はてなのブックマーク件数取得 API&lt;/a&gt; いいですね。
今さら xml-rpc かよ! というツッコミは置いておいて、
データ重要な世の中で有用なコンテンツ(メタデータ)にリーチする
方法が増えるのは喜ばしいことです。&lt;/p&gt;


&lt;blockquote&gt;
そうそう、こういう API を AtomPP で実装するとしたらどんな感じなんだろう。そもそもうまくフィードで定義できるのか。教えて偉い人!
&lt;/blockquote&gt;

&lt;p&gt;偉い人じゃないけど、結論からいえば、
Atom Publishing Protocol (APP) そのままじゃ無理です。
やってもいいけどどうしても無理が出てしまいそう。
そもそも目的が違うのだから、ここは野良 XML/プロトコルでいいのでは。
ただ、結果をフィードで取れるとそれなりに嬉しいかもしれない。
&lt;/p&gt;

&lt;p&gt;普通 REST で検索するときは query string を使った URI を
GET することになる(検索結果リソースを GET する)んですが、
今回の場合のようにパラメータがたくさんあったり長かったりする場合は
GET は現実的ではありません。
こういうときは問合せ文書(query document)を POST で投げます。
&lt;/p&gt;

&lt;pre&gt;
POST /atom/exist HTTP/1.1
Host: b.hatena.ne.jp
Content-Type: application/xml
Content-Length: xxx

&amp;lt;uri-list xmlns="http://ns.hatena.ne.jp/uri-list"&gt;
  &amp;lt;uri&gt;http://d.hatena.ne.jp/naoya/20051212&amp;lt;/uri&gt;
  &amp;lt;uri&gt;http://yohei-y.blogspot.com&amp;lt;/uri&gt;
&amp;lt;/uri-list&gt;
&lt;/pre&gt;

&lt;p&gt;結果はたとえば XML 形式で取れます。&lt;/p&gt;

&lt;pre&gt;
HTTP/1.1 201 Credated
Host: b.hatena.ne.jp
Content-Type: application/xml
Content-Length: xxx
Location: http://b.hatena.ne.jp/atom/exist/1234567890abcdefg

&amp;lt;bookmark-list xmlns="http://ns.hatena.ne.jp/bookmark"&gt;
  &amp;lt;bookmark&gt;
    &amp;lt;uri&gt;http://d.hatena.ne.jp/naoya/20051212&amp;lt;/uri&gt;
    &amp;lt;count&gt;5&amp;lt;/count&gt;
  &amp;lt;/bookmark&gt;
  &amp;lt;bookmark&gt;
    &amp;lt;uri&gt;http://yohei-y.blogspot.com&amp;lt;/uri&gt;
    &amp;lt;count&gt;4&amp;lt;/count&gt;
  &amp;lt;/bookmark&gt;
&amp;lt;/bookmark-list&gt;

&lt;/pre&gt;

&lt;p&gt;ここでのキモは Location ヘッダで検索結果リソースの URI を返しているところ。
この URI を GET すればいつでもこの検索結果(の最新版)が取得できると。
&lt;/p&gt;

&lt;p&gt;リクエストとレスポンスは野良 XML でもいいんですが、これくらいの情報なら JSON の方がプログラムから扱いやすくて便利ですよね。実際、グリモンとかから使うなら JSON の方がいいと僕も思います。&lt;/p&gt;

&lt;p&gt;ただ、レスポンスの場合、野良 XML じゃなくて Atom フィードだと
いいことありそうです。&lt;/p&gt;

&lt;pre&gt;
HTTP/1.1 201 Created
Host: b.hatena.ne.jp
Content-Type: application/atom+xml
Content-Length: xxx
Location: http://b.hatena.ne.jp/atom/exist/1234567890abcdefg

&amp;lt;?xml version="1.0" encoding="utf-8"?&gt;
&amp;lt;feed xmlns="http://www.w3.org/2005/Atom"&gt;
  &amp;lt;title&gt;はてなブックマーク検索結果&amp;lt;/title&gt; 
  &amp;lt;link rel="self" type="application/atom+xml"
    href="http://b.hatena.ne.jp/atom/exist/1234567890abcdefg"/&gt;
  &amp;lt;updated&gt;2003-12-13T18:30:02Z&amp;lt;/updated&gt;
  &amp;lt;author&gt;&amp;lt;name&gt;Hatena&amp;lt;/name&gt;&amp;lt;/author&gt; 
  &amp;lt;id&gt;urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6&amp;lt;/id&gt;

  &amp;lt;entry&gt;
    &amp;lt;title&gt;なおやのはてなダイアリー&amp;lt;/title&gt;
    &amp;lt;link href="http://d.hatena.ne.jp/naoya/20051212"/&gt;
    &amp;lt;link rel="alternate" href="http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/naoya/20051212"/&gt;
    &amp;lt;id&gt;urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a&amp;lt;/id&gt;
    &amp;lt;updated&gt;2005-12-13T18:30:02Z&amp;lt;/updated&gt;
    &amp;lt;summary&gt;5&amp;lt;/summary&gt;
    &amp;lt;content type="xhtml"&gt;
      &amp;lt;!-- リンク、キーワード、タグなんかをそのまま入れる --&gt;
    &amp;lt;/content&gt;
  &amp;lt;/entry&gt;

  &amp;lt;entry&gt;
    &amp;lt;title&gt;yohei-y:weblog&amp;lt;/title&gt;
    &amp;lt;link href="http://yohei-y.blogspot.com"/&gt;
    &amp;lt;link rel="alternate" href="http://b.hatena.ne.jp/entry/http://yohei-y.blogspot.com"/&gt;
    &amp;lt;id&gt;urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a&amp;lt;/id&gt;
    &amp;lt;updated&gt;2005-12-10T10:34:02Z&amp;lt;/updated&gt;
    &amp;lt;summary&gt;4&amp;lt;/summary&gt;
    &amp;lt;content type="xhtml"&gt;
      &amp;lt;!-- リンク、キーワード、タグなんかをそのまま入れる --&gt;
    &amp;lt;/content&gt;
  &amp;lt;/entry&gt;

&amp;lt;/feed&gt;
&lt;/pre&gt;

&lt;p&gt;ブックマーク件数は summary に入れるの? とか(summary/content の中で microformats 的にやったほうがいいかもしれない)、いろいろツッコミどころはありますが、雰囲気は伝わるんじゃないでしょうか。&lt;/p&gt;

&lt;p&gt;イメージとしては、現在の人間用はてなブックマーク一覧のページで、
表示するブックマークを一つ一つ指定できるようにした感じです。
今のブックマーク一覧ページで取れている情報をそのまま Atom フィードにしたものを想像してもらえればいいでしょう。
カテゴリなど、Atom で用意されている要素はそのまま使ってもよさそうだし、
足りない要素・属性があればはてなの名前空間で足せばいいだけ。
&lt;/p&gt;

&lt;p&gt;Atom フィードなんで、RSS リーダで購読すれば更新情報も取れます。
自分の気になる記事がどれくらいブックマークされてるかどうか気になる人には
けっこう嬉しいんじゃないでしょうか。&lt;/p&gt;

&lt;p&gt;まー、フィードは Atom じゃなくて RSS でもいいじゃん、
といわれちゃいそうだけど、RESTful に考えるとこんな風になるという参考までに。&lt;/p&gt;

&lt;p&gt;追記: 例のレスポンスのステータスコードを 201 にしました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-113439853466653565?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/113439853466653565/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=113439853466653565' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/113439853466653565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/113439853466653565'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/12/atom.html' title='Atom で件数取得'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-113306548221917560</id><published>2005-11-27T13:21:00.000+09:00</published><updated>2007-09-22T00:02:04.600+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='xmldevday'/><category scheme='http://www.blogger.com/atom/ns#' term='webdav'/><category scheme='http://www.blogger.com/atom/ns#' term='atompub'/><title type='text'>山田さんの資料</title><content type='html'>XML 開発者の日の tai さんの資料をいただいたので&lt;a href="http://www.geocities.jp/yamamotoyohei/rest/"&gt;公開します&lt;/a&gt;。
&lt;a href="http://www.geocities.jp/yamamotoyohei/rest/"&gt;REST, Atom, and WebDAV&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-113306548221917560?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/113306548221917560/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=113306548221917560' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/113306548221917560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/113306548221917560'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/11/blog-post.html' title='山田さんの資料'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-113301384036940940</id><published>2005-11-26T22:53:00.000+09:00</published><updated>2007-09-22T00:02:55.830+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='translations'/><title type='text'>Paul Prescod の Common REST Mistakes</title><content type='html'>&lt;a href="http://www.prescod.org"&gt;Paul Prescod&lt;/a&gt; の &lt;a href="http://www.prescod.net/rest/mistakes/"&gt;Common REST Mistakes&lt;/a&gt; の&lt;a href="http://www.geocities.jp/yamamotoyohei/rest/mistakes.html"&gt;翻訳版を公開しました&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;本当は今年の1月に訳してたんですが、諸般の事情で公開するまでに時間かかってしまいました。また、村田さんからたくさん助言をもらって訳文を修正してあるんですが、それでも Paul の文章は僕には難しくてあんまり読みやすい日本語にはなってません。ただ非常に含蓄のある内容ですのでぜひ原文とあわせてご覧ください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-113301384036940940?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/113301384036940940/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=113301384036940940' title='3 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/113301384036940940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/113301384036940940'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/11/paul-prescod-common-rest-mistakes.html' title='Paul Prescod の Common REST Mistakes'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-113292310728524118</id><published>2005-11-25T21:04:00.000+09:00</published><updated>2007-09-22T00:03:20.388+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='xmldevday'/><title type='text'>第八回XML開発者の日</title><content type='html'>昨日、第八回XML開発者の日が開催されました。死ぬほどつかれたけれど、死ぬほど面白かった。こんなにまじめに一日中頭を使って人の話を聞いたのは久しぶりです。&lt;/p&gt;

&lt;p&gt;僕の&lt;a href="http://www.geocities.jp/yamamotoyohei/rest/"&gt;発表資料&lt;/a&gt;とパネルのときに即席で作った&lt;a href="http://www.geocities.jp/yamamotoyohei/rest/"&gt;スライド&lt;/a&gt;です。発表資料の方は&lt;a href="http://d.hatena.ne.jp/keyword/%A4%E2%A4%F3%A4%BF%A5%E1%A5%BD%A5%C3%A5%C9"&gt;もんたメソッド&lt;/a&gt;なのでスライドショーで見てください。パワーポイントない人は &lt;a href="http://www.openoffice.org"&gt;OOo&lt;/a&gt; でお願いします。(2006-04-11 置き場所修正)&lt;/p&gt;

&lt;p&gt;以下、感想とまとめです。&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;REST入門 山本陽平(株式会社リコー)&lt;/dt&gt;
&lt;dd&gt;REST の入門編を喋ってみました。
なるべく基本的なところを丁寧に話したかったんですが、成功したかどうか…
コネクタの話をしなかったので、高橋さんにちょっとご迷惑をおかけしました m(_ _)m&lt;/dd&gt;

&lt;dt&gt;はてなとREST API &lt;a href="http://d.hatena.ne.jp/naoya/"
&gt;伊藤 直也&lt;/a&gt;(&lt;a href="http://www.hatena.ne.jp/"&gt;株式会社はてな&lt;/a&gt;)&lt;/dt&gt;
&lt;dd&gt;モテ重要、ということでなんではてなが APP を採用したのか、
その根底に流れるデータ重要という考え方、
サーバサイド実装における Cool URI の重要性、
などがわかりやすくまとまっていてとても参考になりました。&lt;/dd&gt;


&lt;dt&gt;&lt;a href="http://d.hatena.ne.jp/secondlife/20050914/1126631161"&gt;RESTful Wiki&lt;/a&gt;
 の実装 &lt;a href="http://gorou.zapto.org/"&gt;gorouこと舘野祐一&lt;/a&gt;(株式会社ディノ)&lt;/dt&gt;
&lt;dd&gt;REST のことがわからんから作ってみたという gorou さん。
わからないといっている割に実装はとても素直に REST をなぞっていて、
やはりアルファギークがよいフレームワークできれいに実装すると
REST の流儀に従ったアーキテクチャになるのかな、と思った次第です。
&lt;/dd&gt;


&lt;dt&gt;API としてみた &lt;a href="http://www.movabletype.jp/"
&gt;Movable Type&lt;/a&gt; と &lt;a href="http://d.hatena.ne.jp/keyword/TrackBack"&gt;TrackBack&lt;/a&gt;
&lt;a href="http://uva.jp/dh/mt/"&gt;平田大治&lt;/a&gt;(&lt;a href="http://www.sixapart.jp/"
&gt;シックス・アパート株式会社&lt;/a&gt;)&lt;/dt&gt;
&lt;dd&gt;みなさんが感想で書かれているように、トラックバックが海外ではあまり普及していない、というのは意外な事実でしたね。
実際この blogger も SixApart の LiveJournal もデフォルトではトラックバックできません。
平田さんの発表のキーワードはプラットフォーム重要、でしょうか。
&lt;/dd&gt;


&lt;dt&gt;WebDAV/REST/AtomAPI 山田泰資(&lt;a href="http://www.iij.ad.jp/"
&gt;株式会社インターネットイニシアティブ&lt;/a&gt;)&lt;/dt&gt;
&lt;dd&gt;tai さんのお話は僕の期待以上でした。
歴史を詳しく捉えつつ REST/Atom と WebDAV を比較。
そして実装の問題へ。
僕が聞いた範囲でも tai さんの発表が一番面白かったという人が多かったです。
&lt;/dd&gt;


&lt;dt&gt;Ajax が REST に及ぼす影響 高橋征義(株式会社ツインスパーク)&lt;/dt&gt;
&lt;dd&gt;REST 萌えな高橋さん。
僕も「REST は割と好き」です。
高橋さんから出てきたキーワード "conector on demand" は Ajax 時代の REST を端的に表現する言葉じゃないかと思います。
それにしても生高橋メソッドはすごかった。
&lt;/dd&gt;

&lt;dt&gt;The Service-Oriented  &lt;a href="http://www.markbaker.ca/"&gt;Mark 
Baker&lt;/a&gt;(&lt;a href="http://www.justsystem.co.jp"&gt;株式会社ジャストシステム&lt;/a&gt;) 発表代理: 村田真&lt;/dt&gt;
&lt;dd&gt;
村田さんいわく Mark は日本のレベルをなめていた、ということでさらっと発表が終わってしまいましたが、
&lt;a href="http://www.markbaker.ca/2005/11/ServiceOrientedWeb/"&gt;Mark のスライド&lt;/a&gt;は参考になります。
特に OPTIONS を例で出してくるところなんかさすがというか、他の誰も触れなかったところなのでよかったです。
&lt;/dd&gt;

&lt;dt&gt;パネルディスカッション&lt;!-- 発表者 + 
&lt;a href="http://www.witha.jp/blog/"&gt;丸本徹&lt;/a&gt;(&lt;a 
href="http://www.witha.jp/"&gt;有限会社ウィザシステム&lt;/a&gt;) + 
大野邦夫(&lt;a href="http://www.justsystem.co.jp"&gt;株式会社ジャストシステム&lt;/a&gt;) + 
大谷真(&lt;a href="http://www.shonan-it.ac.jp/"&gt;湘南工科大学&lt;/a&gt;)--&gt;&lt;/dt&gt;
&lt;dd&gt;
パネルの直前に村田さんに仕事の電話がかかってきていきなり会場で仕事をしだすというハプニングが (^^;
ちょっと心の準備ができていなかったのでとてもあせりました。
ということで僕が進行役をやったせいであんまりまとまりのない流れになってしまってごめんなさい。
会場からみなさんどんな言語やフレームワークを使っていますか? という質問をいただいたら盛り上がりましたね。
なんというかほんとに皆さんいい意味でばらばら。
そして Ruby と Rails の強さが改めて印象に残りました。
&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;あと、会場で &lt;a href="http://eto.com"&gt;eto さん&lt;/a&gt;にはじめて会えたのが1995年から Web やってる人間としてよかった点です。&lt;/p&gt;

&lt;p&gt;詳細な議事録を入手したので&lt;a href="http://b.hatena.ne.jp/entry/http://www.asahi-net.or.jp/~eb2m-mrt/kaihatsu8.html"&gt;はてなブックマーク&lt;/a&gt;に載せておきました。Tさんありがとう!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-113292310728524118?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.asahi-net.or.jp/~eb2m-mrt/kaihatsu8.html' title='第八回XML開発者の日'/><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/113292310728524118/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=113292310728524118' title='9 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/113292310728524118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/113292310728524118'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/11/xml.html' title='第八回XML開発者の日'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-113137420645124172</id><published>2005-11-07T23:36:00.000+09:00</published><updated>2007-09-22T00:03:44.224+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='feeds'/><title type='text'>Windows Vista の RSS パーサは Well-formed XML のみサポート</title><content type='html'>&lt;a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=3d3385a3-89cb-43b2-a4a6-c943a80025c8"&gt;Dare Obasanjo の blog&lt;/a&gt; で知ったんですが、
&lt;a href="http://blogs.msdn.com/rssteam/archive/2005/11/03/489065.aspx"&gt;Microsoft Team RSS Blog&lt;/a&gt; より&lt;/p&gt;

&lt;blockquote&gt;

  &lt;p&gt;&lt;i&gt;Our years of experience in with HTML in Internet Explorer have taught us the 
long-term pain that results from being too &lt;a href="http://en.wikipedia.org/wiki/Postel%27s_Law"&gt;liberal with what you accept 
from others&lt;/a&gt;. Hence, we’ve adopted the following overriding principle for IE 
7 and RSS platform in Windows Vista:&amp;nbsp; &lt;/i&gt;&lt;/p&gt;

  &lt;p&gt;&lt;i&gt;&amp;nbsp;We will only support feeds that are &lt;a href="http://www.w3.org/TR/REC-xml/#dt-wellformed"&gt;well-formed&lt;/a&gt; XML.&lt;/i&gt;&lt;/p&gt;

  &lt;p&gt;&lt;i&gt;This principle allows us to build a more predictable feed parser. As a 
platform, it's important that&amp;nbsp;applications using the platform to consume 
feeds&amp;nbsp;can rely on the fact that the platform will always be providing 
information in the way that the publisher intended (trying to guess what a 
publisher meant to do when there is an error in a feed can be tricky, at best). 
We also spoke to several people in the RSS and developer community&amp;nbsp;at Gnomedex 
and at PDC, and they wholeheartedly supported this.&lt;/i&gt;&lt;/p&gt;

&lt;/blockquote&gt;

&lt;p&gt;IE7 と Windows Vista の RSS パーサは整形式(well-formed)の XML だけをサポートすると。
現在世の中で流通している RSS フィードがどれくらい well-formed なのか知らないのですが、
英断だと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-113137420645124172?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/113137420645124172/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=113137420645124172' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/113137420645124172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/113137420645124172'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/11/windows-vista-rss-well-formed-xml.html' title='Windows Vista の RSS パーサは Well-formed XML のみサポート'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-112964658175558244</id><published>2005-10-18T23:40:00.000+09:00</published><updated>2007-09-22T00:05:13.198+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='xmldevday'/><title type='text'>XML 開発者の日、見どころ聞きどころ</title><content type='html'>&lt;a href="http://ch.kitaguni.tv/u/5250/"&gt;村田さん&lt;/a&gt;から&lt;a
 href="http://www2.xml.gr.jp/log.html?MLID=xmlusers&amp;amp;TID=9251&amp;amp;F=0&amp;L=10&amp;amp;R=1#M9340"
&gt;アナウンス&lt;/a&gt;があったとおり11月24日(木)に&lt;a
 href="http://www.jfpi.or.jp/kaikan/map.html"
&gt;新富町の印刷会館&lt;/a&gt;で &lt;a href="http://www.asahi-net.or.jp/~eb2m-mrt/kaihatsu8.html"
&gt;XML 開発者の日が復活&lt;/a&gt;します。&lt;/p&gt;


&lt;p&gt;&lt;a href="http://www2005.org/"
&gt;5月の WWW2005&lt;/a&gt; で村田さんにお会いしたときに、
開発者の日で REST を扱いたいですよね、
という話をしていたのですが、
&lt;a href="http://wwwsoc.nii.ac.jp/iieej/"
&gt;画像電子学会&lt;/a&gt;という事務局がみつかって開催のはこびとなりました。
REST について&lt;a href="http://yohei-y.blogspot.com/2005/05/web-services-considered-harmful.html"
&gt;議論する場がずっと欲しかった&lt;/a&gt;ので、
今回は僕も準備のお手伝いをさせてもらいました。
具体的には何人かの発表者の選定や連絡などさせてもらってます。&lt;/p&gt;

&lt;p&gt;さて、プログラム(予定)ですが、
現時点で REST の話を日本語でするなら
ほぼベストな布陣になっていると我ながら思います。
以下では僕の独断と偏見で、各講演の見どころ聞きどころを説明したいと思います。&lt;/p&gt;


&lt;dl&gt;
&lt;dt&gt;REST入門 山本陽平(株式会社リコー)&lt;/dt&gt;
&lt;dd&gt;朝イチで僕が REST の入門編を喋ります。
ベースは&lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html"
&gt;この blog の REST 入門&lt;/a&gt;ですが、これはかなり
uniform interface に特化した内容になっているので、
それ以外の REST の特徴についてもできるだけ丁寧に触れられるようにしたいと思います。
REST って? という人はまずここで予習をしてください。
ちなみに開発者の日で話すのは5年ぶり。&lt;/dd&gt;

&lt;dt&gt;はてなとREST API &lt;a href="http://d.hatena.ne.jp/naoya/"
&gt;伊藤 直也&lt;/a&gt;(&lt;a href="http://www.hatena.ne.jp/"&gt;株式会社はてな&lt;/a&gt;)&lt;/dt&gt;
&lt;dd&gt;続いていきなり naoya さんが登場。
知っている人は知っていると思いますが、
naoya さんの講演は blog と同じで大変わかりやすいです。
今回はかなり技術的につっこんだ発表が聞けるのではないかと思います。
とくにサーバ側の実装が気になる人は必見でしょう。&lt;/dd&gt;


&lt;dt&gt;&lt;a href="http://d.hatena.ne.jp/secondlife/20050914/1126631161"&gt;RESTful Wiki&lt;/a&gt;
 の実装 &lt;a href="http://gorou.zapto.org/"&gt;gorouこと舘野祐一&lt;/a&gt;(株式会社ディノ)&lt;/dt&gt;
&lt;dd&gt;発表者リストを考えながら、
誰にお願いしようかなーと悩んでいたところで、gorou さんの
&lt;a href="http://d.hatena.ne.jp/secondlife/20050914/1126631161"&gt;RESTWiki&lt;/a&gt; 
が&lt;a href="http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/secondlife/20050914/1126631161"&gt;巷で話題に&lt;/a&gt;なりました。
&lt;a href="http://www.4bit.net/archives/2005/06/restful_web_app.html"
&gt;XMLHttpRequest を使ってブラウザを REST クライアントにするというアイデア&lt;/a&gt;は以前からみかけたのですが、
それを実際に実装しているところ(しかも rails で)に感動しました。
&lt;a href="http://del.icio.us/tag/rest+rails"&gt;rest+rails&lt;/a&gt; の話が聞けるのは幸せです。
&lt;/dd&gt;


&lt;dt&gt;API としてみた &lt;a href="http://www.movabletype.jp/"
&gt;Movable Type&lt;/a&gt; と &lt;a href="http://d.hatena.ne.jp/keyword/TrackBack"&gt;TrackBack&lt;/a&gt;
&lt;a href="http://uva.jp/dh/mt/"&gt;平田大治&lt;/a&gt;(&lt;a href="http://www.sixapart.jp/"
&gt;シックス・アパート株式会社&lt;/a&gt;)&lt;/dt&gt;
&lt;dd&gt;平田さんは説明不要ですね。日本における blog の教祖みたいな人です。
&lt;a href="http://ietfreport.isoc.org/idref/draft-ietf-atompub-protocol/"
&gt;AtomPP&lt;/a&gt; よりも前から trackback api は RESTful でした。
TrackBack の本家本元 MT で REST がどう扱われていくのか、
そんな話が聞けるといいですね。&lt;/dd&gt;


&lt;dt&gt;WebDAV/REST/AtomAPI 山田泰資(&lt;a href="http://www.iij.ad.jp/"
&gt;株式会社インターネットイニシアティブ&lt;/a&gt;)&lt;/dt&gt;
&lt;dd&gt;山田さんは知る人ぞ知る日本の 
&lt;a href="http://en.wikipedia.org/wiki/RESTafarian"&gt;RESTafarian&lt;/a&gt; です。
REST がこんなに盛り上がるはるか前から、
REST に関する論考を発表されていました(リンク切れなので&lt;a 
href="http://web.archive.org/web/20030917040045/http://www.imasy.or.jp/~tai/wiki/index.php?RestRpcApi"&gt;アー&lt;/a&gt;&lt;a 
href="http://web.archive.org/web/20040123112957/http://www.imasy.or.jp/~tai/wiki/index.php?RestNamingIssue"&gt;カイ&lt;/a&gt;&lt;a 
href="http://web.archive.org/web/20040217135412/http://www.imasy.or.jp/~tai/wiki/?RestfulToolkit"&gt;ブ&lt;/a&gt;をどうぞ)。
僕も山田さんの Wiki ではかなり勉強させてもらっていて、
個人的には今回一番楽しみな発表です。&lt;/dd&gt;


&lt;dt&gt;未定 高橋征義&lt;/dt&gt;
&lt;dd&gt;みなさんご存知、高橋さんです。
高橋さんは&lt;a href="http://www.xml.gr.jp/event/xmldevday1.html"
&gt;第1回 XML 開発者の日&lt;/a&gt;でも発表されています。
高橋さんといえば &lt;a href="http://www.ruby-lang.org/ja/"
&gt;Ruby&lt;/a&gt;, &lt;a href="http://www.rubyonrails.org/"
&gt;Rails&lt;/a&gt; (そして&lt;a href="http://www.rubycolor.org/takahashi/"&gt;高橋メソッド&lt;/a&gt;)ですが、
WWW のアーキテクチャスタイルとしての REST にも早期から着目されています。
高橋さんならではのわかりやすいプレゼンで、
REST アーキテクチャスタイルを語ってもらうのが楽しみです。
&lt;/dd&gt;


&lt;dt&gt;分散オブジェクトから REST へ(仮) &lt;a href="http://www.markbaker.ca/"&gt;Mark 
Baker&lt;/a&gt;(&lt;a href="http://www.justsystem.co.jp"&gt;株式会社ジャストシステム&lt;/a&gt;) 発表代理: 村田真&lt;/dt&gt;
&lt;dd&gt;
Mark Baker は &lt;a href="http://www.ics.uci.edu/~fielding/"&gt;Roy Fielding&lt;/a&gt;、&lt;a href="http://www.prescod.net/"&gt;Paul Prescod&lt;/a&gt; に並ぶ REST 推進者の一人です。
彼自身は独立コンサルタントですが、
&lt;a href="http://www.markbaker.ca/2002/09/Blog/2004/11/22#2004-11-gig"
&gt;現在の彼のクライアントにジャストシステムがいる&lt;/a&gt;そうで、
日本との関わりも多いようです。
今回は Mark と知り合いの村田さんが、直接 Mark に発表スライドの作成を依頼してくれました。
&lt;a href="http://www.markbaker.ca/2002/09/Blog/"&gt;Mark の blog&lt;/a&gt; 
や&lt;a href="http://www.markbaker.ca/2002/11/Resume/"&gt;経歴&lt;/a&gt;を読んでもらえればわかりますが、
彼の分散オブジェクトから REST までの経験と知識は世界一です。
彼の発表が日本語で、しかも村田さんの代理発表で、聞ける機会は本当に貴重です。
&lt;/dd&gt;

&lt;dt&gt;パネルディスカッション 発表者 + 
&lt;a href="http://www.witha.jp/blog/"&gt;丸本徹&lt;/a&gt;(&lt;a 
href="http://www.witha.jp/"&gt;有限会社ウィザシステム&lt;/a&gt;) + 
大野邦夫(&lt;a href="http://www.justsystem.co.jp"&gt;株式会社ジャストシステム&lt;/a&gt;) + 
大谷真(&lt;a href="http://www.shonan-it.ac.jp/"&gt;湘南工科大学&lt;/a&gt;)&lt;/dt&gt;
&lt;dd&gt;
パネルの内容はまだ未定ですが、パネリストは豪華ですね。
丸本さんは &lt;a href="http://www.witha.jp/BlogWrite/"&gt;BlogWrite&lt;/a&gt; の開発者で、
&lt;a href="http://www.witha.jp/Atom/"&gt;Atom にとてもお詳しい&lt;/a&gt;方です。
丸本さんと発表者、さらに大野さんと大谷さんという重鎮を迎えて深い議論ができるのではないかと期待しています。
&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;以上、簡単にですがプログラムを紹介してみました。
&lt;a href="http://www.asahi-net.or.jp/~eb2m-mrt/kaihatsu8.html"
&gt;ぜひ皆さんご参加ください&lt;/a&gt;。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-112964658175558244?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/112964658175558244/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=112964658175558244' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112964658175558244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112964658175558244'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/10/xml.html' title='XML 開発者の日、見どころ聞きどころ'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-112694903014856939</id><published>2005-09-17T18:23:00.000+09:00</published><updated>2007-09-22T00:05:36.994+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Javascript+HTML のデザインパターン</title><content type='html'>僕もご多分に漏れず &lt;a href="http://del.icio.us/yohei/javascript"&gt;Javascript で遊んだり調べたり&lt;/a&gt;しています。
いろいろなクールなサイトの生 Javascript を見て勉強しているのですが、
まず面白いなと思ったのがロールオーバーの実現方法です(JavaScript や HTML をわかってる人には当たり前の内容だと思うので、ツマラナイ話だと思いますが)。
&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.webstandards.org/"&gt;WaSP&lt;/a&gt; の左上の画像のロールオーバーは&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;
&amp;lt;img id="logo" src="/img/logo.gif" height="100" width="103"
  alt="Web Standards Project logo" /&gt;
&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;生 HTML はこんなかんじで onmouseover/onmouseout 属性を記述せず、
&lt;a href="http://www.webstandards.org/inc/js/wsp.js"&gt;JavaScript&lt;/a&gt; で&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;
function initRollOvers() {
 var logo;
 if (document.getElementById) {
  logo = document.getElementById('logo');
 } else {
  return false;
 }
 /*if (document.all) {*/
  logo.onmouseover = swapI;
  logo.onmouseout = swapI;
 /*} else {
  logo.addEventListener('mouseover',swapI,false);
  logo.addEventListener('mouseout',swapI,false);
 }*/
  return true;
}

function swapI(e) {
 e = (e) ? e : event;
 thisI = (e.srcElement) ? e.srcElement : e.target;
 if((thisI.status != 'a') &amp;&amp;
    (thisI.status != 'p')) {
  thisI.src = '/img/' + thisI.id + '_a.gif';
  thisI.status='a';
 } else if(thisI.status != 'p') {
  thisI.src='/img/'+thisI.id+'.gif';
  thisI.status='';
 }
}
&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;こんな風にして id 属性に logo という画像を持つ
img 要素の onmouseover と onmouseout をページ表示時に動的に変更することで実現していました。&lt;/p&gt;

&lt;p&gt;似たような手法は &lt;a href="http://www.nikon.co.jp/main/jpn/index.htm"&gt;Nikon のサイト&lt;/a&gt;や &lt;a 

href="http://www.yamaha.co.jp/"&gt;Yamaha のサイト&lt;/a&gt;でも
利用されています(両方&lt;a href="http://www.b-architects.com/"&gt;同じ業者さん&lt;/a&gt;みたい)。&lt;/p&gt;

&lt;p&gt;もう一つ、今度は別のところで、これと似た手法を見ました。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://del.icio.us/"&gt;del.icio.us&lt;/a&gt; では delete リンクをクリックしたときに
&lt;a href="http://blog.hacklife.net/archives/29528364.html"&gt;ちょっとした工夫&lt;/a&gt;をしているのですが、
このちょっとした工夫は下記のように実現されています。&lt;/p&gt;
&lt;!-- DELETE を GET でやっていいのかどうか、という話はあります。--&gt;

&lt;p&gt;delete リンクの HTML ソースはこんなかんじ。&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
&amp;lt;a href="/yohei?delete=9d7b7c953b1e47a7d82e791848f43899"
  class="rm" rel="nofollow"&gt;delete&amp;lt;/a&gt;
&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;onclick 属性がなく Javascript の影も形もありません。&lt;/p&gt;

&lt;p&gt;どうなっているかというと、&lt;a href="http://del.icio.us/ui/static/delicious.js"&gt;ヘッダでロードしている Javascript&lt;/a&gt; で&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;
function rmPostAddEvent() {
  var all = getElementsByClass(document.getElementById('posts'),'rm','a')
  for(var i = 0, o; o = all[i]; i++) o.onclick = function(){ return rmPost(this) }
}
function rmPost(o) {
  o.style.display = 'none'
  var s = document.createElement('span'); s.o = o
  s.innerHTML = '&amp;lt;span class="important"&gt;delete this post?&amp;lt;/span&gt; &amp;lt;a href="'+o.href+'"&gt;yes&amp;lt;/a&gt; / &amp;lt;a 

href="'+o.href.replace(/(\?|&amp;)delete=[^&amp;]*&amp;?/,'$1')+'" 

onclick="this.parentNode.o.style.display=\'inline\';this.parentNode.parentNode.removeChild(this.parentNode);return 

false"&gt;no&amp;lt;/a&gt;'
  o.parentNode.insertBefore(s, o)
  return false
}
&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;とやって、yes/no を追加しています。&lt;/p&gt;

&lt;p&gt;ロールオーバーの例と del.icio.us の例で共通するのは、
静的なコンテンツ部分(HTML)と動的な UI の振る舞い制御部分(JavaScript)を
完全に別ファイルに分けているところです。
もちろんこうするためには class 属性や id 属性の値にコンベンションが必要となるのですが、
このようにアクションとコンテンツを分離することで、以下のようなメリットがありそうです。&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;コンテンツ生成プログラムの効率化&lt;/dt&gt;
&lt;dd&gt;onmouseover などイベント系の属性を記述しないですむので、HTML 生成プログラムが効率化しそうです&lt;/dd&gt;
&lt;dt&gt;メンテナンス性の向上&lt;/dt&gt;
&lt;dd&gt;上の項目につながりますが、問題があるのがデータなのか、スクリプトなのかの区別がつきやすそうです&lt;/dd&gt;
&lt;dt&gt;HTML サイズの縮小&lt;/dt&gt;
&lt;dd&gt;要素毎に属性を記述しないですむので、ネットワーク転送量が減少します&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;さらに、class や id の値のコンベンションという意味で、microformats との相性もよさそうです。&lt;/p&gt;

&lt;p&gt;
さらに面白いと思ったのは、
この動的・静的がサーバから見たときと、クライアントから見たときにちょうど対称的になっているところです。
サーバから見ると、生成するデータ(ブックマーク一覧)こそが動的であり、
そこに yes/no リンクという振る舞いを与える JavaScript プログラムは静的です(del.icio.us の URL にも static とある)。
逆にクライアント(ブラウザ)から見ると、
HTML に入っているブックマーク一覧というデータは静的ですが、
JavaScript によってそれらを動的に変更しています。
&lt;/p&gt;

&lt;p&gt;
こういうのってかなり抽象化できていて、正にデザインパターンと呼べそうな気がするのですが、
何か名前があるんでしょうか(&lt;a href="http://d.hatena.ne.jp/naoya/20050909/1126240088"&gt;NDO メソッド&lt;/a&gt;)。ちょっと探してみたけれど、見つけられませんでした。
勝手に behavior injection(振る舞いの注入) とか action injection (アクションの注入) と想像して検索してみたのだけれど。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-112694903014856939?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/112694903014856939/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=112694903014856939' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112694903014856939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112694903014856939'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/09/javascripthtml.html' title='Javascript+HTML のデザインパターン'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-112461169642670994</id><published>2005-08-21T16:55:00.000+09:00</published><updated>2007-09-22T00:06:23.047+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>microformats などの設計についていろいろ</title><content type='html'>&lt;a href="http://yohei-y.blogspot.com/2005/07/web-uri.html"&gt;僕が提案した方法&lt;/a&gt;について&lt;a href="http://onohiroki.cycling.jp/"&gt;おのひろきさん&lt;/a&gt;から&lt;a href="http://yohei-y.blogspot.com/2005/07/web-uri.html#comments"&gt;ツッコミが入り&lt;/a&gt;、
&lt;a href="http://onohiroki.cycling.jp/2005-08-15-1#d20050815n1"&gt;microformats を誤解している&lt;/a&gt;、&lt;a href="http://onohiroki.cycling.jp/2005-08-17-2#d20050817n2"&gt;マークアップする力の問題である&lt;/a&gt;、と批判されました。&lt;/p&gt;

&lt;p&gt;まー実際、microformats を誤解しててマークアップする力もないかもしれないんだけど、
おのひろきさんの主張には賛成できないので、ここでまとめて反論しときます。&lt;/p&gt;

&lt;p&gt;まず、「&lt;a href="http://onohiroki.cycling.jp/2005-08-15-1#d20050815n1"&gt;microformats についての誤解と，ぼくが理解している範囲&lt;/a&gt;」より。
前半の microformats の説明は特に異論はありません。
でもそれがなんでいきなり&lt;/p&gt;

&lt;blockquote&gt;
それでさらに microformats であるなら，一度「意味付けと記述書式」を決め
たら，&lt;strong&gt;それが他での使い回す事ができないと意味がありません&lt;/strong&gt;．限定された問
題を解ければ良いとはいっても，&lt;strong&gt;特定の問題にしか対応できないほど限定して
たら駄目なのです&lt;/strong&gt;．
&lt;/blockquote&gt;

&lt;p&gt;ってなっちゃんでしょう?(強調筆者) ここがまずわからない点。&lt;/p&gt;

&lt;blockquote&gt;
rel 属性値は profile で定義してそこで意味付けをします．上の例では a 要素で rel 属性値 hatenab とある場合は href が指す URI ははてなブックマークであるってことになるのかな?
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://yohei-y.blogspot.com/2005/07/web-uri.html"&gt;元記事&lt;/a&gt;では、主題が別だったので詳細なプロファイルまで書いてませんが、
リンク形式 rel="hatenab" は、リンク先が元ページの著者のはてなブックマークへのリンク、という意味です。
目的は「自分が使っているサービスを宣言」するため。&lt;/p&gt;

&lt;blockquote&gt;
profile を定義するということを意識していないから rel 属性値をどうするかというところで間違えるのではないでしょうか．profile を定義することと，その profile が他で応用できるようにするということを考えないとダメだと思うのです．
&lt;/blockquote&gt;

&lt;p&gt;最後のここもいまだにわからないんですよね。
rel を拡張するなら profile (microformats なら &lt;a href="http://gmpg.org/xmdp/"&gt;XMDP&lt;/a&gt;) が必用、というのはわかってるつもりです。
でもそれと、「他で応用できる」ってどう関係があるんでしょうか?
たとえば XFN は友人関係を記述する以外にどう「他で応用できる」んでしょうか?&lt;/p&gt;

&lt;p&gt;続けて「&lt;a href="http://onohiroki.cycling.jp/2005-08-17-2#d20050817n2"&gt;マークアップする力&lt;/a&gt;」より。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://d.hatena.ne.jp/m-hiyama/20050725/1122277983"&gt;檜山さんの記事&lt;/a&gt;を引用して&lt;/p&gt;

&lt;blockquote&gt;
「邪悪マークアップは先進的マークアップか？」から引用すると:
&lt;blockquote&gt;
これがまずい理由は、&amp;lt;田中&gt;元気で行ってこい。&amp;lt;/田中&gt;や&amp;lt;ミヨ子&gt;おみやげ、忘れないでねぇ&amp;lt;/ミヨ子&gt;のあいだに共通性があるのに、その共通性がマークアップにより表現されてないことです。
&lt;/blockquote&gt;
これと同じ事が rel="hatenab" と rel="delicious" にも言えると思うのです．
&lt;/blockquote&gt;

&lt;p&gt;と書いていますが、同じとは言えないと思いますよ。&lt;/p&gt;

&lt;p&gt;おのひろきさんは Semantic Web に詳しいようなので釈迦に説法かもしれませんが、
rel 属性と class 属性の仕様上の違いをまず再確認してください。
rel は「&lt;a href="http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/types.html#h-6.12"&gt;リンク形式(のリスト)&lt;/a&gt;」、 class は「&lt;a href="http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/struct/global.html#h-7.5.2"&gt;クラス名(のリスト)&lt;/a&gt;」です。
リンク形式(link type)がリンクの関係性を表現するのに対し、
クラス名は (X)HTML 要素の分類に用いるものです。&lt;/p&gt;

&lt;p&gt;いわゆる microformats ではこの二つをちゃんと使い分けていて、
rel 属性は (X)HTML の仕様どおり、リンクの関係性を表現しています。
&lt;a href="http://microformats.org/wiki/rel-license"&gt;そのリンク先がライセンス文書であると指定したり&lt;/a&gt;、
&lt;a href="http://microformats.org/wiki/rel-nofollow"&gt;リンク先のコンテンツがリンク元とは関係ない(follow してない)と指定する&lt;/a&gt;、などです。&lt;/p&gt;

&lt;p&gt;一方で class 属性は &lt;a href="http://microformats.org/wiki/hcard"&gt;XHTML に vCard の構造を埋め込んだり&lt;/a&gt;、
&lt;a href="http://microformats.org/wiki/hcalendar"&gt;iCalendar の構造を埋め込んだり&lt;/a&gt;するのに使います。
クラス名が構造情報と対応しているわけです。&lt;/p&gt;

&lt;p&gt;ここまでで明かだと思いますが、
&lt;a href="http://d.hatena.ne.jp/m-hiyama/20050722/1122023064"&gt;檜山さんの記事&lt;/a&gt;に出てくる「多重マークアップ」は class 属性の応用の話です。
対して、ここで議論しているのは rel 属性の値(リンク形式)をどうするか、という話です。&lt;a href="http://d.hatena.ne.jp/m-hiyama/20050725/1122277983"&gt;檜山さんの例&lt;/a&gt;を引けば、&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;
&amp;lt;寄せ書き&gt;
 &amp;lt;ひとこと 誰="田中"&gt;元気で行ってこい。&amp;lt;/ひとこと&gt;
 &amp;lt;ひとこと 誰="ミヨ子"&gt;おみやげ、忘れないでねぇ&amp;lt;/ひとこと&gt;
 ...
&amp;lt;/寄せ書き&gt;
&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;ここで言う 「誰」属性の値は「田中」がいいのか「id:tanaka」がいいのか
「上司」がいいのか「社員」がいいのか「男」がいいのか「日本人」がいいの
か「人間」がいいのか「哺乳類」がいいのか「動物」がいいのか「生物」がいいのか…
って話と同じですよ。&lt;/p&gt;

&lt;p&gt;だから、&lt;/p&gt;

&lt;blockquote&gt;
つまり rel="hatenab" と rel="delicious" の間に共通性があるのに，その共通性が表現されていないのです．それは，書き手の頭の中だけにあります．
&lt;/blockquote&gt;

&lt;p&gt;これは勘違いではないですか。
上記のとおり、リンク形式に指定する値の粒度をどれくらいにするかというのを議論してるんです。
その値の定義は、おのひろきさん自身が言っているとおり「profile によって定義するっていう手」を使います。&lt;/p&gt;

&lt;blockquote&gt;
profile によって定義するっていう手もありますが，そうすると似たようなサービス全てについて profile で定義を用意しなければなりません．そうではなくて rel 属性では共通性の部分を表現するべきでしょう．
&lt;/blockquote&gt;

&lt;p&gt;別に「似たようなサービス全て」を定義しなくてもいいんじゃないでしょうか。
プロファイル策定者がはてなだったら hatenab, hatenaa, hatenai, hatenad,... と自社のサービスを定義すればとりあえず十分でしょう。
これで、あとは API さえあれば、今閲覧している Web ページの作者のはてなブックマークを自分のお気に入りに入れるブックマークレットとか、
その人が使っているはてなのサービス一覧を小綺麗に表示する greasemonkey スクリプトとかが作れそうです。&lt;/p&gt;

&lt;p&gt;ただ、一利用者の感覚とすれば、hatenab じゃなくて del.icio.us も使いたいんですよね。
でも del.icio.us には inbox はあっても「お気に入り」はない。
こんなかんじで hatenab と delicious を区別したいニーズはあります。&lt;/p&gt;

&lt;p&gt;これについておのひろきさんは&lt;/p&gt;

&lt;blockquote&gt;
rel="hatenab" とある場合とない場合で，メタデータの抽出の仕方がどう変わるかを考えたら，あまりrel="hatenab"ってのは有効ではないのでは?
hatenabにマッチングするか b.hatena.ne.jp にマッチングするかの違いだか
ら．
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://yohei-y.blogspot.com/2005/07/web-uri.html#c112426901351739187"&gt;という見解&lt;/a&gt;のようですが、
僕はまったく逆ですね。
URI でマッチングしなきゃいけないような設計は悪い設計の代表例だと思います。
何で悪いかの理由のひとつは &lt;a href="http://d.hatena.ne.jp/shckor/20050817/1124296793"&gt;shckor さんがいうとおり&lt;/a&gt; URI がやむを得ず変わる場合ですね。
REST とか、疎結合の文脈で言えば、クライアントとサーバのお約束が増えてしまうという意味で悪い設計です。
せっかく rel 属性があるのに、関係ないところで URI のコンベンションを作るのは余計な制限を増やすだけだと思います。
&lt;/p&gt;

&lt;p&gt;ちなみに、はてなや del.icio.us のドメイン名は安定してそうなのでまだいいですが、
たとえば、サーバインストール型の Web アプリケーションだったり、
社内向けサーバで、どうしてもドメイン名を変更しなければならなかったりしたらどうするんでしょうか。
たとえば pukiwiki にソーシャルブックマークプラグインができたとしたらどうしますか。&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;
&amp;lt;link rel="onlineBookmark delicious" href="http://del.icio.us/onohiroki"/&gt;
&lt;/pre&gt;
ってのも良くないと思います．"delicious" ってのを profile で定義しなくちゃならないから．それなら "delicious" を与えるのは title 属性が良いと思うし，profile を定義しなくても良い class 属性のほうが rel 属性よりはまだ良いと思います．
&lt;/blockquote&gt;

&lt;p&gt;上記のような理由から rel 属性の代わりに class 属性を安易に使うのは反対です。
rel には rel の意味があるのだから。&lt;/p&gt;

&lt;p&gt;ここまで書いて、「&lt;a href="http://onohiroki.cycling.jp/2005-08-20-1#d20050820n1"&gt;class 属性を再発見&lt;/a&gt;」というエントリが追加されているのを発見したんで、
ついでにこちらにも若干コメントを。&lt;/p&gt;

&lt;blockquote&gt;
最初に定義していなかったものを後から追加したくなったら，別 profile を作るのでしょうか? この問題をどう考えているのかはぜひ教えてほしいです．
&lt;/blockquote&gt;

&lt;p&gt;同じプロファイルに新しいサービス名を追加してバージョンアップします。
もちろんこれは XML のスキーマのバージョンアップ問題と同じ話で、
いろいろと難しい問題を含んでいるのですが、
どこに追加される可能性があるのかはっきりさせる、
新しいものを追加しても問題が起きないようにクライアントを作る(知らないサービスは無視するか、知らないサービスとして扱う)、
追加するだけならバージョンを上げなくてもいい(プロファイルの URI を変更しない)、
といったような設計が 2005 年の現時点では理想的かつ現実的な設計でしょうね。&lt;/p&gt;

&lt;blockquote&gt;
shckor さんや yohei さんが言っている事がちゃんと理解できたら title 属性とかぢゃなくて class 属性ってすぐに出てこないとおかしいですよね．いや，未だに shckor さんや yohei さんの主張でよく分からないところがあるけど．
&lt;/blockquote&gt;

&lt;p&gt;僕は以前にも &lt;a href="http://yohei-y.blogspot.com/2005/07/hatena-id-auto-discovery.html"&gt;title 属性は助言情報なのだからコンテンツ作成者の自由にさせるべき&lt;/a&gt;という意見を書いたとおり、
title 属性の安易な濫用はお勧めしません。
上記のとおり rel から class への安易な鞍替えも同様です。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-112461169642670994?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/112461169642670994/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=112461169642670994' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112461169642670994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112461169642670994'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/08/microformats.html' title='microformats などの設計についていろいろ'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-112385123796541101</id><published>2005-08-12T21:52:00.000+09:00</published><updated>2007-09-22T00:06:39.413+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='uri'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>良い URI の設計</title><content type='html'>URI は綺麗であるべき、と常々思っているんですが、よいページを発見しました。
&lt;a href="http://www.eakes.org/blog/"&gt;Michael Eakes&lt;/a&gt; の&lt;a href="http://www.eakes.org/blog/archives/2005/01/flickr_uris.html"&gt;このエントリ&lt;/a&gt;です。
&lt;a href="http://pixelcharmer.com/fieldnotes/"&gt;Tanya Rabourn&lt;/a&gt; が&lt;a href="http://www.pixelcharmer.com/fieldnotes/archives/process_designing/2003/000285.html"&gt;リストアップしている文献一覧&lt;/a&gt;からエッセンスをまとめてくれています。
曰く、よく設計された URI とは&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;変らない(don't change)&lt;/li&gt;
&lt;li&gt;人間が推測可能(are human guessable)&lt;/li&gt;
&lt;li&gt;論理的(ファイルシステムを反映する必用がない) (are logical (no need to mirror a filesystem))&lt;/li&gt;
&lt;li&gt;サイト構造をビジュアライズするのに役立つ(help visualize the site structure)&lt;/li&gt;
&lt;li&gt;短い(are short)&lt;/li&gt;
&lt;li&gt;小文字を使う(use lowercase)&lt;/li&gt;
&lt;li&gt;予期されない記号を使わない(don't use unexpected punctuation)&lt;/li&gt;
&lt;li&gt;問合せパラメータなし(lack query parameters)&lt;/li&gt;
&lt;li&gt;公開リンクを許す(allow public linking)&lt;/li&gt;
&lt;li&gt;ステートレス(are stateless)&lt;/li&gt;
&lt;li&gt;技術を丸出しにしない(dont expose technology)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;だそうです。
彼のエントリにはそのほかにも Flickr の URI が良い設計例として載っています。&lt;/p&gt;

&lt;p&gt;典型的な悪い例はこんな感じかな。&lt;/p&gt;
&lt;pre&gt;
http://test1.example.com/Test/getDocList.cgi?folder-name=abc&amp;amp;user_name=yohei&amp;amp;sessionId=123
&lt;/pre&gt;
&lt;p&gt;直すとこうなる。&lt;/p&gt;
&lt;pre&gt;
http://www.example.com/yohei/abc
&lt;/pre&gt;


&lt;p&gt;最後の項目の悪い例は &lt;a href="http://mixi.jp/home.pl"&gt;/home.pl&lt;/a&gt; とか &lt;a href="https://www.google.com/adsense/login.do"&gt;/login.do&lt;/a&gt; とか &lt;a href="http://www.ana.co.jp/asw/index.jsp"&gt;/index.jsp&lt;/a&gt; とか
&lt;a href="http://courtdomino2.courts.go.jp/hitobito.nsf"&gt;/hitobito.nsf&lt;/a&gt; とかですかね。
とりあえずは &lt;a href="http://www.net-newbie.com/trans/mod_rewrite.html"&gt;mod_rewrite&lt;/a&gt; を使って解決するんでしょうけど、本質的にはフレームワークが解決した方がよさげ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-112385123796541101?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/112385123796541101/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=112385123796541101' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112385123796541101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112385123796541101'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/08/uri.html' title='良い URI の設計'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-112282117939055192</id><published>2005-07-31T23:41:00.000+09:00</published><updated>2007-09-22T00:07:15.220+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><category scheme='http://www.blogger.com/atom/ns#' term='uri'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Web らしく URI で連携する方向</title><content type='html'>前のエントリで触れた ID だけのディスカバリの問題点ですが、
他にもこんなのもあります。&lt;/p&gt;
&lt;p&gt;
僕が自分のブログにはてな ID を埋め込んだとして期待するのは、
ブログを訪れた人が自分のブックマークやアンテナを見に来てくれたり、投げ銭してくれたりすることです。
でも僕がはてなで何を使っているかは僕にしかわかりません。
僕の場合&lt;a href="http://b.hatena.ne.jp/yohei/"&gt;はてブ&lt;/a&gt;と&lt;a href="http://a.hatena.ne.jp/yohei/"&gt;はてア&lt;/a&gt;は使ってるけど、
&lt;a href="http://d.hatena.ne.jp/yohei/"&gt;はてダ&lt;/a&gt;は更新を止めちゃった、はてフは知らん、という状況です。
もしかしたらアサマシは嫌いだから投げ銭してほしくない、という人もいるかもしれない。
&lt;/p&gt;
&lt;p&gt;
これって「はてなID」の埋め込みだけでは実現できません。
自分ははてなのこのサービスを使っているよ、という主張をできないからです。
&lt;/p&gt;
&lt;p&gt;
ではどうするか。
自分ははてなのこのサービスを使っているから見に行ってね、という宣言をしたらどうでしょう。
head 内で宣言するんだったらこんな感じ。
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;link rel="hatenab" href="http://b.hatena.ne.jp/yohei" /&gt;
&amp;lt;link rel="hatenaa" href="http://a.hatena.ne.jp/yohei" /&gt;
&lt;/pre&gt;
&lt;p&gt;body 内部で a タグに書くのであればこんな感じ。&lt;/p&gt;
&lt;pre&gt;
&amp;lt;a rel="hatenab" href="http://b.hatena.ne.jp/yohei" &gt;はてぶ&amp;lt;/a&gt;
&amp;lt;a rel="hatenaa" href="http://a.hatena.ne.jp/yohei" &gt;はてあ&amp;lt;/a&gt;
&lt;/pre&gt;
&lt;p&gt;
ここまでくると、別にはてなに限らないでもいいのではないかという気がしてきます。
たとえば僕の場合、使っていると宣言したいサービスは
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;hatenab&lt;/li&gt;
&lt;li&gt;hatenaa&lt;/li&gt;
&lt;li&gt;flickr&lt;/li&gt;
&lt;li&gt;bloglines&lt;/li&gt;
&lt;li&gt;delicious&lt;/li&gt;
&lt;li&gt;mixi&lt;/li&gt;
&lt;li&gt;blogger&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;なので、head はこうなります。&lt;/p&gt;
&lt;pre&gt;
&amp;lt;head&gt;
  &amp;lt;link rel="hatenab" href="http://b.hatena.ne.jp/yohei" /&gt;
  &amp;lt;link rel="hatenaa" href="http://a.hatena.ne.jp/yohei" /&gt;
  &amp;lt;link rel="bloglines" href="http://www.bloglines.com/public/yamamotoyohei" /&gt;
  &amp;lt;link rel="flickr" href="http://www.flickr.com/photos/60043209@N00/" /&gt;
  &amp;lt;link rel="delicious" href="http://del.icio.us/yohei" /&gt;
  &amp;lt;link rel="mixi" href="http://mixi.jp/show_friend.pl?id=173690" /&gt;
  &amp;lt;link rel="blogger" href="http://yohei-y.blogspot.com" /&gt;
&amp;lt;/head&gt;
&lt;/pre&gt;
&lt;p&gt;a タグだったらこうなります。&lt;/p&gt;
&lt;pre&gt;
&amp;lt;a rel="hatenab" href="http://b.hatena.ne.jp/yohei"&gt;僕のブックマーク&amp;lt;/a&gt;です。
&amp;lt;a rel="mixi" href="http://mixi.jp/view_profile.pl?"&gt;mixi&amp;lt;/a&gt;も使ってるよ。
&amp;lt;a rel="payment hatenagesen" href="http://nagesen.hatena.ne.jp/yohei"&gt;投げ銭&amp;lt;/a&gt;よろしく。
&lt;/pre&gt;

&lt;p&gt;この rel= はいわゆる microformats ですね。
link タグなら Atom feed にも同じように入れられます。&lt;/p&gt;

&lt;p&gt;
rel 属性の値が各サービスごとに違うのがいいのか、
もっと別の値がいいのか、そもそもこんなことがやりたいのか、やっていいのか、という話はありますが (^^;
URI で繋がるという方向性もある、ということを認知してもらえたらと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-112282117939055192?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/112282117939055192/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=112282117939055192' title='9 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112282117939055192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112282117939055192'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/07/web-uri.html' title='Web らしく URI で連携する方向'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-112281900296683975</id><published>2005-07-31T22:59:00.000+09:00</published><updated>2007-09-22T00:07:44.871+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>そもそも ID を見つけるだけで十分なのだろうか</title><content type='html'>&lt;a href="http://d.hatena.ne.jp/naoya/20050727/1122428017"&gt;なんか複雑な方向になってきたなー&lt;/a&gt;と思っていたところで風邪を引いてしまって寝込んでいたので、なんだか&lt;a href="http://www.akatsukinishisu.net/wiki.cgi?Hatena_ID_Auto-Discovery%A4%CB%B4%D8%A4%B9%A4%EB%B5%C4%CF%C0"&gt;浦島太郎状態&lt;/a&gt;ですが、思うところを。&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://d.hatena.ne.jp/naoya/20050729/1122626537"&gt;今の暫定仕様&lt;/a&gt;は僕にとってはちょっと違う方向のように感じるんですね。アカウントの ID だけを渡すというのは、関数のパラメータの一引数を渡すというのに繋がる気がするからです。
&lt;/p&gt;
&lt;p&gt;そもそも &lt;a href="http://d.hatena.ne.jp/naoya/20050725/1122277102"&gt;naoya さんがやりたかったこと&lt;/a&gt;は&lt;/p&gt;

&lt;blockquote&gt;
まずそもそも僕が考えた仕様は...という前にまず何をしたいかを明確にしないとですね。僕がしたいのは、はてなダイアリーを含めたインターネット上のウェブページ (Permalink) から、そのページを作った人の「はてなのID」を探し出したい、ということです。
&lt;/blockquote&gt;
&lt;p&gt;
ですが、では ID を探し出して具体的に何をするんでしょうか。
もちろん、はてなのサービスの中の人はいいと思います。
HTML や RSS/Atom を取ってきて、その中にはてなIDがあれば、その ID からユーザを特定していろいろできる。
でも Web 2.0 的に考えるなら、はてな外の Remix する人の事も考えてほしい。
&lt;/p&gt;
&lt;p&gt;
そんな Web 2.0 的な Hatena ID Auto Dicovery の応用に、
&lt;a href="http://d.hatena.ne.jp/fumiakiy/20050725#1122251320"&gt;吉松さんが触れていました&lt;/a&gt;。
&lt;/p&gt;
&lt;blockquote&gt;
僕は「投げ銭」に特化しないほうがいいなあ、と思ってます。例えばツールバーに「この人のはてダに移動」とか「このひとのはてブお気にを一覧」とかいうボタン作るのに役立ちそうだな、と思うもので。
&lt;/blockquote&gt;
&lt;p&gt;
なるほど。確かに便利そう。
とある Web の記事や RSS/Atom フィードを表示すると、
はてなツールバーや Greasemonkey スクリプトでその人のはてなブックマークへのリンクがポップアップしたら楽しい。
実際のコード(の断片)は例えばこんな感じかな。
&lt;/p&gt;
&lt;pre&gt;
var hatenaid = getIdFromRdfFoaf("http://www.hatena.ne.jp/");
document.write("&amp;lt;a href='http://b.hatena.ne.jp/" + hatenaid + "'&gt;?B&amp;lt;/a&gt;");
&lt;/pre&gt;

&lt;p&gt;うーん、嫌だ。&lt;/p&gt;

&lt;p&gt;
嫌な点の一つ目は "http://b.hatena.ne.jp/" という文字列をクライアント側で持っていて、ユーザ名と組み合わせている点。
これをやってしまうと、b.hatena.ne.jp を変えたり、URL の構造を変えたとたんに
途方もない数の全クライアントを一斉に変更しなければならなくなってしまう。
いわゆる密結合の一番悪いパターンですね。
&lt;/p&gt;
&lt;p&gt;もちろんはてなのドメイン名や URI の構造がそんなに簡単に変化するとは思いませんが、
一般的にはやらない方がいいことです。
&lt;/p&gt;
&lt;p&gt;
それからもうひとつ嫌なのは JavaScript で getIdFromRdfFoaf() を作るのが大変そうなところ。
コメントアウトされた RDF/FOAF の文字列を「わざわざ」探し出して、さらにそれをパースして、RDF のトリプルにして…、
とやるのは想像するだけで鳥肌が立つ(のは僕だけかな)。
&lt;/p&gt;
&lt;p&gt;
HTML に ID を埋め込む、というのは一見するとすごく汎用的で何にでも使えそうなんだけど、
汎用的であるが故に何をやるにも中途半端になってしまう危険性があります。
もう少し実用的な使い方をいくつか模索したり組み合わせたりして、
その中で汎用的に使える部分を探すという方がいいのではないかと思います。
&lt;/p&gt;
&lt;p&gt;では具体的には何なのだ、という話は次のエントリで。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-112281900296683975?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/112281900296683975/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=112281900296683975' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112281900296683975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112281900296683975'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/07/id.html' title='そもそも ID を見つけるだけで十分なのだろうか'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-112211085626289576</id><published>2005-07-23T18:22:00.000+09:00</published><updated>2007-09-22T00:08:07.535+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Hatena ID Auto-Discovery について</title><content type='html'>&lt;p&gt;昨日は &lt;a href="http://www.sigmodj.org/Events/taikai31.html"&gt;SIGMOD-J 
の大会&lt;/a&gt;に行った後にアルファギークなお二人と食事をしてきました。&lt;/p&gt;

&lt;p&gt;大会ではやはり naoya さんの Web 2.0 についての話が一番面白かったです。
周りにいた人の反応も一緒でした。&lt;/p&gt;

&lt;p&gt;ちなみに僕は &lt;a href="http://d.hatena.ne.jp/naoya/"&gt;naoya さん&lt;/a&gt;は初対面。
食事に途中参加の&lt;a href="http://namazu.org/~satoru/"&gt;高林君&lt;/a&gt;とは&lt;a href="http://nais.to/~yto/clog/2001-07-22-1.html"&gt;ちょうど4年ぶりだった&lt;/a&gt;ことが今判明。オリンピックみたいだ:-)。&lt;/p&gt;

&lt;p&gt;naoya さんは普段から blog やブックマークを見ているので、ぜんぜん初対面な気がしなかったんですが、
僕としては REST だの Folksonomy だの microformats 
だのといった単語をガンガン喋ったり聞いたりするのが新鮮かつエキサイティングでした。
やっぱり直接会って話すのは大切だと実感です。&lt;/p&gt;

&lt;p&gt;以下本題です。僕は話題に出遅れてしまったんですが
&lt;a href="http://d.hatena.ne.jp/naoya/20050722/1121993475"&gt;Hatena ID Auto-Discovery&lt;/a&gt;
について。
naoya さんには直接喋ったんだけど、
酔っ払っててよくわからなかったと思うので、
もう一回ここに書いておきます。&lt;/p&gt;

&lt;p&gt;まず、現状の仕様はこうですね。&lt;/p&gt;

&lt;pre&gt;
&amp;lt;link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" /&gt;
&amp;lt;link rel="DC.creator" title="id:naoya"
  href="http://www.hatena.ne.jp/user?userid=naoya" /&gt;
&lt;/pre&gt;

&lt;p&gt;で、僕が提案するのはこれ。&lt;/p&gt;

&lt;pre&gt;
&amp;lt;link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" /&gt;
&amp;lt;link rel="DC.creator" href="http://www.hatena.ne.jp/user/naoya" /&gt;
&lt;/pre&gt;

&lt;p&gt;二点提案があります。&lt;/p&gt;

&lt;p&gt;最初は title 属性について。
例では title="id:naoya" となっていますが、
別にこれはなくてもいいのではないでしょうか。
DC の creator は href 属性で指定される URI で識別されるのであって、title 属性はあくまでも便宜上の助言的情報。
ならば、title 属性の内容はコンテンツ作成者に委ねた方が自由度が上がる、と考えられます。
もちろん id 記法が好きな人は title="id:yohei" としていいし、
そうじゃなくて title="YAMAMOTO Yohei" としてもいいし、
title="このページの作者のはてなIDです" とかしてもいいわけです。&lt;/p&gt;

&lt;p&gt;次に href でリンクする先の URI についてです。
ひとつは ?userid=naoya というように、query string を使うのはどうだろう、という話。
もうひとつはこの URI が適切なのか、という話です。&lt;/p&gt;

&lt;p&gt;こういう ID としての URI に query string が入っているとちょっとクールじゃないですね。
文字列長も長くなっちゃうし、何より query string はクライアント側でいじれる所がいかにも密結合的です。
ま、このケースはそんなに気にすることはないんですが、
僕のこれまでの感覚だと、はてなは URI がいつも綺麗だという印象があります。
はてならしさを維持するためにも、ここは query string を使わないほうがいいのではないでしょうか。&lt;/p&gt;

&lt;p&gt;あとはリンク先の妥当性です。
はてなダイアリーの id 記法でリンクする先はそのユーザのダイアリーですよね。
その観点から id 記法との整合を考えると、ダイアリーを持っているユーザの場合は、
ダイアリーにリンクするのが最も適切ではないでしょうか。
ダイアリーを使っていないユーザはどうするのかという問題が残りますが、
それも id 記法でのリンク先にあわせるのがいいのではないでしょうか。
&lt;/p&gt;

&lt;p&gt;ということで、最終的には以下のような形になりました。&lt;/p&gt;

&lt;pre&gt;
&amp;lt;link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" /&gt;
&amp;lt;link rel="DC.creator" href="http://d.hatena.ne.jp/naoya" /&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-112211085626289576?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/112211085626289576/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=112211085626289576' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112211085626289576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112211085626289576'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/07/hatena-id-auto-discovery.html' title='Hatena ID Auto-Discovery について'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-112160925475128059</id><published>2005-07-17T23:04:00.000+09:00</published><updated>2007-09-22T00:08:31.968+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atom'/><category scheme='http://www.blogger.com/atom/ns#' term='feeds'/><title type='text'>Atom 1.0</title><content type='html'>Atom Syndication Format 1.0 が &lt;a href="http://www.tbray.org/ongoing/When/200x/2005/07/14/Atom-1.0"&gt;Tim Bray からアナウンス&lt;/a&gt;されましたね。&lt;/p&gt;

&lt;p&gt;いろいろなところで言及されていますが、
&lt;a href="http://xml.coverpages.org/"&gt;XML cover pages&lt;/a&gt; がいつもながら&lt;a href="http://xml.coverpages.org/ni2005-07-15-a.html"&gt;一番まとまっています&lt;/a&gt;。
ちなみに RSS/Atom のこれまでの流れは &lt;a href="http://dsonline.computer.org/portal/site/dsonline/menuitem.9ed3d9924aeb0dcd82ccc6716bbe36ec/index.jsp?&amp;pName=dso_level1&amp;path=dsonline/0507&amp;file=w4sta.xml&amp;xsl=article.xsl&amp;"&gt;Robert Sayre の記事&lt;/a&gt;によくまとまっています。
&lt;/p&gt;


&lt;p&gt;これで syndication format の本命は RSS 2.0 と Atom 1.0 に絞られたわけですが、
これからどうなるか注目です。
両者の比較は &lt;a href="http://www.tbray.org/atom/RSS-and-Atom"&gt;Tim Bray のもの&lt;/a&gt;(&lt;a href="http://www.witha.jp/Atom/RSS-and-Atom.html"&gt;日本語版&lt;/a&gt;)がありますが、
はっきりいって機能的にはそんなに違いませんね。
Atom 1.0 の方が後出しジャンケンなので全体的にすっきりしていますが、
普及状態から言うと圧倒的に RSS 2.0 が勝っています。&lt;/p&gt;

&lt;p&gt;Atom の方はもちろん syndication format 単体で使えるのですが、
&lt;a href="http://bitworking.org/projects/atom/"&gt;APP&lt;/a&gt;(って書くと「アプリ」を想像されそうなので AtomPP) がそろって初めて本領を発揮でしょうから、
AtomPP の標準化までにどれだけ syndication format が普及しているかも重要です。&lt;/p&gt;

&lt;p&gt;
ちなみに Atom 1.0 フィードの実例を見たい人は&lt;a href="http://www.intertwingly.net/wiki/pie/KnownAtomFeeds"&gt;ここ&lt;/a&gt;からどうぞ。
blogger は Atom 1.0 に対応してくれるのかなあ…&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-112160925475128059?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/112160925475128059/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=112160925475128059' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112160925475128059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112160925475128059'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/07/atom-10.html' title='Atom 1.0'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-112143940224664788</id><published>2005-07-15T23:53:00.000+09:00</published><updated>2005-07-15T23:56:42.253+09:00</updated><title type='text'>今後10年</title><content type='html'>この weblog のアクセス数がいつもの10倍になっていて、
なんだなんだと思ったら &lt;a href="http://d.hatena.ne.jp/naoya/20050714/1121358491"&gt;naoya さんとこ&lt;/a&gt;で言及されてました。&lt;/p&gt;

&lt;blockquote&gt;
Remix や Folksonomy という考え方はすばらしいのだけど、
それらを実現する手段としてよりシームレスなものっていうのは一体何なんだろう。
使い手がそれらを意識することなしに、その恩恵を得られるもの。
自分の両親が blog を使いはじめて整えられたアーキテクチャでウェブサイトを構築し、
RSS や Atom でシンジケーションするということはもしかしたらありえるかもしれないけど、
Greasemonkey で Remix して tagging で情報をうまく整理するなんてことはどう考えてもあり得ない。
&lt;/blockquote&gt;

&lt;p&gt;Remix とか Folksonomy ってそんなに難しい話なんですかね。
tagging だの microformats だの api だのといった言葉や概念は 10年後にないかもしれないけれど、
たとえば自分が撮影した写真を rel="license" で CC ライセンスにして広く共有するとか、
逆に CC ライセンスの写真や演奏を検索してそれを基にした二次配布物を公開とか、
あるいは Web 2.0 ベースのツールで wikipedia を編纂するとか、
10年後(5年後?)に教育テレビで「ホームページ入門」の一環としてやってるんじゃないかなあ。&lt;/p&gt;

&lt;blockquote&gt;
と、考えると、これらの世界が実現していくためには今とは違った手段が必要になってくるだろうし、
そういった手段が出てこなかった概念はいずれ廃れる、
あるいはいわゆるデジタル・デバイド(なんか死語っぽいけど)の象徴になるのかもしれない、なんて風にも思う。
手段自体がメジャーシーンに拡大しなくても、 API によって開発された成果物を使う人、
Folksonomy で分類された後の結果だけを見てその恩恵を授かるフォロワーがいたりする、
ということもあるので、かならずしも手段のコモディティ化が必須というわけではないのだろうけど。
&lt;/blockquote&gt;

&lt;p&gt;コンテンツ作成者とフォロワーの間に高速道路が敷かれるんでしょう。
つまり、例えばはてなはフォロワーがすぐにコンテンツ作成者になれる道を現在建設中と捉えることができます。
これまでは geek の専売特許だったコンテンツ作成とか remix といった行為を
普通の人たち(そういう人たちのコンテンツも魅力的)にまで拡大する、
それが世界政府御用達システム製造・運用会社や、例の変な会社のミッションなのでは。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-112143940224664788?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/112143940224664788/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=112143940224664788' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112143940224664788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112143940224664788'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/07/10.html' title='今後10年'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-112023880084757732</id><published>2005-07-02T02:25:00.000+09:00</published><updated>2005-07-02T02:28:52.300+09:00</updated><title type='text'>Google Maps で世界のサーキット</title><content type='html'>自分で見つけられた分&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=monaco&amp;ll=43.736744,7.424344&amp;spn=0.007716,0.011354&amp;t=k&amp;hl=ja"&gt;モンテカルロ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=silverstone+Northamptonshire+NN12+8TN&amp;ll=52.071333,-1.015720&amp;spn=0.030863,0.045417&amp;t=k&amp;hl=ja"&gt;シルバーストーン&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=imola+italy&amp;ll=44.341764,11.711898&amp;spn=0.030863,0.045417&amp;t=k&amp;hl=ja"&gt;イモラ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=Montreal,Quebec+H2Y+3G7+-+CANADA&amp;ll=45.504427,-73.525872&amp;spn=0.030863,0.045417&amp;t=k&amp;hl=ja"&gt;モントリオール&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=Monza,+ITALY&amp;ll=45.621929,9.283447&amp;spn=0.123450,0.181669&amp;t=k&amp;hl=ja"&gt;モンツァ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=4790+West+16th+street,+Indianapolis,+Indiana+46222,+U.S.A.&amp;ll=39.795270,-86.234994&amp;spn=0.030863,0.045417&amp;t=k&amp;hl=ja"&gt;インディアナポリス&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=Mogyorod+HUNGARY&amp;ll=47.581573,19.250321&amp;spn=0.015431,0.022709&amp;t=k&amp;hl=ja"&gt;ハンガロリンク&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=Av.Senador+Sao+Paulo,+BRAZIL&amp;ll=-23.701200,-46.697001&amp;spn=0.015431,0.022709&amp;t=k&amp;hl=ja"&gt;インテルラゴス&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://maps.google.com/maps?ll=34.843998,136.532078&amp;spn=0.030863,0.045417&amp;t=k&amp;hl=ja"&gt;鈴鹿&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://maps.google.com/maps?q=barcelona+spain&amp;ll=41.569176,2.258892&amp;spn=0.030863,0.045417&amp;t=k&amp;hl=ja"&gt;カタロニア&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://maps.google.com/maps?ll=46.863331,3.164470&amp;spn=0.015431,0.022709&amp;t=k&amp;hl=ja"&gt;マニクール&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="http://www.pandora.nu/tempo-depot/notes/The_other_side/F1_MotoGP/d050625x2.htm"&gt;こちらが詳しい&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-112023880084757732?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/112023880084757732/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=112023880084757732' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112023880084757732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112023880084757732'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/07/google-maps.html' title='Google Maps で世界のサーキット'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-112014302292536418</id><published>2005-06-30T23:49:00.000+09:00</published><updated>2007-09-22T00:09:26.586+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atompub'/><title type='text'>はてなブックマークのタグ編集に Atom PP を用いる件について</title><content type='html'>&lt;a href="http://d.hatena.ne.jp/naoya/20050630/1120131821"&gt;楽しそう&lt;/a&gt;なので、考えてみることにする&lt;/p&gt;
&lt;p&gt;なにはともあれはリソースのことを考えよう。
タグをリソースとするならまずはそれに URI を割り当てなければならない。
僕(yohei) の "atompp" というタグの URI は以下のような形式とする。&lt;/p&gt;
&lt;pre&gt;
http://b.hatena.ne.jp/atom/yohei/tag/atompp
&lt;/pre&gt;
&lt;p&gt;次に考えるのはタグリソースの 表現に何を使うか。
構造を持った情報なので XML になるのはすんなり確定。
問題はその形式。候補は以下のとおり。&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;最新 AtomPP のメンバー要素(member)&lt;/dt&gt;
&lt;dd&gt;長所: 軽い、簡単&lt;/dd&gt;
&lt;dd&gt;短所: member/@href で参照する先の URL はどの XML 形式にする? あるいはタグ名のテキスト(plain/text)か?&lt;/dd&gt;
&lt;dt&gt;Atom の entry 要素(entry)&lt;/dt&gt;
&lt;dd&gt;長所: 標準。使える子要素がいろいろ定義されている&lt;/dd&gt;
&lt;dd&gt;短所: (他に比べて)重い。ブックマークの dc:subject との違いがわかりにくい&lt;/dd&gt;
&lt;dt&gt;独自要素(hatena:tag or dc:subject?)&lt;/dt&gt;
&lt;dd&gt;長所: 自由。簡単&lt;/dd&gt;
&lt;dd&gt;短所: クライアントにとって扱いが難しい。独自すぎる&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;ここでは entry がいいのではと思うので、それで進めてみる。
entry を選んだのはそのバランスによる。
たとえば entry の子要素にはもちろんタグの更新時刻や利用回数も入れられる。
タグ名は title に入れるのが素直そうだ。&lt;/p&gt;

&lt;p&gt;次はこのリソースに対してどんな操作を行うか。
REST 的に考えると必要そうな操作は取得(GET)、削除(DELETE)、更新(PUT)、新規作成(POST)の四つ。
ま、GET と DELETE は必要だろう。
POST で新規作成はいらなさそうだ(タグはブックマーク時に自動的に新規作成されるので)。
PUT で更新できるのはタグ名くらいかな。
タグにコメントなんてつけられなくてもいいよね。&lt;/p&gt;

&lt;p&gt;さて、これでタグリソースは固まった。
今度はタグの一覧を考える。
 AtomPP 最新最新版ならコレクションという便利なものがあって、
上記どの種類の XML 形式でもひとつのコレクションとして扱える。
でもここではタグリソースをあえて Atom entry にしたので、feed 要素を使ってみよう。&lt;/p&gt;

&lt;p&gt;一覧取得のときに、オフセットや取得数、タグ名をワイルドカードや正規表現で検索などをしたい気もするけど、
そういうのはコレクションリソースの URI の query string でやればよさそうなので、
ここでは単純に全タグ取得を考える。&lt;/p&gt;
&lt;p&gt;ちなみにコレクションリソースの URI に適用できるのは GET だけ。&lt;/p&gt;

&lt;p&gt;以下に例を書いておく。名前空間宣言や X-WSSE ヘッダとか xml:lang とかは省略してるけど許してね。&lt;/p&gt;
&lt;p&gt;タグ一覧取得&lt;/p&gt;

&lt;pre&gt;
GET /atom/yohei/taglist HTTP/1.1
Host: b.hatena.ne.jp
&lt;/pre&gt;
&lt;pre&gt;
HTTP/1.1 200 OK
Content-Type: application/x.atom+xml

&amp;lt;feed&gt;
  ...
  &amp;lt;entry&gt;
    &amp;lt;id&gt;タグの ID&amp;lt;/id&gt;
    &amp;lt;!-- Edit URI へのリンク --&gt;
    &amp;lt;link rel="service.edit" type="application/x.atom+xml"
      href="/yohei/atom/tag/atompp" title="atompp"/&gt;
    &amp;lt;!-- title はタグになる --&gt;
    &amp;lt;title&gt;atompp&amp;lt;/title&gt;
  &amp;lt;/entry&gt;
  ...
&amp;lt;/feed&gt;
&lt;/pre&gt;

&lt;p&gt;タグの一括置換というのは要するにタグ名の変更(=リソース title の変更)と考えて、 EditURI に新しいタグ名を PUT する。&lt;/p&gt;

&lt;pre&gt;
PUT /atom/yohei/tag/atompp HTTP/1.1
Host: b.hatena.ne.jp
Content-Type: application/x.atom+xml

&amp;lt;entry&gt;
  &amp;lt;id&gt;タグの ID&amp;lt;/id&gt; &amp;lt;!-- いらんか --&gt;
  &amp;lt;title&gt;新しいタグ名&amp;lt;/title&gt;
&amp;lt;/entry&gt;
&lt;/pre&gt;

&lt;p&gt;タグの一括削除はタグリソースの URI を DELETE する。&lt;/p&gt;
&lt;p&gt;あとはタグリソースが URI を持つようになったので、ブックマークリソースのタグ要素(dc:subject or category)からリンクするのがよさそうだ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-112014302292536418?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/112014302292536418/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=112014302292536418' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112014302292536418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/112014302292536418'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/06/atom-pp.html' title='はてなブックマークのタグ編集に Atom PP を用いる件について'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111987502160699903</id><published>2005-06-27T21:17:00.000+09:00</published><updated>2005-06-27T21:23:41.610+09:00</updated><title type='text'>Google Maps でみつけたもの</title><content type='html'>&lt;a href="http://maps.google.com/maps?ll=35.576563,139.778838&amp;spn=0.006748,0.006115&amp;t=k&amp;hl=ja"&gt;着陸寸前の飛行機&lt;/a&gt;とか&lt;a href="http://maps.google.com/maps?ll=35.610520,139.726685&amp;spn=0.008025,0.008487&amp;t=k&amp;hl=ja"&gt;走行&lt;/a&gt;&lt;a href="http://maps.google.com/maps?ll=35.587817,139.692385&amp;spn=0.008025,0.008487&amp;t=k&amp;hl=ja"&gt;中の&lt;/a&gt;&lt;a href="http://maps.google.com/maps?ll=35.663316,139.758743&amp;spn=0.008025,0.008487&amp;t=k&amp;hl=ja"&gt;新幹&lt;/a&gt;&lt;a href="http://maps.google.com/maps?ll=35.413034,139.422952&amp;spn=0.008025,0.008487&amp;t=k&amp;hl=ja"&gt;線&lt;/a&gt;とか&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111987502160699903?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111987502160699903/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111987502160699903' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111987502160699903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111987502160699903'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/06/google-maps.html' title='Google Maps でみつけたもの'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111910709938689773</id><published>2005-06-19T00:01:00.000+09:00</published><updated>2007-09-22T00:09:46.724+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><title type='text'>Microformats の夢</title><content type='html'>Microformats の嬉しさについて。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://developers.technorati.com/wiki/MicroFormats"&gt;Technorati が推進している&lt;/a&gt;ことからもわかるとおり、一番わかりやすいのは blog 検索の精度向上だろう。
たとえば &lt;a href="http://developers.technorati.com/wiki/hReview"&gt;hReview&lt;/a&gt; でブックレビューを書いておけば、
たとえば &lt;a href="http://developers.technorati.com/wiki/hCalendar"&gt;hCalendar&lt;/a&gt; でカンファレンスのスケジュールを登録しておけば、
たとえば &lt;a href="http://developers.technorati.com/wiki/RelLicense"&gt;rel="license"&lt;/a&gt; で自分の記事や写真を CC ライセンスにしておけば、
あなたが提供しているその情報を必要としている人に届きやすくなる。&lt;/p&gt;

&lt;p&gt;あるいは今流行の Musical Baton で他の blog にリンクするときに
 &lt;a href="http://gmpg.org/xfn"&gt;XFN&lt;/a&gt; で友人・知人関係を記述しておいたらどうだろう。
&lt;a href="http://hxxk.jp/2005/06/14/2210"&gt;こんなアイデア&lt;/a&gt;を自動化しつつ
さらに参加者間のリンクを関連で色分けして表示するアプリが作れそうだ。&lt;/p&gt;

&lt;p&gt;そんなの前からできたって?&lt;br /&gt;
そう、メタデータを駆使したセマンティックウェブを使えば前からできた。
Microformats の価値はそこではない。&lt;/p&gt;

&lt;p&gt;そんなの面倒くさそうだって?&lt;br /&gt;
そう、これまでは面倒だった。でもこれからは面倒ではなくなりそうな予兆がある。
Microformats が素晴らしいのは、メタデータが簡単につくれることと、
メタデータが簡単に利用できることだ。簡単にできる、と言い切ってしまうのは時期尚早だけれども、その希望はある。&lt;/p&gt;

&lt;p&gt;たとえば&lt;a href="http://www.decafbad.com/blog/2005/06/08/greasemonkey_magic"&gt;この Greasemonkey アプリ&lt;/a&gt;を見てほしい。
Movable Type(だけじゃないけど) の textarea で hCalendar を入力しやすくするための hack である。
もうちょっとこのインターフェースがこなれれば Blog サービスに十分標準搭載できそうだ。&lt;/p&gt;

&lt;p&gt;あるいは&lt;a href="http://www.google.com/reviews?cid=ba601666fe1a2e79&amp;oi=showtimes&amp;fq=star+wars"&gt;これ&lt;/a&gt;はどうだろう。
&lt;a href="http://www.techcrunch.com/?p=10"&gt;可能性&lt;/a&gt;を感じませんか?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111910709938689773?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111910709938689773/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111910709938689773' title='5 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111910709938689773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111910709938689773'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/06/microformats_19.html' title='Microformats の夢'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111893416035329112</id><published>2005-06-16T23:58:00.000+09:00</published><updated>2007-09-22T00:10:06.569+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='microformats'/><title type='text'>Microformats とは何か</title><content type='html'>&lt;a href="http://yohei-y.blogspot.com/2005/06/rest-atompp-blog-permalink-rssatom.html"&gt;Web 2.0 の図&lt;/a&gt;の中でたぶん一番なじみがないのが microformats だと思う。&lt;/p&gt;
現時点で microformats の日本語の解説で一番詳しいのは 
&lt;a href="http://www.nii.ac.jp/"&gt;NII&lt;/a&gt; 
の&lt;a href="http://www-kasm.nii.ac.jp/~takeda/index-j.html"&gt;武田先生&lt;/a&gt;の
&lt;a href="http://www-kasm.nii.ac.jp/mt/archives/000063.html"&gt;このポスト&lt;/a&gt;だ。&lt;/p&gt;

&lt;blockquote&gt;
そもそもMicroなのかというと，既存の大量な詳細なドキュメントで規定される人間が読むことができないようなフォーマット("megaformat!")に対して，format自身も小さいし，簡単に理解できるようなフォーマットだから，ということでしょう．
&lt;/blockquote&gt;

&lt;p&gt;セマンティックウェブの先端研究者の方による解説なので、Web 2.0 に興味のある方はぜひ読んでください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111893416035329112?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111893416035329112/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111893416035329112' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111893416035329112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111893416035329112'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/06/microformats.html' title='Microformats とは何か'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111841628464618989</id><published>2005-06-10T23:54:00.000+09:00</published><updated>2007-09-22T00:10:38.827+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atom'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='feeds'/><category scheme='http://www.blogger.com/atom/ns#' term='atompub'/><title type='text'>REST -&gt; AtomPP -&gt; blog -&gt; Permalink -&gt; RSS/Atom -&gt; Remixing (Ajax/Microformats/Folksonomy)</title><content type='html'>少し前の話だが、&lt;a href="http://www.oreilly.co.jp/editors/archives/000049.html"&gt;Blog Hackers Conference 2005&lt;/a&gt; に行った。
miyagawa さんのキーノートも、naoya さんの講演も、キーワードは Web 2.0 (的なもの)だなという印象だった。&lt;/p&gt;

&lt;p&gt;中でも特に気になったのは&lt;a href="http://bb.watch.impress.co.jp/cda/parts/image_for_link/30852-9748-11-2.html"&gt;このスライド&lt;/a&gt;で blog が missing piece を埋めた、という話だ。
&lt;a href="http://d.hatena.ne.jp/naoya/20050529/1117360416"&gt;こちら&lt;/a&gt;の&lt;a href="http://d.hatena.ne.jp/naoya/20050529/1117360416#c"&gt;コメント&lt;/a&gt;にも書いたのだけれど、
ここでいう blog というのはいわゆる weblog system/service だけを指すのではなくて、
blog 周辺の技術 (RSS, Atom, AtomPP, REST, Permalink) が方法論として、プラットフォームとなる、というのがまっとうな解釈であろう。&lt;/p&gt;

&lt;p&gt;僕自身もこのような Web 2.0 的なものが現在の主要な関心事になっていて、それをまとめたのがこの図である。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/60043209@N00/18508797/" title="Photo Sharing"&gt;&lt;img src="http://photos12.flickr.com/18508797_0e0f9dda80_o.png" width="480" height="360" alt="Web2" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;まず REST。
REST の詳細は &lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html"&gt;REST 入門&lt;/a&gt;を見ていただきたいが、
ここでいいたいのは REST アーキテクチャスタイルの Web がすべての基本となる、ということである。
どんなサービスやアプリケーションを作るにしても REST は避けて通れない。&lt;/p&gt;

&lt;p&gt;次に &lt;a href="http://bitworking.org/projects/atom/"&gt;Atom Publishing Protocol&lt;/a&gt; (AtomPP; いわゆる AtomAPI) である。
AtomPP は REST で足りないところをきれいに補完するものだ。
RESTful Web で URI 経由でリソースに CRUD を適用できるようになっただけでは、まだ難しい。
AtomPP は REST の URI+CRUD でコンテンツをどう編集するかを具体的に規定した(する)プロトコルとして価値がある。
また AtomPP はその汎用性と拡張性から、
80/20 の法則で、ほとんどの Web サービスのベースとなるのではないかと予想する。&lt;/p&gt;

&lt;p&gt;次に blog system/cms である。Wiki も含む。
これは REST ベースの AtomPP 上に実現された、まさにプラットフォームである。
blog/cms がもたらした効能はたくさんある。
まず第一に Web 上のコンテンツ作成の敷居を大幅に下げた点。
次に、(X)HTML の長年の夢である文書構造とスタイルの分離を推進した点。
さらにその進化版として、構造化文書+メタデータの作成を簡単にすることも期待される。
そして最も大きいのは各種最新技術のテストベッドとして、
アルファギークの格好のおもちゃとなっている点である。&lt;/p&gt;

&lt;p&gt;Permalink は REST の思想のひとつだ。
すべてのリソースはそれぞれ URI を持つ。
もちろんこのときに "&lt;a href="http://www.w3.org/Provider/Style/URI.html"&gt;Cool URIs don't Change&lt;/a&gt;" であるべきだ。
この永続的な URI を手作業で作成・管理していくのは難しい。
昔ながらの Web サイト作りではどうしてもリンク切れが発生する。
しかしそれも blog システムや CMS の普及でツールに任せる時代がやってきた。
また、AtomPP はもちろん Permalink をベースとしている。&lt;/p&gt;

&lt;p&gt;みなさんご存知の各種 RSS および &lt;a href="http://www.ietf.org/internet-drafts/draft-ietf-atompub-format-09.txt"&gt;Atom Syndication Format&lt;/a&gt;
はコンテンツ配信、特に syndication が目的だ。
Permalink, blog, AtomPP と組み合わせることで、浮動的なコンテンツを実現する。
(TODO もうちょっと RSS/Atom の本当の価値を検討する必要があるな)&lt;/p&gt;

&lt;p&gt;少し毛色が変わって Folksonomy は tagging や&lt;a href="http://b.hatena.ne.jp/"&gt;はてなブックマーク&lt;/a&gt;のようなゆるいソーシャルサービスも含む。
こいつがすごいところは、コンテンツ作成者以外にコンテンツとメタデータ作成の門戸を開いたところである。
それまで、ブロガーが独占してきたコンテンツ作成という特権を、
blog を書かない大多数の人々に tagging やコメントという形で開放したところである。
もちろん大勢の人々によるメタデータの補完という価値もある。
ちなみに、ソーシャルブックマークで tagging するためには、もちろん Permalink が必要である。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://developers.technorati.com/wiki/MicroFormats"&gt;Microformats&lt;/a&gt; が実現するのはコンテンツの更なる細分化である。
Permalink で記事単位になったコンテンツを
semantics で分解してプログラムからアクセスできるようになる。
現状では microformat なコンテンツを作成するハードルは高いが、
これは blog/cms がじきに解決する問題だろう。&lt;/p&gt;

&lt;p&gt;Ajax、ここはいわゆる Ajax だけじゃなくて
greasemonkey とか動的言語とか、そういう気持ちも入っている。
simple で practical な hack 環境。&lt;/p&gt;

&lt;p&gt;そして、最後に行き着くところは Remixing Culture である。
REST/AtomPP/Permalink でコンテンツ編集のためのアーキテクチャが整い、
その実装としての blog システムが整備され、
RSS/Atom でコンテンツが再編集しやすい形で配信し、
Folksonomy/Microformats でセマンティクスが補完され、
Ajax で Remix する。&lt;/p&gt;

&lt;p&gt;若干酔っ払ってるのでまとまりないですが、最近考えてるのはこんなことです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111841628464618989?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111841628464618989/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111841628464618989' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111841628464618989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111841628464618989'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/06/rest-atompp-blog-permalink-rssatom.html' title='REST -&gt; AtomPP -&gt; blog -&gt; Permalink -&gt; RSS/Atom -&gt; Remixing (Ajax/Microformats/Folksonomy)'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111771882770141149</id><published>2005-06-02T22:26:00.000+09:00</published><updated>2007-09-22T00:10:59.058+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='feeds'/><title type='text'>CDF を…覚えていますか?</title><content type='html'>CDF を覚えている人はいるだろうか。&lt;/p&gt;

&lt;p&gt;たとえば
&lt;a href="http://www.intertwingly.net/blog/index.cdf"&gt;このファイル&lt;/a&gt;
をダウンロードして、デスクトップに保存してみてほしい。
Windows を使っている人なら、アンテナのアイコンが現われるはずだ。&lt;/p&gt;

&lt;p&gt;ためしにダブルクリックしてみよう。
あやしげなダイアログボックスが表示されるだろう(キャンセルしといてね)。&lt;/p&gt;

&lt;p&gt;右クリックしてみよう。
いっぱいメニューが出てくるはずだ。&lt;/p&gt;

&lt;p&gt;エディタで開いてみよう(「右クリック→編集」でもよい)。
タグ名が大文字の見なれない XML ファイルである。&lt;/p&gt;

&lt;p&gt;これは XML の創世記に話題となった
&lt;a href="http://msdn.microsoft.com/workshop/delivery/cdf/reference/CDF.asp"&gt;Channel Definition Format (CDF)&lt;/a&gt; だ。&lt;/p&gt;

&lt;p&gt;覚えていない人、あるいはそもそも知らない人のために解説すると、
CDF は XML の最初のアプリケーションとして
1997-1998年当時に大変注目されていた技術である。
タグ名が大文字なのも、当時としては普通のことだった(あのころ僕たちは 
HTML のタグを大文字で書いていた)。
&lt;a href="http://ch.kitaguni.tv/u/5250"&gt;村田さん&lt;/a&gt;の「&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4532146100/qid=1117682491/sr=1-18/ref=sr_1_2_18/249-7289276-0091532"&gt;XML 入門&lt;/a&gt;」(この本が書かれたのは'97年で XML の勧告化前)でも、
XML の応用例として最初に CDF が登場している。&lt;/p&gt;

&lt;p&gt;この CDF はプッシュ型 Web キャスティングのために開発された規格である。
プッシュ型 Web キャスティングというのは、
ユーザが Web ページをいちいちチェックしなくても、
CDF 対応クライアントが CDF ファイルを定期的にチェックして、
更新があったときだけ通知してくれる機能のことだ。&lt;/p&gt;

&lt;p&gt;鋭い人ならもう気付いている思うが、
この機能は現在我々が RSS でやっていることと、基本的には全く同じなのである。&lt;/p&gt;

&lt;p&gt;当時、現在の RSS リーダーはまだ一つもなかった。
ではいったい何で CDF を受信していたのか。
それは PointCast (あー懐しい)や Windows の ActiveDesktop
 あるいは IE 4.0 などだ。
PointCast はもうとっくに廃れているけれど、
Windows や IE はまだ現役なので、
我々のデスクトップにアンテナアイコンを表示してくれるのだ。&lt;/p&gt;


&lt;hr /&gt;

&lt;p&gt;(hr タグを使うのも久しぶりだなあ…)&lt;/p&gt;

&lt;p&gt;さて、なんで今さら CDF の話をしたのかというと、
naoya さんの&lt;a href="http://bb.watch.impress.co.jp/cda/alphageek/9778.html"&gt;この記事&lt;/a&gt;を読んだからだ。
いわく、一度はキャズムを越えられなかった RSS が、
blog という最良の伴侶を見つけてキャズムを越え爆発的に普及した、ということである。&lt;/p&gt;

&lt;p&gt;技術的にはそんなに違わないのに CDF はキャズムを越えられなかった。
当時でも CDF を理解して PointCast を使っていたのはギークだけだろう。
それ以外の何万(もっとかな)のユーザは CDF なんて知らずに PointCast で天気予報と朝日新聞を見ていたのだ。
でも CDF は死んだ。&lt;/p&gt;
&lt;p&gt;RSS も粘って粘ってやっとキャズム越えた。
blog ツールによりすべての人々が RSS を提供できる仕組みができたからだろうか。僕にはわからない。&lt;/p&gt;

&lt;p&gt;コンセプト/アイデアはいいのに死んでいった技術の中にも、
復活するものがあるのかもしれない。
ただし、復活させるには駄目になったときとは違うグループがやる必用がある。
たぶん。&lt;/p&gt;

&lt;p&gt;冒頭の CDF は &lt;a href="http://www.intertwingly.net/blog/1405.html"&gt;Sam Ruby さんのもの&lt;/a&gt;です。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111771882770141149?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111771882770141149/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111771882770141149' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111771882770141149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111771882770141149'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/06/cdf.html' title='CDF を…覚えていますか?'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111745134024581543</id><published>2005-05-30T20:07:00.000+09:00</published><updated>2007-09-22T00:13:35.412+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='architecturalstyle'/><title type='text'>REST 入門(その10) 終わりに</title><content type='html'>&lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html"&gt;&amp;#187; REST 入門 目次&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://yohei-y.blogspot.com/2005/05/rest-9-rest-soap.html"&gt;前回&lt;/a&gt;まで、REST 入門ということで、 REST アーキテクチャスタイルとは何なのか、
について基礎的なところを結構細かく :-) 説明してきました。
REST 入門はこれで終わりですが、最後に&lt;a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm"&gt;ロイ・フィールディングの論文&lt;/a&gt;から
&lt;a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm"&gt;REST アーキテクチャスタイルの各制約&lt;/a&gt;を抜き出して説明します。&lt;/p&gt;

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


&lt;h4&gt;終わりに&lt;/h4&gt;
&lt;p&gt;僕がこの REST 入門シリーズを書いた目的は二つあります。
ひとつは「&lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html"&gt;目次&lt;/a&gt;」で書いたとおり、日本語での REST の基礎的な資料を作るためです。
日本では Amazon Web サービスの REST API のような単純な XML over HTTP としてしか REST が認識されておらず、
往々にして間違った議論がされていたり、あるいはアーキテクチャスタイルとしての REST が注目されていなかったりします。
しかし REST は Web における次の5年の(もっとか?)基盤技術であると、僕は思っています。
各個人がどう評価するかはともかく、REST を知らずに Web を語ったり議論したりするのは非常に危ういと思うのですね。
そういう意味で、REST 周辺の言葉を整理して (&lt;a href="http://mixi.jp/view_bbs.pl?id=739841"&gt;Architectural Style の日本語訳も悩んだ&lt;/a&gt;のです)、
日本でもちゃんと話ができるようにしたかった。
結果としては &lt;a href="http://naoya.dyndns.org/~naoya/mt/archives/001680.html"&gt;naoya さんに紹介してもらって&lt;/a&gt;僕の weblog のページビューも10倍くらいになりましたし、
&lt;a href="http://www2005.org/"&gt;WWW2005&lt;/a&gt; 後くらいから REST で検索してくる人が非常に多くなったので、
このシリーズをやってよかったなと思ってます。&lt;/p&gt;

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

&lt;p&gt;たとえば &lt;a href="http://www2005.org/panels/abstract.html?#PA09"&gt;WWW2005 のパネル&lt;/a&gt;で SOAP/WS-* を厳しく批判していた 
&lt;a href="http://www.tbray.org/ongoing/"&gt;Tim Bray&lt;/a&gt; や 
&lt;a href="http://www.adambosworth.net/"&gt;Adam Bosworth&lt;/a&gt; は
SOAP/WS-* のことを何も知らずに批判しているわけではないのです。
むしろ、知っているからこそ批判できるんです。
SOAP/WS-* 側の人間にしても同じです。
&lt;a href="http://pluralsight.com/blogs/dbox/"&gt;Don Box&lt;/a&gt; や 
&lt;a href="http://pluralsight.com/blogs/jeffsch/"&gt;Jeffrey Schlimmer&lt;/a&gt;, 
&lt;a href="http://www.25hoursaday.com/weblog/"&gt;Dare Obasanjo&lt;/a&gt;, 
&lt;a href="http://pluralsight.com/blogs/tewald/"&gt;Tim Ewald&lt;/a&gt;, 
&lt;a href="http://www.pacificspirit.com/blog/"&gt;Dave Orchard&lt;/a&gt;
みんな REST のことはきちんと知っている。
だいたい Dave Orchard と Tim Bray なんて&lt;a href="http://www.tbray.org/ongoing/When/200x/2005/05/03/Replacing-WSDL"&gt;ランチしてたり&lt;/a&gt;するし、
その他の人々も W3C のメーリングリストやミーティングなんかでちゃんと交流して議論しているわけです。
そういえば Tim Bray だって昨年の &lt;a href="http://www.sellsbrothers.com/conference/"&gt;XML Developers' Conference&lt;/a&gt;
 (Microsoft よりのカンファレンス)で&lt;a href="http://www.tbray.org/ongoing/When/200x/2004/10/21/Sells"&gt;講演&lt;/a&gt;してました。
&lt;/p&gt;

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

&lt;p&gt;この weblog の今後ですけど、シリーズものだと普段はあまり気が乗らない基本的なことも書く気がおきてよい感じなので、
もう一回やってみようかと思ってます。
題材は今話題の(?) Web 2.0 にするつもり。
ではまた。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111745134024581543?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111745134024581543/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111745134024581543' title='6 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111745134024581543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111745134024581543'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/05/rest-10.html' title='REST 入門(その10) 終わりに'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111728478290615189</id><published>2005-05-28T21:39:00.000+09:00</published><updated>2007-09-22T00:13:55.605+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='ws-star'/><category scheme='http://www.blogger.com/atom/ns#' term='soap'/><title type='text'>REST 入門(その9) REST と SOAP</title><content type='html'>&lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html"&gt;&amp;#187; REST 入門 目次&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://yohei-y.blogspot.com/2005/05/rest-8-rest.html"&gt;前回&lt;/a&gt;、WWW のうち REST アーキテクチャスタイルに従っていないものについて解説しました。
今回は「その筋」では有名な REST と SOAP の対決の概略を解説します。&lt;/p&gt;

&lt;p&gt;Google で &lt;a href="http://www.google.co.jp/search?q=%22rest+vs+soap%22"&gt;"REST vs SOAP"&lt;/a&gt; あるいは 
&lt;a href="http://www.google.co.jp/search?q=%22soap+vs+rest%22"&gt;"SOAP vs REST"&lt;/a&gt; を検索すると、
たくさんの Web ページが見つかります。
いろいろな立場の人が、それぞれの意見を述べ合っていて、
ここで全ての主張や意見を解説するのは不可能です。
これから解説する内容は、あくまでも個人の意見ということをご了承ください(まー weblog なんてそんなもんですが)。&lt;/p&gt;

&lt;p&gt;ところで最初からこんな話をするのもアレですが、 REST と SOAP は比べられるものなのでしょうか。
REST はこれまで何度も述べてきたとおり、ネットワークシステムのアーキテクチャスタイルです。
一方で SOAP はプロトコル、あるいはメッセージのエンベロープ形式です。
二つを比べようにもあまりに次元が違い過ぎます。
この二つが並べて議論されるとき、たいていは SOAP を拡大意解釈するか、
あるいは REST を縮小解釈しています。
たとえば Amazon Web サービスの SOAP API と REST API を比べたり(REST の縮小解釈)、
あるいは SOA と REST を比べたり(SOAP の拡大解釈)。
これには歴史的理由がいろいろあって、紆余曲折してきているというのが真相です。
ここでは時系列に沿って、REST vs SOAP を振り返ってみたいと思います。&lt;/p&gt;

&lt;h4&gt;SOAP RPC と REST&lt;/h4&gt;
&lt;p&gt;2000年ごろ、Web サービスといえば SOAP/WSDL/UDDI でした。
SOAP には何種類かの使い方があるのですが、
このころは SOAP エンコーディングを使った RPC (SOAP-RPC)が主流の使い方でした。
SOAP-RPC がやりたいこと(できること)は非常に単純です。
異なるプラットフォーム同士で RPC をすることです。&lt;/p&gt;

&lt;p&gt;プラットフォームが異なる場合、標準的なデータフォーマットが必要となり、そこに SOAP エンコーディングという 
XML を採用したプログラム言語のデータ構造のシリアライズ形式が使われました。
SOAP エンコーディングを使った RPC は WSDL の記述の仕方から rpc/encoded と呼ばれます。&lt;/p&gt;

&lt;p&gt;SOAP-RPC は便利です。それまで RPC がなかなか実現できなかったところで RPC が可能になりました(たとえば UPnP)。
しかし、SOAP-RPC は結局のところ RPC ですから、それ以前の RPC や DCOM, CORBA などの分散オブジェクト技術が持っていた問題をそのまま受け継ぐことになります。
サービスの呼び出し単位は細かく、オブジェクトが状態を持ちがちなので、スケーラビリティが問題になります。
そのような理由から SOAP のトレンドは SOAP-RPC から別のものに移っていくことになります。&lt;/p&gt;

&lt;h4&gt;WS-*/SOA&lt;/h4&gt;
&lt;p&gt;rpc/encoded よりも粒度が粗く、RPC でなく XML をそのままメッセージとして送信する、
そんな SOAP のやり取りを document/literal 形式といいます。
これは引数が DOM の Document オブジェクトひとつのメソッドを思い浮かべればいいでしょう。
XML を DOM でそのまま渡して、結果も DOM で返ってくる。
非常に単純化するとそんな形式です。&lt;/p&gt;

&lt;p&gt;一方で SOAP の世界には WS-* と呼ばれる仕様群が登場します。
SOAP 自身は前にも述べたとおり単なるメッセージエンベロープ形式であり、
実際の運用ではさまざまな機能をその上に実装する必要があります。
各社バラバラにそれらの機能を作っていってもいいのですが、
ある程度共通化して使える機能に関して WS- という接頭辞をつけた名前の仕様書がさまざまなベンダから提案されました(されています)。
具体的な仕様書名を挙げれば、たとえば 
&lt;a href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf"&gt;WS-Security&lt;/a&gt; や 
&lt;a href="http://www.w3.org/2002/ws/addr/"&gt;WS-Addressing&lt;/a&gt; などです。&lt;/p&gt;

&lt;p&gt;この WS-* 仕様群には、ベンダ各社の標準化競争だとか、
オーバースペックだとか CORBA の再来だとか、
さまざまな問題が指摘されています。
が、まあここではそういう話はおいておいて、純粋に技術的にどうなのかという議論をしたいと思います。&lt;/p&gt;

&lt;h4&gt;REST と SOAP&lt;/h4&gt;
&lt;p&gt;ここでは SOAP といったときに単純に SOAP エンベロープ形式を指すわけではありません。
SOAP というのはその周囲の WS-* だとか SOA だとかを含んだ一連のコンセプトを指すと考えます。&lt;/p&gt;

&lt;p&gt;SOAP 的な考え方と REST 的な考え方(というか REST は考え方そのもの)の一番の大きな違いは、
プロトコル独立を重視するかどうかです。
SOAP 的考え方はプロトコル独立を重視します。
たとえば SOAP メッセージは HTTP でも SMTP でも UDP でも直接 TCP でも送れるように設計されています。
一方で REST には HTTP しかありません。
この両者の差は何なのでしょうか。&lt;/p&gt;

&lt;p&gt;この差はインターフェースがどこに含まれるかの違いです。
REST では uniform interface 制約ということで HTTP が統一のインターフェースとなります。
HTTP の上をデータ(XML)が流れます。
一方で SOAP ではトランスポート独立ということで TCP, UDP, SMTP, そして HTTP の上に
getX, startY などのインターフェース付きのデータ(SOAP メッセージ)が流れます。&lt;/p&gt;

&lt;p&gt;REST と SOAP 的考え方の違い、少しだけですが雰囲気はつかめたでしょうか。
このテの話題は純粋に技術的ではなく、他の要素が絡むので語りにくいのですが、
技術者の皆さんに言いたいのは REST でも SOAP でも、
せめて技術的にはニュートラルに評価しましょう、ということです。
今日のこのポストもかなり端折って書いているので、
このまま鵜呑みにするんじゃなくて自分で調べてくださいね。&lt;/p&gt;

&lt;p&gt;この REST 入門シリーズも次回はとうとう最終回です。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111728478290615189?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111728478290615189/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111728478290615189' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111728478290615189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111728478290615189'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/05/rest-9-rest-soap.html' title='REST 入門(その9) REST と SOAP'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111703174227945316</id><published>2005-05-25T23:33:00.000+09:00</published><updated>2007-09-22T00:14:40.571+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><title type='text'>Alpine</title><content type='html'>&lt;a href="http://yohei-y.blogspot.com/2005/05/java-soap.html"&gt;前のエントリ&lt;/a&gt;の続き。&lt;/p&gt;

&lt;p&gt;同論文では Alpine の設計目標が提示されている。&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Stay in the XML space as much as possible.&lt;/li&gt;
&lt;li&gt;Take advantage of as much leading edge infrastructure as we can.&lt;/li&gt;
&lt;li&gt;Adopt the the handler chain pattern of Axis/JAX-RPC.&lt;/li&gt;
&lt;li&gt;Target SOAP 1.2 (POST only, WS-I Basic Profile 1.1)&lt;/li&gt;
&lt;li&gt;Document/literal mssages only, not RPC/encoded.&lt;/li&gt;
&lt;li&gt;Support XSD and Relax NG schemas.&lt;/li&gt;
&lt;li&gt;Run server-side, client-side, and as an intermediary.&lt;/li&gt;
&lt;li&gt;No support for JAX-RPC or JAX-M/SAAJ APIs.&lt;/li&gt;
&lt;li&gt;Configurable procedurally, through the Java Manage- ment API (JMX).&lt;/li&gt;
&lt;li&gt;Permit dynamic handler chain configuration during mes- sage processing.&lt;/li&gt;
&lt;li&gt;One supported parser.&lt;/li&gt;
&lt;li&gt;Run on Java 1.5 and later.&lt;/li&gt;
&lt;li&gt;No provision of side features such as a built in HTTP server, or a declarative configuration mechanism. These are delegated to other products.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;この中でも注目は 1 と 3 だ。&lt;/p&gt;
&lt;p&gt;XML の API として、彼らは &lt;a href="http://www.cafeconleche.org/XOM/"&gt;XOM&lt;/a&gt; を念頭においているようだ。
ハンドラチェーンを使うのは「知っている XML だけを処理する」モジュールを接続して処理をするためだろう。&lt;/p&gt;

&lt;p&gt;いやーしかし、こういう論文が Sun でも IBM でも BEA でもなく HP から出てくるところが、面白いなー。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111703174227945316?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111703174227945316/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111703174227945316' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111703174227945316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111703174227945316'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/05/alpine.html' title='Alpine'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111702994216110923</id><published>2005-05-25T23:04:00.000+09:00</published><updated>2007-09-22T00:15:01.535+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='soap'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><title type='text'>Java SOAP スタックの再考</title><content type='html'>とても興味深い論文を読んだ。
Steve Loughran と Edmund Smith の "&lt;a href="http://www.hpl.hp.com/techreports/2005/HPL-2005-83.pdf"&gt;Rethinking the Java SOAP Stack&lt;/a&gt;" だ。
この論文は現在の Java の SOAP 実装スタック、特に JAX-RPC の問題点を
XML セントリックな視点から明確に指摘している。
また、最後の部分で Alpine という新しい SOAP スタックのコンセプトを提案している。&lt;/p&gt;

&lt;p&gt;Alpine の方はまだどんなものかわからないので、これからに期待したいが、
JAX-RPC の問題点の方はとても面白い。
雰囲気を伝えるために論文の第二章 "基本的な JAX-RPC の欠陥(The Fundamental Flaws of JAX-RPC)"
の見出しを日本語で引用する。&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol style="list-style-type: upper-alpha;"&gt;
  &lt;li&gt;オブジェクト/XML のインピーダンスミスマッチ
    &lt;ol style="list-style-type: decimal;"&gt;
      &lt;li&gt;XML 要素の Java クラスへのバインディング&lt;/li&gt;
      &lt;li&gt;XML の名前(Names)の Java 識別子へのマッピング&lt;/li&gt;
      &lt;li&gt;Enumeration&lt;/li&gt;
      &lt;li&gt;ポータブルでない型&lt;/li&gt;
      &lt;li&gt;オブジェクトのグラフの直列化&lt;/li&gt;
      &lt;li&gt;XML メタデータと名前空間&lt;/li&gt;
      &lt;li&gt;メッセージ妥当性検証&lt;/li&gt;
      &lt;li&gt;XML と直列化データの不適切な混和&lt;/li&gt;
      &lt;li&gt;フォールト処理&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;SOAP は RPC ではない&lt;/li&gt;
  &lt;li&gt;SOAP は RMI ではない&lt;/li&gt;
  &lt;li&gt;WSDL: 別の複雑さ&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;このように論文で指摘されている問題点はいくつもあるのだが、基本的には SOAP/XML Web サービスを
Java 世代のプログラミング言語(Java に加えて C#, VB.NET も)にネイティブにマッピングしてしまうことへの批判となっている。
その中でも特に大きいのが XML と オブジェクトのデータモデルの違いに起因するインピーダンスミスマッチだ。
ここで指摘されている各事項は、XML をオブジェクトにマッピングしたり、
オブジェクトを XML にマッピングしたりすることが本質的に難しいことを示している。
&lt;/p&gt;

&lt;p&gt;上でも述べたとおり、この論文は XML セントリックな視点から記述されているので、
逆に RPC/RMI/Object セントリックな視点から見るとまったく許容できない内容なのかもしれない。
そういう意味で面白い文(&lt;a href="http://pluralsight.com/blogs/dbox/archive/2005/05/24/8539.aspx"&gt;Don Box も引用&lt;/a&gt;している)がある。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
我々は Web サービス開発者にはただ二つの分類があると考える。
XML に満足していてそれを扱う仕事をしたいと願っている人々と、満足していないのに結局はなんだかんだいってそれを扱う人々だ。
&lt;/p&gt;
&lt;p&gt;(We believe that only two categories of web service developer exist: those who are comfortable with XML and
want to work with it, and those who aren’t but end up doing so anyway.)
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;明らかに僕は前者だ :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111702994216110923?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.hpl.hp.com/techreports/2005/HPL-2005-83.pdf' title='Java SOAP スタックの再考'/><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111702994216110923/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111702994216110923' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111702994216110923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111702994216110923'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/05/java-soap.html' title='Java SOAP スタックの再考'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111693974497290792</id><published>2005-05-24T21:55:00.000+09:00</published><updated>2005-05-24T22:02:24.976+09:00</updated><title type='text'>Blog Hackers Conference 2005</title><content type='html'>Blog Hacker じゃないけど、金曜日 &lt;a href="http://www.oreilly.co.jp/editors/archives/000049.html"&gt;Blog Hackers Conference 2005&lt;/a&gt; を聞きに行きます。たまにはこういうところも行かんと。
REST/Web サービスな人と時間があれば交流したいもんです。
メールか &lt;a href="http://mixi.jp/show_friend.pl?id=173690"&gt;mixi&lt;/a&gt; で連絡ください。って誰あてだ ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111693974497290792?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oreilly.co.jp/editors/archives/000049.html' title='Blog Hackers Conference 2005'/><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111693974497290792/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111693974497290792' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111693974497290792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111693974497290792'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/05/blog-hackers-conference-2005.html' title='Blog Hackers Conference 2005'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111685365005403486</id><published>2005-05-23T22:07:00.000+09:00</published><updated>2007-09-22T00:16:05.234+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='soap'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>疎結合と XML</title><content type='html'>疎結合(loosely-coupled)って何でしょう?&lt;/p&gt;

&lt;p&gt;僕自身、適当に疎結合という言葉を使ってしまいがちですが、
ちゃんとした説明なり定義なりが必用だと感じています(自分のために)。
いいかげんな定義で話をはじめると、
各人の方向性がずれまくって議論ができないですよね。
Web サービスしかり、 SOA しかり、REST しかり。
ということで今回は僕なりに疎結合ってこんなもの、
というのを考えてみます。&lt;/p&gt;

&lt;p&gt;ものすごく一般化してしまうと、
疎結合というのは複数のコンポーネント間の結び付きが
ゆるいことを指すんでしょうね。
たぶん、ここまでは誰でも同意してくれるはず。
ただこれだけでは議論ができなくて、
このコンポーネントに何をもってくるかを決めて、
はじめて具体的な話ができます。&lt;/p&gt;

&lt;p&gt;僕がここで話したいのは Web サービスの文脈での「疎結合」ですから、
コンポーネントは Web サービスになります。
コンポーネントがオブジェクトだとかもっと細かいレベルの話もあると思いますけど、
ここではしません。&lt;/p&gt;

&lt;p&gt;あ、Web サービスという言葉も危いですね。
ここでは Web 上で機械(プログラム)可読なフォーマットで情報を提供するもの、
だとします(実際、僕の Web サース感はこれに近い)。
SOAP インターフェースの株価サービスかもしれないし、
AtomAPI のはてなブックマークかもしれない。
RSS フィードも含みます。&lt;/p&gt;

&lt;p&gt;ところで、この「疎結合」をもろに扱った本があります。
タイトルがずばり「&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4775302647/qid%3D1116853475/250-6140822-5756218"&gt;疎結合&lt;/a&gt;」です。
SOAP よりの Web サービスの文脈での疎結合を扱っている本です。
この本は10章で疎結合とは何かを解説しているんですが、
そこにはこんなことが書いてあります。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;(前略)
多くの人々が「疎結合」という言葉を口にしますが、
その意味を正確に説明できる人はほとんどいません。
これは、疎結合が方法論もしくは作法であり、
確立された規則や仕様ではないからです。&lt;/p&gt;
&lt;p&gt;疎結合は、俊敏性(アジリティ)、すなわち変化に適応する能力を重要視する
分散アプリケーション設計へのアプローチの一種です。
(後略)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;つまり疎結合というのは分散アプリケーションの作り方、
設計の仕方に関する考え方のひとつであり、
特に決った規則や仕様はないってことです。
これは逆の意味でしっくりきました(僕には)。
これだけ曖昧な定義なら、議論の方向性が定まらないのも仕方ないですね。&lt;/p&gt;

&lt;p&gt;僕が今考える疎結合システムのイメージはこんな感じです。&lt;/p&gt;

&lt;p&gt;まず、サービス(コンポーネント)間のインターフェースは統一し、
半永久的に変更しません。
サービスのインターフェースに少しでも修正が入ると、
旧インターフェースを利用していたクライアントを修正しなければならないからです。&lt;/p&gt;

&lt;p&gt;インターフェースを統一して不変にしたときに、
ではいったいどこでサービス同士の機能を差別化するのか。
それはサービス間でやり取りするデータで行います。
データ形式を思いっきり自由に拡張可能にして、
どんな種類のデータでも統一インターフェースで受け渡し可能にします。
オブジェクトだとこの拡張性が厳しいのですが、
XML と名前空間の組み合わせならぜんぜん問題ありません(ちょっと言い過ぎか)。&lt;/p&gt;

&lt;p&gt;XML が拡張可能ということは、自分が知らない要素や属性が出てくる可能性があるということです。
でも、そんな拡張された未知のデータでもエラーにせずに、使えなければなりません。
そのために、知らない要素は無視する、という動作をデフォルトで行わなければならないのです。
SOAP の mustUnderstand 属性がデフォルトで false なのは、こういう理由からではないかと思います、たぶん。&lt;/p&gt;

&lt;p&gt;で、このデフォルトで無視という動作は、
吉松さんが&lt;a href="http://luckypines.blogspot.com/2005/05/queries-vs-methods.html"&gt;このポスト&lt;/a&gt;で言っている
「無邪気なまでにデータの読み手に解釈をゆだねる姿勢」
のデータの読み手側の一番簡単な実践なんだと思うのです。
本当はさらに吉松さんのポストのコメントで萩原正義さん(らしき人)が言っている「semantics を重視した…」
というのも直感的にわかりそうなのだけれど、今の僕には残念ながら理解しきれません。
だからとりあえず、
 XPath なりで知ってる要素と属性をパターンマッチして知らないやつは無視、からやってみるしかないんだな、
というなんだか当たり前の結論になっちゃったなあ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111685365005403486?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111685365005403486/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111685365005403486' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111685365005403486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111685365005403486'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/05/xml.html' title='疎結合と XML'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111672663027180331</id><published>2005-05-22T10:49:00.000+09:00</published><updated>2007-09-22T00:16:25.811+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='http'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><title type='text'>REST 入門(補足2) POST と PUT</title><content type='html'>&lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html"&gt;&amp;#187; REST 入門 目次&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;kwatch さんから&lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html#c111667735301724343"&gt;以下のようなコメント&lt;/a&gt;をもらいました。&lt;/p&gt;

&lt;blockquote&gt;
POSTとPUTの説明が逆では？たしかPUTが新規作成であり、POSTは送ったリソースの処理を指定したURIに任せるということだったと思いますが。
&lt;/blockquote&gt;

&lt;p&gt;コメント欄では返答が書ききれなかったので、補足として新しいポストを追加します。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rfc.net/rfc2616.html"&gt;RFC2616&lt;/a&gt; では &lt;a href="http://rfc.net/rfc2616.html#s9.6"&gt;PUT の動作が二つ規定&lt;/a&gt;されています。&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;指定した URI がすでに存在している場合&lt;/dt&gt;
&lt;dd&gt;PUT はその URI のリソースを修正(更新)する&lt;/dd&gt;
&lt;dt&gt;指定した URI が存在しない場合&lt;/dt&gt;
&lt;dd&gt;PUT はその URI のリソースを新規作成する&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;PUT を規定している &lt;a href="http://rfc.net/rfc2616.html#s9.6"&gt;9.6 節&lt;/a&gt;には POST と PUT の違いとして以下の記述があります。&lt;/p&gt;

&lt;blockquote&gt;
The fundamental difference between the POST and PUT requests is
reflected in the different meaning of the Request-URI. The URI in a
POST request identifies the resource that will handle the enclosed
entity. That resource might be a data-accepting process, a gateway to
some other protocol, or a separate entity that accepts annotations.
In contrast, the URI in a PUT request identifies the entity enclosed
with the request -- the user agent knows what URI is intended and the
server MUST NOT attempt to apply the request to some other resource.
If the server desires that the request be applied to a different URI,
it MUST send a 301 (Moved Permanently) response; the user agent MAY
then make its own decision regarding whether or not to redirect the
request.
&lt;/blockquote&gt;

&lt;p&gt;つまり PUT でも POST でもリソースを新規作成することができるのですが、以下の違いがあるということです。&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;PUT でリソースを新規作成する場合&lt;/dt&gt;
&lt;dd&gt;クライアントが指定した URI のリソースが新規作成される&lt;/dd&gt;
&lt;dt&gt;POST でリソースを新規作成する場合&lt;/dt&gt;
&lt;dd&gt;クライアントが指定する URI はリソースを新規作成するリソースの URI。新規作成されたリソースの URI はサーバが決定する&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;ここまでは HTTP 1.1 の規定の話です。
論点は、リソースの URI を PUT でクライアントが作るのか POST でサーバが作るのか、ということです。
REST では URI はクライアントにとって不透明(opaque)であるべき、という原則があります。
そのココロはクライアントとサーバの結びつきをなるべく減らす、というものです。
PUT でリソースを新規作成する場合、クライアントはそのサーバが提供する URI 空間の管理方法を別途知らなければなりません。
このような密結合は REST あるいは Web サービスの世界では厳禁事項の一つです。
&lt;/p&gt;

&lt;p&gt;たとえば現状の &lt;a href="http://bitworking.org/projects/atom/draft-ietf-atompub-protocol-04.html"&gt;Atom Publishing API&lt;/a&gt; では、
&lt;a href="http://bitworking.org/projects/atom/draft-ietf-atompub-protocol-04.html#create_coll_member_model"&gt;
新しいリソースの作成はコレクション URI に POST することになっています&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;REST 入門の一連のポストこのような理由から、リソースの新規作成は POST で行う、と説明しています。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111672663027180331?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111672663027180331/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111672663027180331' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111672663027180331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111672663027180331'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/05/rest-2-post-put.html' title='REST 入門(補足2) POST と PUT'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111666826835035497</id><published>2005-05-21T18:35:00.000+09:00</published><updated>2007-09-22T00:16:49.831+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='softwareengineering'/><title type='text'>まっとうなソフトウェア工学に期待すること</title><content type='html'>&lt;a href="http://d.hatena.ne.jp/naoya/20050518"&gt;naoya さんのダイアリー&lt;/a&gt;に端を発してちょっとだけ議論が起きている。&lt;/p&gt;

&lt;p&gt;まず &lt;a href="http://d.hatena.ne.jp/naoya/20050518"&gt;naoya さんのオリジナルのポスト&lt;/a&gt;。
はてなが従来のいわゆる世間一般の開発手法を採用せず
 Perl でアジャイルな開発手法をを選ぶ理由として、
その開発するソフトウェアサービスの性質と
動的型付け言語の開発効率を挙げている。&lt;/p&gt;

&lt;p&gt;対して&lt;a href="http://d.hatena.ne.jp/orionae/20050518/p1"&gt;オリオナエさん&lt;/a&gt;は naoya さんがソフトウェア工学を軽視している(ように見える)点を、
薬学と建築工学の例を使って批判している。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://luckypines.blogspot.com/2005/05/blog-post_20.html"&gt;吉松さん&lt;/a&gt;ははてなのサービスとオリオナエさんの薬の例のギャップを指摘して、
いわゆるソフトウェア工学的手法に疑問を投げかけておられる。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://dontstopmusic.no-ip.org/diary/20050521.html#p01"&gt;Don'tStopMusic さん&lt;/a&gt;もオリオナエさんの例とはてなの違いから
いわゆるソフトウェア工学(と Java)ははてなには合わないという主張だ。&lt;/p&gt;

&lt;p&gt;ここまで読んで思ったのは、みなさんの「ソフトウェア工学」感のずれだ。
それぞれソフトウェア工学に期待することが微妙にずれているので、
どうしても話がかみ合わないように見受けられる。&lt;/p&gt;

&lt;p&gt;そんなときに思い出すのは檜山さんの&lt;a href="http://www.symmetric.co.jp/hiyama/SoftwareEngineering.htm"&gt;この文書&lt;/a&gt;だ。&lt;/p&gt;

&lt;p&gt;檜山さんの記事を読むまでは僕もいわゆるソフトウェア工学に胡散臭さを感じていた。
だからといって職人芸的なアプローチについても、なんだか割り切れないものを感じていたのも事実だ。
僕はもともとは情報系の人間ではなく、学部ではロボットで遊んでいた人間なので、
ロボットの基本である機械工学といわゆるソフトウェア工学の差があまりに激しいのでびっくりしていた。
そんなところで檜山さんの言葉「どうでもいいソフトウェア工学」と「まっとうなソフトウェア工学」を得て、
やっとすっきりした。&lt;/p&gt;

&lt;p&gt;たとえば &lt;a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm"&gt;REST アーキテクチャスタイル&lt;/a&gt;はまっとうなソフトウェア工学の貴重な研究成果だと思う。
もちろん REST を適用すれば何でも解決するわけではない。
でも REST スタイルを学んで設計開発するのと、何も知らずにどうでもいいソフトウェア工学で設計開発するのでは、
その結果の Web アプリケーションの品質や性能に大きな差が出るだろう。&lt;/p&gt;

&lt;p&gt;それからはてなの成果、はてなフレームワークは
Web アプリケーションフレームワークの実践としてとても素晴らしいものではないかと予想しているのだけれど、
それが優秀なハッカーの職人芸的な成果としてしか扱われないのであればとてもさみしいことだと僕は思う。
はてなフレームワークがオープンソースになったあかつきには、
アカデミックな研究者の方にぜひ、
その成功の秘訣をソフトウェア工学観点から解析してもらって、
それ以外のフレームワークに広く展開できるような研究成果をだしてもらえないものだろうか、と期待している。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111666826835035497?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111666826835035497/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111666826835035497' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111666826835035497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111666826835035497'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/05/blog-post_21.html' title='まっとうなソフトウェア工学に期待すること'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111607475893903559</id><published>2005-05-14T21:44:00.000+09:00</published><updated>2005-05-14T21:45:58.943+09:00</updated><title type='text'>今週は濃かった</title><content type='html'>今週は濃い1週間だった。
火曜日に&lt;a href="http://d.hatena.ne.jp/m-hiyama/"&gt;檜山さん&lt;/a&gt;、&lt;a href="http://mag.autumn.org/default.modf?s=kwmt"&gt;川俣さん&lt;/a&gt;と食事。
金曜日は &lt;a href="http://www2005.org/"&gt;WWW2005&lt;/a&gt; で&lt;a href="http://www.kde.cs.tsukuba.ac.jp/~amagasa/"&gt;天笠さん&lt;/a&gt;とお茶。
その後&lt;a href="http://www2005.org/panels/abstract.html?#PA09"&gt;パネル&lt;/a&gt;を聴講して、会場で&lt;a href="http://ch.kitaguni.tv/u/5250/"&gt;村田さん&lt;/a&gt;、
&lt;a href="http://luckypines.blogspot.com/"&gt;吉松さん&lt;/a&gt;、&lt;a href="http://hirano.com/blog/"&gt;平野さん&lt;/a&gt;にお会いした。
その後は幕張勤務の &lt;a href="http://www.skaga.jp/"&gt;Shu 君&lt;/a&gt;と久々に会った。
脳みその心地よい疲れ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111607475893903559?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111607475893903559/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111607475893903559' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111607475893903559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111607475893903559'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/05/blog-post_14.html' title='今週は濃かった'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111600133625407165</id><published>2005-05-14T01:20:00.000+09:00</published><updated>2005-05-16T21:52:26.220+09:00</updated><title type='text'>Web Services Considered Harmful?</title><content type='html'>WWW2005 のパネルディスカッション "&lt;a href="http://www2005.org/panels/abstract.html?#PA09"&gt;Web Services Considered Harmful?&lt;/a&gt;"
に行ってきた。
いやー楽しかったなー。
パネリストは&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.ics.uci.edu/~rohit/"&gt;Rohit Khare (Moderator)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.tbray.org/ongoing/"&gt;Tim Bray&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://luckypines.blogspot.com/"&gt;Fumiaki Yshimatsu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.markbaker.ca/"&gt;Mark Baker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.adambosworth.net/"&gt;Adam Bosworth&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;という超豪華メンバー。以下、簡単にメモです。しょうもないメモですみません。
他のブログでまとめているのを見つけたら、更新しておきます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;まず Rohit Khare から背景の説明&lt;/li&gt;
&lt;li&gt;SOAP, WSDL から 5年&lt;/li&gt;
&lt;li&gt;WS-* 問題&lt;/li&gt;
&lt;li&gt;表面的には標準化の問題&lt;/li&gt;
&lt;li&gt;実際は技術の問題&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Tim Bray&lt;/li&gt;
&lt;li&gt;Web サービス二つの側面&lt;/li&gt;
&lt;li&gt;ひとつはネットワーク越しの API&lt;/li&gt;
&lt;li&gt;もうひとつは XML で表現されたメッセージ交換&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.tbray.org/ongoing/When/200x/2004/09/21/WS-Research"&gt;WS-* はあほみたいに仕様書のページがある&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;吉松さん&lt;/li&gt;
&lt;li&gt;Amazon Web サービスの紹介&lt;/li&gt;
&lt;li&gt;なぜ Amazon が Web サービスをやるか→ニーズがあったから&lt;/li&gt;
&lt;li&gt;SOAP: 20%, XML over HTTP: 80%&lt;/li&gt;
&lt;li&gt;Amazon Web サービスを使ったアプリの紹介&lt;/li&gt;
&lt;li&gt;Why they are builgding?&lt;/li&gt;
&lt;li&gt;because it's live!&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.markbaker.ca/Talks/2005-ws-harmful/slide1-0.html"&gt;Mark Baker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Web より祖結合なシステムはあるのか&lt;/li&gt;
&lt;li&gt;やろうとしていることはアプリケーション間でのドキュメント交換&lt;/li&gt;
&lt;li&gt;それを以下に単純に、疎結合で、ドキュメント指向でやるか&lt;/li&gt;
&lt;li&gt;二つの方法&lt;/li&gt;
&lt;li&gt;1 SOA&lt;/li&gt;
&lt;li&gt;それぞれのアプリにそれぞれのインターフェース&lt;/li&gt;
&lt;li&gt;→インターフェースを共有できない&lt;/li&gt;
&lt;li&gt;2 SQL/MOM/EDI-inspired&lt;/li&gt;
&lt;li&gt;同じインターフェースなら共有できる&lt;/li&gt;
&lt;li&gt;その同じインターフェースが HTTP&lt;/li&gt;
&lt;li&gt;これが Web (そして REST)のすべて&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Adam Bosworth&lt;/li&gt;
&lt;li&gt;タイトル: A Web of Data&lt;/li&gt;
&lt;li&gt;Web 成功のつぼ&lt;/li&gt;
&lt;li&gt;→simple, sloppy, standards, scalable&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.onlamp.com/pub/a/onlamp/2005/04/22/bosworth.html"&gt;MySQL Users Conference 2005&lt;/a&gt; と大体同じような話&lt;/li&gt;
&lt;li&gt;networks are faster than disk とか&lt;/li&gt;
&lt;li&gt;9年前のビジョンが実現されていない&lt;/li&gt;
&lt;li&gt;XQuery のように遅かったり&lt;/li&gt;
&lt;li&gt;XSD みたいに動かなかったり&lt;/li&gt;
&lt;li&gt;末端ユーザが使えないくらい難しかったり&lt;/li&gt;
&lt;li&gt;この人の話は面白すぎてメモとりきれなかった&lt;/li&gt;
&lt;li&gt;ひとつだけ書けば、REST にも WS-* にも足りないものとして非同期性が挙げられていた&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;この後の自由討議は &lt;a href="http://www.markbaker.ca/2002/09/Blog/2005/05/13#2005-05-ws-harmful"&gt;Mark が書いている&lt;/a&gt;とおり
Tim と Adam の二人舞台だった。
特に Adam Bosworth がクールでスマート。
いってることは過激というか強烈というか痛烈というか、まあ彼のブログのとおりなのだけど、
本当に賢くて理に適っている。&lt;/p&gt;

&lt;p&gt;そういえば聴衆からの質問者で一人
Web サービスよりの人がいたんだけど、
Mark の blog によればあれは &lt;a href="http://larve.net/people/hugo/"&gt;Hugo Hass&lt;/a&gt;
だったみたい。&lt;/p&gt;

&lt;p&gt;100人くらい入る会場はほぼ埋まっていた。半分以上は外国人だったと思う。
終了後村田さんから聞いたのは、
REST のための XML 開発者の日をやりたい(やりたかった)が事務局がないのでできない、
というような話。
僕も日本でももう少し REST がメジャーになった方がいいと思っているので、
なんとかできないかなーと最近考えてます。&lt;/p&gt;
&lt;p&gt;[update: 2005-05-14-01]
&lt;a href="http://luckypines.blogspot.com/2005/05/web-services-considered-harmful.html"&gt;吉松さんの感想&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[update: 2005-05-14-02]
&lt;a href="http://www.flickr.com/photos/luckypines/tags/www2005/"&gt;会場の写真(吉松さんの Flickr 撮影者は平野さんみたい)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[update: 2005-05-14-03]
&lt;a href="http://ch.kitaguni.tv/u/5250/XML/Web%a5%b5%a1%bc%a5%d3%a5%b9/0000217086.html"&gt;村田さんの記事&lt;/a&gt; Adam Bosworth のこの採点表はメモしきれなかったところなのでうれしい!&lt;/p&gt;
&lt;p&gt;[update: 2005-05-15]
&lt;a href="http://luckypines.blogspot.com/2005/05/queries-vs-methods.html"&gt;吉松さんのまとめ&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&gt;[update: 2005-05-16]&lt;a href="http://hirano.com/blog/archives/05051353.html"&gt;平野さんのまとめ&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111600133625407165?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www2005.org/panels/abstract.html?#PA09' title='Web Services Considered Harmful?'/><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111600133625407165/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111600133625407165' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111600133625407165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111600133625407165'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/05/web-services-considered-harmful.html' title='Web Services Considered Harmful?'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111590713527046833</id><published>2005-05-12T23:11:00.000+09:00</published><updated>2005-05-28T21:54:32.276+09:00</updated><title type='text'>REST 入門(その8) REST でないもの</title><content type='html'>&lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html"&gt;&amp;#187; REST 入門 目次&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;WWW は REST アーキテクチャスタイルのアーキテクチャを採用した実装のひとつですが、
REST アーキテクチャスタイルでないアーキテクチャの WWW アプリケーションもかなり存在します。
REST でないものを一言で言ってしまうと、 URI と HTTP を正しく使っていないもの、ということになります。
以下では URI と HTTP の誤った使い方について説明します。&lt;/p&gt;


&lt;h4&gt;&lt;a name="building-uri"&gt;URI をクライアントで組み立てる&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;URI をクライアント側でごちょごちょ組み立てなければならないのなら、それは REST ではありません。
たとえば、はてなブックマーク AtomAPI が、こんなインターフェースだったらどうでしょう?
&lt;/p&gt;

&lt;p&gt;ブックマークをキーワードで検索する。&lt;/p&gt;
&lt;pre&gt;
POST /uso/bookmarkSearchService HTTP/1.1
Host: b.hatena.ne.jp
Content-Type: application/xml

&amp;lt;keyword&gt;REST&amp;lt;/keyword&gt;

&lt;/pre&gt;

&lt;p&gt;レスポンスはブックマーク ID のリストになる。&lt;/p&gt;
&lt;pre&gt;
HTTP/1.1 200 OK
Content-Type: application/xml

&amp;lt;resultList&gt;
  &amp;lt;result id="332"/&gt;
  &amp;lt;result id="55"/&gt;
  &amp;lt;result id="9842"/&gt;
  &amp;lt;result id="102944"/&gt;
&amp;lt;/resultList&gt;
&lt;/pre&gt;

&lt;p&gt;クライアントは /resultList/result/@id を見て、ブックマークの ID を知る。
そのブックマークを GET するには、ブックマーク取得サービスに ID をパラメータで渡す。&lt;/p&gt;

&lt;pre&gt;
GET /uso/getBookmark?id=332 HTTP/1.1
Host: b.hatena.ne.jp

&lt;/pre&gt;

&lt;p&gt;なんか、変ですよね。
REST であれば、ここは当然ハイパーリンクで実現すべきです。
&lt;/p&gt;



&lt;h4&gt;&lt;a name="get-uri-action"&gt;GET の濫用、または URI へのアクションの挿入&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;この問題は前節の問題とビミョーに絡んでいます。
例を見てみましょう。
ブックマークを削除するときに以下のような操作をするとします。
オペレーションが削除であることは action パラメータで指定して、
削除するブックマークは id パラメータで指定します。
&lt;/p&gt;

&lt;pre&gt;
GET /uso/bookmarkService?action=delete&amp;amp;id=332 HTTP/1.1

&lt;/pre&gt;

&lt;p&gt;この方式がまずい点は二つあります。
ひとつは前節で述べたとおり URI をクライアントが組み立てなければならない点。
もうひとつはオペレーションを action というパラメータで URI に組み込んでいる点です。
&lt;/p&gt;
&lt;p&gt;
action パラメータを URI に埋め込むのが駄目なのには理由が二つあります。
第一に HTTP メソッドのセマンティクスを正しく利用していない点。
HTTP にはきちんと DELETE メソッドがあります。
しかし、上の例では DELETE を使わずに、GET を使っています。
これは明らかに誤用です。
&lt;/p&gt;
&lt;p&gt;
この例が駄目な二つ目の理由は GET でリソース副作用(side effect)がある操作をしている点です。
GET の重要な性質としてリソースに副作用を与えないということがありました。
しかし、この URI を GET をすると、URI が指定するリソースが削除されてしまいます。
これはセキュリティ上重大な欠陥となる可能性が強い HTTP の誤用です。
少し前に話題だった CSRF の一番典型的なパターンは、この GET の濫用でしょう。
&lt;/p&gt;


&lt;h4&gt;&lt;a name="post"&gt;POST の濫用&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;すでに&lt;a href="http://yohei-y.blogspot.com/2005/04/rest-5-get-post-put-delete.html"&gt;その5&lt;/a&gt;で
POST の濫用については説明しましたので、ここでは簡単に振り返っておきます。
POST は四つの HTTP メソッドの中で一番柔軟なメソッドです。
しかし、HTTP メソッド本来の意味を考えて POST メソッドを利用するのが正しいのは言うまでもありません。 
POST を使うときの経験則として、POST をリソースの新規作成にだけ使う、ことをいつも念頭におきましょう。
&lt;/p&gt;


&lt;h4&gt;&lt;a name="error"&gt;HTTP 状態コードの誤用&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;HTTP の状態コード(ステータスコード)は大切です。
200 とか 404 とか 500 とか 302 あたりが有名ですね。
これらの番号を誤用すると、RESTful になりません。&lt;/p&gt;
&lt;p&gt;たとえば、エラーが起きたときのことを考えましょう。
クライアントのリクエストが悪いのに 500 を返す。
あるいは逆にサーバが悪いのに 40X を返す。
どちらも間違いです。
&lt;/p&gt;
&lt;p&gt;
また、結果は明らかにエラーなのに、エラーメッセージを表示するために 200 を返すのも間違いです。
あるいは、200 を返しながら、拡張 HTTP ヘッダで詳細コードを返す。
どちらも RESTful でありません。
&lt;/p&gt;


&lt;h4&gt;&lt;a name="cookie"&gt;クッキーとセッション&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;REST アーキテクチャスタイルの重要な制約のひとつに&lt;a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_1_3"&gt;ステートレス&lt;/a&gt;があります。
ここでいうステートレスとは、
クライアントとサーバの間の接続が状態を持っていないことを意味します。
もう少し簡単にいうと、
クライアントからサーバに送られるリクエストメッセージには、
サーバがそのメッセージを処理するのに必要な情報がすべて含まれている、ということです。
このようにアーキテクチャの制約としてステートレスを加えると、
サーバ実装の簡略化とスケーラビリティの確保につながります。&lt;/p&gt;
&lt;p&gt;しかし、現実の Web 実装ではそうでないものも多々ありますね。
HTTP をステートフルにする代表格はクッキーを使ったセッション管理です。
REST アーキテクチャスタイルの視点からみると、
クッキーを使ったセッション管理は間違った HTTP の拡張、ということになります。&lt;/p&gt;



&lt;h4&gt;&lt;a name="http-is-not-enough"&gt;HTTP と URI を使うだけでは十分でない&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;今回の話題をまとめると、「HTTP と URI を使うだけでは十分でない」ということに尽きますね。
いかに HTTP と URI を使って XML をやり取りしていても、
間違った使い方であれば、それは REST アーキテクチャスタイルに従った実装ではありません。
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://yohei-y.blogspot.com/2005/05/rest-9-rest-soap.html"&gt;次回&lt;/a&gt;は REST と SOAP の関係を、ほんの少しだけ説明しようと思います。&lt;/p&gt;
&lt;p&gt;P.S. この weblog のタイトルを変更しました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111590713527046833?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111590713527046833/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111590713527046833' title='5 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111590713527046833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111590713527046833'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/05/rest-8-rest.html' title='REST 入門(その8) REST でないもの'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111564914216841855</id><published>2005-05-09T23:28:00.000+09:00</published><updated>2005-05-09T23:32:22.173+09:00</updated><title type='text'>WWW2005</title><content type='html'>今週金曜日、&lt;a href="http://www2005.org/panels/abstract.html#PA09"&gt;これ&lt;/a&gt;を聞きに幕張まで行きます。どなたかこの日記を読んでいて、当日幕張に行きなおかつ REST architectural style に興味があって僕と情報交換してくれる日本語の通じる方は yoheiy at gmail dot com までご連絡ください :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111564914216841855?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www2005.org/panels/abstract.html#PA09' title='WWW2005'/><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111564914216841855/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111564914216841855' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111564914216841855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111564914216841855'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/05/www2005.html' title='WWW2005'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111547301023668377</id><published>2005-05-07T22:30:00.000+09:00</published><updated>2005-05-07T23:17:17.936+09:00</updated><title type='text'>ソーシャルブックマーク雑感</title><content type='html'>&lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html"&gt;REST 入門&lt;/a&gt;はちょっとお休みして、weblog っぽく日々の雑感でも。&lt;/p&gt;
&lt;p&gt;僕は現在 &lt;a href="http://del.icio.us/yohei"&gt;del.icio.us&lt;/a&gt; と&lt;a href="http://b.hatena.ne.jp/yohei/"&gt;はてなブックマーク&lt;/a&gt;を使ってます。
この二つ、いちおう使い分けています。&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;a href="http://del.icio.us/yohei"&gt;del.icio.us&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;自分用。主として英語ページのうち、わりと目に留まって読もうと思ったものをクリップ。
その後読んだ後に感想を追加。後から検索する&lt;/dd&gt;
&lt;dt&gt;&lt;a href="http://b.hatena.ne.jp/yohei/"&gt;はてなブックマーク&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;del.itio.us にポストしたもののうち、コメントがついたものをコピー。
主として自分と同じ興味の人を探すため。今のところ見つけたのはたとえば &lt;a href="http://b.hatena.ne.jp/hiromark/"&gt;hiromark さん&lt;/a&gt;とか&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;a href="http://d.hatena.ne.jp/naoya/20050507/1115455315"&gt;naoya さんのこのポスト&lt;/a&gt;を読んで思ったのは、
そういやカテゴリとかキーワードとかぜんぜん使ってないなーということ。
僕もまさに **users しか使っていなかった。
改めて&lt;a href="http://b.hatena.ne.jp/yohei/"&gt;自分のブックマーク&lt;/a&gt;のカテゴリやキーワードを見てみると、
特に英語系は厳しいですね。&lt;/p&gt;

&lt;p&gt;僕自身としては、del.icio.us のタグは自分のためにつけています。
あとで読み返して必要だったらタグを修正するし。
昔ブックマークしたページを探すのもよくするんですが、その場合はタグを使うことが多い。
で、うまくタグをつけないと見つからないので、苦労します。
苦労して見つけたらタグを修正して次回から見つけやすくする。
そんな風にしているので del.icio.us は自分にとっての財産となりつつあります。&lt;/p&gt;

&lt;p&gt;はてなブックマークはあらかじめ日本語フィルタがかかっているのが大きいですね。
自分と同じ興味の人は日本人が前提で考えているし、日本語記事のブックマーク率は del.icio.us よりも高い。
&lt;a href="http://b.hatena.ne.jp/hotentry"&gt;注目のエントリー&lt;/a&gt;なんか暇つぶしにはもってこいだし。
&lt;a href="http://b.hatena.ne.jp/entrylist?cname=&amp;url=http%3A%2F%2Fyohei-y.blogspot.com
%2F&amp;sort="&gt;自分の日記の反響&lt;/a&gt;が見られるのもうれしい。
&lt;/p&gt;
&lt;p&gt;
それから思うのははてなの財産は人だなということ。
もちろん新しいサービスをどんどん作る中の人もだけど、
それを受けて新しい使い方をどんどん考えてくれるユーザも含めて、
財産(というか価値)なのでしょう。
&lt;/p&gt;

&lt;p&gt;ところで、はてなブックマークの&lt;a href="http://b.hatena.ne.jp/hotentry"&gt;注目のエントリー&lt;/a&gt;が
2ch の&lt;a href="http://d.hatena.ne.jp/keyword/%A5%CB%A5%E5%A1%BC%C2%AE"&gt;ニュー速板&lt;/a&gt;のように見えるのは僕だけ？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111547301023668377?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111547301023668377/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111547301023668377' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111547301023668377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111547301023668377'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/05/blog-post.html' title='ソーシャルブックマーク雑感'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111528449450324566</id><published>2005-05-05T18:13:00.000+09:00</published><updated>2005-07-19T21:54:27.636+09:00</updated><title type='text'>REST 入門(その7) ハイパーメディアの可能性</title><content type='html'>&lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html"&gt;&amp;#187; REST 入門 目次&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://yohei-y.blogspot.com/2005/05/rest-6-xml.html"&gt;前回&lt;/a&gt;は REST で受け渡しされるリソース同士が、
URI を使ったハイパーリンクで相互に結び付けられることによってハイパーメディアを実現し、
その機能拡張には XML 名前空間などが利用できることを説明しました。&lt;/p&gt;

&lt;p&gt;今回はより応用的なハイパーメディアと REST の関係を見ていきたいと思います。
例によってはてなブックマークを使って説明します。&lt;/p&gt;

&lt;h4 id="resource-uri"&gt;リソースの URI はひとつではない&lt;/h4&gt;
&lt;p&gt;現状のはてなブックマークでは、
ひとつのブックマークエントリ(リソース)の URI 
は僕が知る限り以下の三つがあります。&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;ブックマーク一覧&lt;/dt&gt;
&lt;dd&gt;http://b.hatena.ne.jp/yohei/20050429#187800&lt;/dd&gt;
&lt;dt&gt;人間用 Edit URI&lt;/dt&gt;
&lt;dd&gt;http://b.hatena.ne.jp/yohei/edit?eid=187800&lt;/dd&gt;
&lt;dt&gt;Atom API 用 Edit URI&lt;/dt&gt;
&lt;dd&gt;http://b.hatena.ne.jp/atom/edit/187800&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;このうち、一覧の URI は少し毛色が違いますが、
人間用および Atom API 用 EditURI は同じリソースを指していると考えて問題ないでしょう。
このようにひとつのリソースが URI を複数持つというのは珍しいことではありません。&lt;/p&gt;

&lt;h4 id="link-both"&gt;同じリソースの別の URI にリンクしてみる&lt;/h4&gt;
&lt;p&gt;ただ、現状では人間用と Atom API 用がお互いに無関係なのが少しさみしいですね。
以下のようにお互いの表現(representation)がリンクしていたらどうでしょうか。&lt;/p&gt;

&lt;pre&gt;
人間用 http://b.hatena.ne.jp/yohei/edit?eid=187800

&amp;lt;html&gt;
&amp;lt;head&gt;
&amp;lt;title&gt;はてなブックマーク - 傭兵ブックマーク&amp;lt;/title&gt;
&amp;lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
&amp;lt;link rel="stylesheet" type="text/css" href="/yohei/style" /&gt;
&lt;span style="color: red;"&gt;&amp;lt;link rel="service.edit" type="application/atom+xml" 
    title="ブックマークの編集"
    href="http://b.hatena.ne.jp/atom/edit/187800" /&gt;&lt;/span&gt;
&amp;lt;/head&gt;
&amp;lt;body&gt;
...
&amp;lt;/body&gt;
&amp;lt;/html&gt;
&lt;/pre&gt;

&lt;pre&gt;
Atom API 用 http://b.hatena.ne.jp/atom/edit/187800

&amp;lt;entry xmlns="http://purl.org/atom/ns#"&gt;
  &amp;lt;title&gt;何はなくとも XML InfoSet: アウトプットの定義&amp;lt;/title&gt;
  &amp;lt;link rel="related" type="text/html" 
      href="http://luckypines.blogspot.com/2005/04/blog-post_28.html" /&gt;
  &amp;lt;link rel="alternate" type="text/html" 
      href="http://b.hatena.ne.jp/yohei/20050429#187800" /&gt;
  &lt;span style="color: red;"&gt;&amp;lt;link rel="alternate" type="text/html" 
      href="http://b.hatena.ne.jp/yohei/edit?eid=187800" /&gt;&lt;/span&gt;
  &amp;lt;link rel="service.edit" type="application/x.atom+xml" 
      href="http://b.hatena.ne.jp/atom/edit/187800" 
      title="何はなくとも XML InfoSet: アウトプットの定義" /&gt;
  &amp;lt;author&gt;
    &amp;lt;name&gt;yohei&amp;lt;/name&gt;
  &amp;lt;/author&gt;
  &amp;lt;generator url="http://b.hatena.ne.jp/" version="0.1"
    &gt;Hatena::Bookmark&amp;lt;/generator&gt;
  &amp;lt;issued&gt;2005-04-29T20:00:05+09:00&lt;/issued&gt;
  &amp;lt;id&gt;tag:hatena.ne.jp,2005:bookmark-yohei-187800&amp;lt;/id&gt;
  &amp;lt;summary type="text/plain"
    &gt;一連の議論の中で一番共感しました。脳みそへのインターフェース&amp;lt;/summary&gt;
&amp;lt;/entry&gt;
&lt;/pre&gt;


&lt;h4 id="uri-portability"&gt;URI の可搬性&lt;/h4&gt;
&lt;p&gt;リンクするとうれしいことはいろいろあると思うのですが、
たとえば僕はこんなことを考えました。&lt;/p&gt;

&lt;p&gt;はてなブックマークの専用クライアントがあるとします。
ブックマークの編集操作をしたり、ブックマークエントリを他の blog 
にポストしたり、別のソーシャルブックマークサービスにコピーしたりする機能を持っています。
ただ、そのままだと専用クライアントは通常あまり使いません。
なぜかというと Web を閲覧するのは Web ブラウザでするし、
ブックマークするのも bookmarklet でできるからです。
専用クライアントを使うのはせいぜいブックマークの大量削除などのときくらいでしょう。&lt;/p&gt;

&lt;p&gt;しかし、たとえばこんな使い方ができたらどうでしょうか。
ブラウザと同じように、専用クライアントも URI 欄(アドレス欄)を持っているとします。
ブラウザで表示しているはてなブックマークの URI 
をコピーして専用クライアントに貼り付けられます。
すると、その URI で特定されるブックマークエントリに対して、
その専用クライアントで可能な操作が一覧される。
あるいはあらかじめ操作を選んでおいて、
URI を貼り付けるとはてなブックマークのエントリが 
del.icio.us と spurl に自動的にコピーされる。&lt;/p&gt;

&lt;p&gt;ブックマークエントリリソースの表現が相互にリンクされていれば、
このプログラムの実装は簡単です。
専用クライアントは渡された URI を HTTP GET します。
返ってくる内容の Content-Type が text/html であれば、
/html/head/link[@rel="service.edit"]/@href を検索し(こんなの XPath で一発ですね)
EditURI を GET すればプログラムで扱いやすい 
XML 形式のリソースの表現が取得できるからです。
あとは、得られた情報を適切に操作するだけです。&lt;/p&gt;

&lt;p&gt;URI のコピーアンドペーストは最も原始的なリンクだといえます。
手作業でのコピペはダサいんですが、
これを自動化するのは簡単でしょう。
専用クライアントがブラウザの拡張プログラムであれば、
リンク選択時の右クリックメニューに「専用プログラムへ渡す」
という項目を追加するだけです。
この機能はハイパーリンクに他なりません。&lt;/p&gt;

&lt;p&gt;このように、 URI だけでアプリケーション連携を実現できるのが REST(WWW) 
アーキテクチャスタイルの素晴らしい点です。
これはいわゆる疎結合(loosely-coupled)という性質です。&lt;/p&gt;


&lt;h4 id="content-negotiation"&gt;コンテントネゴシエーションによるソリューション&lt;/h4&gt;

&lt;p&gt;前節の URI コピペの実装には別の方法もあります。
HTTP のコンテントネゴシエーションを使う方法です。
これは同じ URI でも、クライアントが指定した Content-Type 
のリソース表現を返すというものです。&lt;/p&gt;

&lt;p&gt;例を見てみましょう。
専用クライアントは、人間用 URI に以下のリクエストを発行します。&lt;/p&gt;

&lt;pre&gt;
GET /yohei/edit?eid=187800 HTTP/1.1
Host: b.hatena.ne.jp
Accept: application/x.atom+xml; q=1.0, text/html; q=0.8, */*; q=0.1

&lt;/pre&gt;

&lt;p&gt;サーバは Accept ヘッダを解析することで、
クライアントが必要としているのが HTML よりも Atom 形式であることがわかります。&lt;/p&gt;

&lt;p&gt;このように実装してあると、
ブラウザで表示している URI と専用クライアントが操作する URI がまったく同じになります。
ただし、クライアント側の選択で、転送されるリソースの表現が
HTML になったり、Atom になったりします。&lt;/p&gt;


&lt;h4 id="xhtml"&gt;XHTML によるソリューション&lt;/h4&gt;

&lt;p&gt;実はさらに別の方法も考えられるのです。
それはブックマークリソースが返す表現を XHTML にして、
head 要素の中に Atom の XML を丸ごと入れてしまう方法です。
このようにすれば、そもそも表現自体をクライアントごとに分ける必要もなく、
ただひとつの URI で済ませることができるでしょう。&lt;/p&gt;


&lt;h4 id="session-problems"&gt;まとめと課題&lt;/h4&gt;
&lt;p&gt;これまで見てきたように、URI と HTTP 
を組み合わせたハイパーメディアにはいろいろな可能性がありそうです。
さらに XML/XHTML を組み合われば、
ブラウザとそれ以外の専用アプリ(あるいはブラウザの拡張)が
自由に連携できそうです。
&lt;/p&gt;
&lt;p&gt;しかし、現実はそれほど甘くありません。
きちんと REST アーキテクチャスタイルの制約に従ったアーキテクチャの
Web アプリケーションであれば、
あまり問題なく XML を使った RESTful な Web サービスを提供できるでしょう。
しかし世の中にはそうでない Web アプリケーション実装が多いのも事実です。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://yohei-y.blogspot.com/2005/05/rest-8-rest.html"&gt;次回&lt;/a&gt;は REST アーキテクチャスタイルに反する Web 
の実装を見ていこうと思います(連休中に書ききれるかと思ったけど無理っぽいなー)。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111528449450324566?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111528449450324566/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111528449450324566' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111528449450324566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111528449450324566'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/05/rest-7.html' title='REST 入門(その7) ハイパーメディアの可能性'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111522172313447315</id><published>2005-05-05T00:47:00.000+09:00</published><updated>2005-05-05T18:17:37.370+09:00</updated><title type='text'>REST 入門(その6) ハイパーリンクと XML</title><content type='html'>&lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html"&gt;&amp;#187; REST 入門 目次&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://yohei-y.blogspot.com/2005/04/rest-5-get-post-put-delete.html"&gt;前回&lt;/a&gt;、はてなブックマークを例にリソースと四つの HTTP メソッド (GET, POST, PUT, DELETE) 
の関係について解説しました。
今回は、リソース同士をどのように関連付けるか、について解説します。&lt;/p&gt;
&lt;p&gt;前回の記事でこんな疑問を持った人はいなかったでしょうか。&lt;/p&gt;
&lt;p&gt;ひとつのブックマークリソースにいろいろなメソッドを適用しているけれど、
そのブックマークリソースにはいったいどうやってたどり着くのか。&lt;/p&gt;
&lt;p&gt;たとえば PostURI に POST して新規作成したブックマークを全部覚えておけば、
それぞれのリソースの URI はわかります。
しかしそれではソーシャルブックマークサービスを使う意味がありません。
ローカルディスクまたはローカルサーバに保存しておくのではブックマークを共有することができないし、
そもそも自分以外の人のブックマークにアクセスできないのでは、
ソーシャルブックマークとは言えません。
残念ながら、現状の&lt;a href="http://d.hatena.ne.jp/keyword/%a4%cf%a4%c6%a4%ca%a5%d6%a5%c3%a5%af%a5%de%a1%bc%a5%afAtomAPI"&gt;はてなブックマーク AtomAPI&lt;/a&gt; は、以下の操作しか提供されていません。&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;新規ブックマークの投稿 (PostURI への POST)&lt;/li&gt;
&lt;li&gt;投稿したブックマークのタイトル、コメントの変更 (EditURI への PUT)&lt;/li&gt;
&lt;li&gt;投稿したブックマークの削除 (EditURI への DELETE)&lt;/li&gt;
&lt;li&gt;投稿したブックマークの参照 (EditURI への GET)&lt;/li&gt;
&lt;li&gt;最近投稿したブックマークの一覧の取得 (FeedURI への GET)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;他のユーザのブックマークを閲覧することもできないし、
そもそも自分が登録したブックマークの一覧を全部取得することもできません。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://d.hatena.ne.jp/keyword/%a4%cf%a4%c6%a4%ca%a5%d6%a5%c3%a5%af%a5%de%a1%bc%a5%afAtomAPI?kid=104141"&gt;はてなブックマーク AtomAPI&lt;/a&gt; はまだ発展途上のサービスなので、機能不足なのは仕方ありませんが、
REST とハイパーメディアの関係を語るにはちょっとさみしいのも事実です。
以下では、&lt;a href="http://d.hatena.ne.jp/keyword/%a4%cf%a4%c6%a4%ca%a5%d6%a5%c3%a5%af%a5%de%a1%bc%a5%afAtomAPI?kid=104141"&gt;はてなブックマーク AtomAPI&lt;/a&gt; にない機能を独自に拡張しながら、
REST とハイパーメディア、それから XML の関係を解説します。&lt;/p&gt;

&lt;h4 id="hyperlink"&gt;リソースの関連付け -- ハイパーリンク&lt;/h4&gt;
&lt;p&gt;REST ではリソース同士の関係をハイパーリンクで記述します。
たとえば、自分が「最近登録したブックマークのリスト」というリソースの URI は&lt;/p&gt;

&lt;pre&gt;
http://b.hatena.ne.jp/atom/feed
&lt;/pre&gt;

&lt;p&gt;になります。 
この URI を GET してみましょう。&lt;/p&gt;

&lt;pre&gt;
GET /atom/feed HTTP/1.1
Host: b.hatena.ne.jp
X-WSSE: UsernameToken Username="yohei",...
&lt;/pre&gt;
&lt;pre&gt;
HTTP/1.1 200 OK
Content-Type: application/x.atom+xml

&amp;lt;feed version="0.3" 
      xmlns="http://purl.org/atom/ns#"
      xml:lang="ja"&gt;
  &amp;lt;title&gt;傭兵ブックマーク&amp;lt;/title&gt;
  &amp;lt;link rel="alternate" type="text/html" href="http://b.hatena.ne.jp/yohei/" /&gt;
  &amp;lt;link rel="service.post" type="application/x.atom+xml"
      href="http://b.hatena.ne.jp/atom/post" title="傭兵ブックマーク" /&gt;
  &amp;lt;modified&gt;2005-04-29T21:43:51+09:00&amp;lt;/modified&gt;
  &amp;lt;author&gt;
    &amp;lt;name&gt;yohei&amp;lt;/name&gt;
  &amp;lt;/author&gt;
  &amp;lt;id&gt;tag:hatena.ne.jp,2005:bookmark-yohei&amp;lt;/id&gt;
  &amp;lt;generator url="http://b.hatena.ne.jp/" version="0.1"&gt;Hatena::Bookmark&amp;lt;/generator&gt;
  
  &amp;lt;entry&gt;
    &amp;lt;title&gt;何はなくとも XML InfoSet: アウトプットの定義&amp;lt;/title&gt;
    &amp;lt;link rel="related" type="text/html"
        href="http://luckypines.blogspot.com/2005/04/blog-post_28.html" /&gt;
    &amp;lt;link rel="alternate" type="text/html"
        href="http://b.hatena.ne.jp/yohei/20050429#187800" /&gt;
    &amp;lt;link rel="service.edit" type="application/x.atom+xml"
        href="http://b.hatena.ne.jp/atom/edit/187800"
        title="何はなくとも XML InfoSet: アウトプットの定義" /&gt;
    &amp;lt;issued&gt;2005-04-29T20:00:05+09:00&lt;/issued&gt;
    &amp;lt;author&gt;
      &amp;lt;name&gt;yohei&amp;lt;/name&gt;
    &amp;lt;/author&gt;
    &amp;lt;id&gt;tag:hatena.ne.jp,2005:bookmark-yohei-187800&amp;lt;/id&gt;
    &amp;lt;summary type="text/plain"
      &gt;一連の議論の中で一番共感しました。脳みそへのインターフェース&amp;lt;/summary&gt;
  &amp;lt;/entry&gt;
...
&amp;lt;/feed&gt;
&lt;/pre&gt;
&lt;p&gt;レスポンスは Atom で定義されるいわゆる Atom フィードになります。
このフィードには最近登録したブックマークが 20 件入っています。
フィードに含まれるそれぞれのエントリには link 要素によって表現される
ハイパーリンクがいくつか含まれます。&lt;/p&gt;
&lt;p&gt;もっとも重要なリンクは &lt;a href="http://d.hatena.ne.jp/keyword/%a4%cf%a4%c6%a4%ca%a5%d6%a5%c3%a5%af%a5%de%a1%bc%a5%afAtomAPI?kid=104141#p8"&gt;EditURI&lt;/a&gt; へのリンクです。&lt;/p&gt;
&lt;pre&gt;
&amp;lt;link rel="service.edit" type="application/x.atom+xml"
    href="http://b.hatena.ne.jp/atom/edit/187800"
    title="何はなくとも XML InfoSet: アウトプットの定義" /&gt;
&lt;/pre&gt;

&lt;p&gt;前回、いろいろと操作したブックマークリソースの URI がこの &lt;a href="http://d.hatena.ne.jp/keyword/%a4%cf%a4%c6%a4%ca%a5%d6%a5%c3%a5%af%a5%de%a1%bc%a5%afAtomAPI?kid=104141#p8"&gt;EditURI&lt;/a&gt; になります。&lt;/p&gt;

&lt;p&gt;その他にもリンクがあります。
一つ目は、このブックマークのターゲット、
ブックマークした Web ページへのリンクです。&lt;/p&gt;

&lt;pre&gt;
&amp;lt;link rel="related" type="text/html"
    href="http://luckypines.blogspot.com/2005/04/blog-post_28.html" /&gt;
&lt;/pre&gt;

&lt;p&gt;もうひとつは、このブックマークリソースの HTML 表現、
つまり人間用の Web ページへのリンクです。&lt;/p&gt;

&lt;pre&gt;
&amp;lt;link rel="alternate" type="text/html"
    href="http://b.hatena.ne.jp/yohei/20050429#187800" /&gt;
&lt;/pre&gt;

&lt;p&gt;それぞれのリンクは、別のリソースの URI を指定していますので、
リソースに HTTP メソッドを適用することができます。
どの HTTP メソッドを適用できるかは仕様しだいです。
たとえば &lt;a href="http://d.hatena.ne.jp/keyword/%a4%cf%a4%c6%a4%ca%a5%d6%a5%c3%a5%af%a5%de%a1%bc%a5%afAtomAPI?kid=104141#p8"&gt;EditURI&lt;/a&gt; であれば、GET/PUT/DELETE が適用できることが、
明記されています。&lt;/p&gt;


&lt;h4 id="history"&gt;過去のブックマークの取得&lt;/h4&gt;
&lt;p&gt;前節で解説した FeedURI は現状のはてなブックマーク AtomAPI でサポートされている機能です。
しかし、現在のフィードの実装では最新の20件しか取得することができません。
それ以前のブックマークを取得する方法を検討してみましょう。&lt;/p&gt;
&lt;p&gt;この目的を達成するにはいくつかの方法が考えられると思いますが、
今回は検索インターフェースをつける方法をご紹介します。&lt;/p&gt;
&lt;p&gt;ここで登場するリソースは、「検索結果」リソースです。
検索結果リソースはこれまでみてきたリソースとは少し趣が異なります。
たとえばキーワード "REST" を検索した検索結果の URI は以下のようになります。&lt;/p&gt;
&lt;pre&gt;
http://b.hatena.ne.jp/atom/search?q=REST
&lt;/pre&gt;
&lt;p&gt;また、キーワード "XML" を検索した検索結果の URI は以下のようになります。&lt;/p&gt;
&lt;pre&gt;
http://b.hatena.ne.jp/atom/search?q=XML
&lt;/pre&gt;
&lt;p&gt;サンプルで明らかだと思いますが、重要なのは URI の "?q=" の部分です。
これは問合せ文字列(query string)と呼びます。
通常 URI はクライアントで構築することはありませんが、
この問合せ文字列だけはクライアント側で操作することができます。
その結果生成された URI はそのキーワードの検索結果の URI を示します。&lt;/p&gt;
&lt;p&gt;空文字列のキーワードも許可するように実装すれば、
これまで自分が登録したブックマークをすべて含む検索結果のリソースを特定する 
URI を作ることもできます。&lt;/p&gt;
&lt;p&gt;多くの場合、検索結果は膨大な件数になります。
そのため結果を複数に分けるいわゆるページング処理が必要となります。
分割された結果一つ一つがそれぞれリソースとなります。
21番目の結果から20件を表現するリソースの URI はたとえば以下のようになります。
&lt;/p&gt;
&lt;pre&gt;
http://b.hatena.ne.jp/atom/search?q=REST&amp;amp;start=21&amp;amp;num=20
&lt;/pre&gt;
&lt;p&gt;同様の情報を検索結果リソース自身にも入れましょう。
XML 名前空間を使えば、標準以外の情報を Atom フィードに組み込むのは簡単です。
都合のよいことに、&lt;a 
href="http://opensearch.a9.com/spec/opensearchrss/1.0/"&gt;OpenSearch RSS&lt;/a&gt; 
という規格で、この用途にぴったりのタグを規定してくれています。&lt;/p&gt;

&lt;pre&gt;
GET /atom/search?q=REST&amp;amp;start=1&amp;amp;num=20 HTTP/1.1
Host: b.hatena.ne.jp
X-WSSE: UsernameToken Username="yohei",...

&lt;/pre&gt;
&lt;pre&gt;
HTTP/1.1 200 OK
Content-Type: application/x.atom+xml

&amp;lt;feed version="0.3" 
      xmlns="http://purl.org/atom/ns#"
      xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/"
      xml:lang="ja"&gt;
  &amp;lt;title&gt;傭兵ブックマーク&amp;lt;/title&gt;
  &amp;lt;link rel="alternate" type="text/html" href="http://b.hatena.ne.jp/yohei/" /&gt;
  &amp;lt;link rel="service.post" type="application/x.atom+xml"
      href="http://b.hatena.ne.jp/atom/post" title="傭兵ブックマーク" /&gt;
  &amp;lt;modified&gt;2005-04-29T21:43:51+09:00&amp;lt;/modified&gt;
  &amp;lt;author&gt;
    &amp;lt;name&gt;yohei&amp;lt;/name&gt;
  &amp;lt;/author&gt;
  &amp;lt;id&gt;tag:hatena.ne.jp,2005:bookmark-yohei&amp;lt;/id&gt;
  &amp;lt;generator url="http://b.hatena.ne.jp/" version="0.1"&gt;Hatena::Bookmark&amp;lt;/generator&gt;
  &amp;lt;openSearch:totalResults&gt;24&amp;lt;/openSearch:totalResults&gt;
  &amp;lt;openSearch:startIndex&gt;1&amp;lt;/openSearch:startIndex&gt;
  &amp;lt;openSearch:itemsPerPage&gt;20&amp;lt;/openSearch:itemsPerPage&gt;
...
&amp;lt:/feed&gt;
&lt;/pre&gt;
&lt;p&gt;あまり詳しく説明しませんが、この検索結果は24件あって、
そのうちここでは1番から20件分を表示している、ということになります。
21番から24番までの検索結果のリソースへのリンクをつけてもよいのですが、
openSearch には適当なタグがなかったのでしていません。
とりあえずクライアント側で問合せ文字列を構築することで対応できます。&lt;/p&gt;

&lt;p&gt;なんだか長くなってしまったので、今回はここまで。
&lt;a href="http://yohei-y.blogspot.com/2005/05/rest-7.html"&gt;次回&lt;/a&gt;も続けて、今度はもっと応用的な REST 
におけるハイパーリンクとハイパーメディアの可能性について解説したいと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111522172313447315?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111522172313447315/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111522172313447315' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111522172313447315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111522172313447315'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/05/rest-6-xml.html' title='REST 入門(その6) ハイパーリンクと XML'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111475378985175687</id><published>2005-04-29T14:48:00.000+09:00</published><updated>2007-09-22T00:19:04.735+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='http'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><title type='text'>REST 入門(その5) 四つの動詞 -- GET, POST, PUT, DELETE</title><content type='html'>&lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html"&gt;&amp;#187; REST 入門 目次&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;前回、URI で特定できるリソースに HTTP の GET という動詞を適用して、
ある時点・条件での状態の表現を転送するのが REST だという説明をしました。
URI (名詞)に適用できる動詞は GET だけではありません。&lt;/p&gt;
&lt;p&gt;今回は GET 以外の三つの動詞を紹介します。&lt;/p&gt;

&lt;h4&gt;&lt;a name="premise"&gt;前提知識&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;ここでは実際に稼動している REST 実装の例として&lt;a 
href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%D6%A5%C3%A5%AF%A5%DE%A1%BC%A5%AFAtomAPI"
&gt;はてなブックマーク AtomAPI&lt;/a&gt; を使います。
&lt;a href="http://b.hatena.ne.jp/"&gt;はてなブックマーク&lt;/a&gt;そのものの説明はしませんので、あらかじめご了承ください。&lt;/p&gt;

&lt;p&gt;はてなブックマークに登録したひとつのブックマークを考えてみてください。
このひとつのブックマークエントリが、対象のリソースになります。
たとえば &lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html"&gt;REST 入門の目次&lt;/a&gt;をブックマークしたとします。
このブックマークの URI は http://b.hatena.ne.jp/atom/edit/175062 です。
まずは GET してみましょう。&lt;/p&gt;

&lt;pre&gt;
GET /atom/edit/175062 HTTP/1.1
Host: b.hatena.ne.jp
X-WSSE: UsernameToken Username="yohei", ...

&lt;/pre&gt;

&lt;pre&gt;
HTTP/1.1 200 OK
Content-Type: application/x.atom+xml

&amp;lt;entry xmlns="http://purl.org/atom/ns#"&gt;
  &amp;lt;title&gt;傭兵日記: REST 入門&amp;lt;/title&gt;
  &amp;lt;link rel="related" type="text/html"
      href="http://yohei-y.blogspot.com/2005/04/rest_23.html" /&gt;
  &amp;lt;link rel="alternate" type="text/html"
      href="http://b.hatena.ne.jp/yohei/20050424#175062" /&gt;
  &amp;lt;link rel="service.edit" type="application/x.atom+xml"
    href="http://b.hatena.ne.jp/atom/edit/175062" title="傭兵日記: REST 入門" /&gt;
  &amp;lt;author&gt;
    &amp;lt;name&gt;yohei&amp;lt;/name&gt;
  &amp;lt;/author&gt;
  &amp;lt;generator url="http://b.hatena.ne.jp/" version="0.1"
    &gt;Hatena::Bookmark&amp;lt;/generator&gt;
  &amp;lt;issued&gt;2005-04-24T:14:46:00+9:00&amp;lt;/issued&gt;
  &amp;lt;id&gt;tag:hatena.ne.jp,2005:bookmark-sample-175062&amp;lt;/id&gt;
  &amp;lt;summary type="text/plain"&gt;REST の入門&amp;lt;/summary&gt;
&amp;lt;/entry&gt;
&lt;/pre&gt;

&lt;p&gt;実際にはてなブックマークから GET するには認証用の 
X-WSSE ヘッダが必要なことに注意してください。
また、レスポンスに含まれるのは HTML ではなく XML 形式のブックマークとなります。
XML に含まれる情報で重要なのは title 要素と summary 要素になります。
summary 要素はいわゆる「コメント」です。&lt;/p&gt;
&lt;p&gt;以下では、このブックマークエントリ(リソース)の URI に、
GET 以外の HTTP メソッドを適用してみます。&lt;/p&gt;

&lt;h4&gt;&lt;a name="put"&gt;リソースを更新 -- PUT&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;一度は登録したけれど、つけたコメントが気に入らないので修正したいとします。
こんなときは HTTP の PUT メソッドを使います。PUT リクエストはこのようになります。&lt;/p&gt;
&lt;pre&gt;
PUT /atom/edit/175062 HTTP/1.1
Host: b.hatena.ne.jp
Content-Type: application/x.atom+xml
X-WSSE: UsernameToken Username="yohei", ...

&amp;lt;entry xmlns="http://purl.org/atom/ns#"&gt;
  &amp;lt;summary type="text/plain"
    &gt;REST(Representational State Transfer) の入門&amp;lt;/summary&gt;
&amp;lt;/entry&gt;
&lt;/pre&gt;
&lt;p&gt;PUT のレスポンスはこのようになります。&lt;/p&gt;
&lt;pre&gt;
HTTP/1.1 200 OK

&lt;/pre&gt;
&lt;p&gt;今、更新した URI を再度 GET することができます。&lt;/p&gt;
&lt;pre&gt;
GET /atom/edit/175062 HTTP/1.1
Host: b.hatena.ne.jp
X-WSSE: UsernameToken Username="yohei", ...

&lt;/pre&gt;
&lt;p&gt;取得される XML は、コメントが修正されたものになっているはずです。&lt;/p&gt;
&lt;pre&gt;
HTTP/1.1 200 OK
Content-Type: application/x.atom+xml

&amp;lt;entry xmlns="http://purl.org/atom/ns#"&gt;
  &amp;lt;title&gt;傭兵日記: REST 入門&amp;lt;/title&gt;
  &amp;lt;link rel="related" type="text/html"
      href="http://yohei-y.blogspot.com/2005/04/rest_23.html" /&gt;
  &amp;lt;link rel="alternate" type="text/html"
      href="http://b.hatena.ne.jp/yohei/20050424#175062" /&gt;
  &amp;lt;link rel="service.edit" type="application/x.atom+xml"
    href="http://b.hatena.ne.jp/atom/edit/175062" title="傭兵日記: REST 入門" /&gt;
  &amp;lt;author&gt;
    &amp;lt;name&gt;yohei&amp;lt;/name&gt;
  &amp;lt;/author&gt;
  &amp;lt;generator url="http://b.hatena.ne.jp/" version="0.1"
    &gt;Hatena::Bookmark&amp;lt;/generator&gt;
  &amp;lt;issued&gt;2005-04-24T:14:46:00+9:00&amp;lt;/issued&gt;
  &amp;lt;id&gt;tag:hatena.ne.jp,2005:bookmark-sample-175062&amp;lt;/id&gt;
  &amp;lt;summary type="text/plain"
    &gt;REST(Representational State Transfer) の入門&amp;lt;/summary&gt;
&amp;lt;/entry&gt;
&lt;/pre&gt;


&lt;h4&gt;&lt;a name="delete"&gt;リソースを削除 -- DELETE&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;ブックマークを削除したい場合は DELETE メソッドを使います。&lt;/p&gt;
&lt;pre&gt;
DELETE /atom/edit/175062 HTTP/1.1
Host: b.hatena.ne.jp
X-WSSE: UsernameToken Username="yohei", ...

&lt;/pre&gt;
&lt;pre&gt;
HTTP/1.1 200 OK

&lt;/pre&gt;
&lt;p&gt;DELETE が成功すると、同じ URI を再度 GET することはできません。&lt;/p&gt;
&lt;pre&gt;
GET /atom/edit/175062 HTTP/1.1
Host: b.hatena.ne.jp
X-WSSE: UsernameToken Username="yohei", ...

&lt;/pre&gt;
&lt;p&gt;レスポンスは HTTP エラーになります。&lt;/p&gt;
&lt;pre&gt;
HTTP/1.1 404 Not Found

&lt;/pre&gt;

&lt;h4&gt;&lt;a name="post"&gt;リソースを新規作成 -- POST&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;先ほどのブックマーク、消してしまったけれどやっぱり元に戻したいとします。
そんなときは POST でブックマークリソースを新規に作成します。
でも、どの URI に POST したらよいのでしょうか。
リソースを新規に作成するわけですから、リソース自体がまだ存在せず、
したがって URI もありません。&lt;/p&gt;
&lt;p&gt;こういう時はリソースを新規作成するためのリソースを用意します。
はてなブックマークではこのリソースの URI を &lt;a href="http://d.hatena.ne.jp/keyword/%a4%cf%a4%c6%a4%ca%a5%d6%a5%c3%a5%af%a5%de%a1%bc%a5%afAtomAPI?kid=104141#p7"&gt;PostURI&lt;/a&gt; と呼んでいます。
それでは POST してみましょう。
&lt;/p&gt;
&lt;pre&gt;
POST /atom/post HTTP/1.1
Host: b.hatena.ne.jp
X-WSSE: UsernameToken Username="yohei", ...

&amp;lt;entry xmlns="http://purl.org/atom/ns#"&gt;
  &amp;lt;link rel="related" type="text/html"
      href="http://yohei-y.blogspot.com/2005/04/rest_23.html" /&gt;
  &amp;lt;summary type="text/plain"
    &gt;REST(Representational State Transfer) の入門&amp;lt;/summary&gt;
&amp;lt;/entry&gt;
&lt;/pre&gt;
&lt;p&gt;正常に受け付けられると以下のようなレスポンスが返ってきます。&lt;/p&gt;
&lt;pre&gt;
HTTP/1.1 201 OK
Content-Type: application/x.atom+xml
Location: http://b.hatena.ne.jp/atom/edit/xxxx

&amp;lt;entry xmlns="http://purl.org/atom/ns#"&gt;
  &amp;lt;title&gt;傭兵日記: REST 入門&amp;lt;/title&gt;
  &amp;lt;link rel="related" type="text/html"
      href="http://yohei-y.blogspot.com/2005/04/rest_23.html" /&gt;
  &amp;lt;link rel="alternate" type="text/html"
      href="http://b.hatena.ne.jp/yohei/20050424#xxxx" /&gt;
  &amp;lt;link rel="service.edit" type="application/x.atom+xml"
    href="http://b.hatena.ne.jp/atom/edit/xxxx" title="傭兵日記: REST 入門" /&gt;
  &amp;lt;author&gt;
    &amp;lt;name&gt;yohei&amp;lt;/name&gt;
  &amp;lt;/author&gt;
  &amp;lt;generator url="http://b.hatena.ne.jp/" version="0.1"
    &gt;Hatena::Bookmark&amp;lt;/generator&gt;
  &amp;lt;issued&gt;2005-04-24T:17:46:00+9:00&amp;lt;/issued&gt;
  &amp;lt;id&gt;tag:hatena.ne.jp,2005:bookmark-sample-xxxx&amp;lt;/id&gt;
  &amp;lt;summary type="text/plain"
    &gt;REST(Representational State Transfer) の入門&amp;lt;/summary&gt;
&amp;lt;/entry&gt;
&lt;/pre&gt;
&lt;p&gt;レスポンスには Location ヘッダがあります。
これが新規作成されたリソースの URI になります。&lt;/p&gt;
&lt;p&gt;POST メソッドは、その自由度の高さから、濫用される傾向にあります。
実際には GET, PUT, DELETE で行えることも、POST でできてしまうのです。
しかし、HTTP メソッド本来の意味を考えて POST メソッドを利用するのが正しいのは言うまでもありません。
POST を使うときの経験則として、POST をリソースの新規作成にだけ使う、
というものがあります。新しいリソースを POST する、と覚えましょう。
&lt;a href="http://www.prescod.net/"&gt;Paul Prescod&lt;/a&gt; の 
"&lt;a href="http://www.prescod.net/rest/mistakes/"&gt;Common REST Mistakes&lt;/a&gt;" の2番がこれに該当します。&lt;/p&gt;

&lt;h4&gt;&lt;a name="conclusion"&gt;まとめ&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;今回の POST, PUT, DELETE と、前回の GET はある点で大きく異なります。
それは GET がリソースの状態に影響を与えないのに対して、
それ以外の三つの動詞がリソースの状態に何らかの影響を与える可能性がある点です。
このような性質を副作用(side effect)といいます。
副作用のない GET はキャッシュという大きな可能性を持つことになります。
キャッシュについては機会があれば説明しようと思います。&lt;/p&gt;

&lt;p&gt;これまでの内容をまとめると以下のようになります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GET はリソースを取得するメソッド&lt;/li&gt;
&lt;li&gt;PUT はリソースを更新するメソッド&lt;/li&gt;
&lt;li&gt;DELETE はリソースを削除するメソッド&lt;/li&gt;
&lt;li&gt;POST はリソースを新規作成するメソッド&lt;/li&gt;
&lt;li&gt;GET はリソースに副作用を与えない&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;REST では、リソースを操作するインターフェースにはこの四つのメソッドしかありません。
getXx() も setXx() も startXx() も createXx() もないのです。
これは REST アーキテクチャスタイルの持つ大きな制約のひとつ、
統一インターフェース(uniform interface)です。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://yohei-y.blogspot.com/2005/05/rest-6-xml.html"&gt;次回&lt;/a&gt;は、Web の最大の特徴であるリンクと REST の関係について解説したいと思います。&lt;/p&gt;
&lt;p&gt;[update 2005-05-22] &lt;a href="http://yohei-y.blogspot.com/2005/05/rest-2-post-put.html"&gt;POST と PUT についての記事&lt;/a&gt;を追加しました。&lt;/p&gt;
&lt;p&gt;[update 2007-09-21] &lt;a href="http://yohei-y.blogspot.com/2007/07/app.html"&gt;2007年7月に Atom Publishing Protocol は標準化作業が終了しました&lt;/a&gt;。また、その技術解説を &lt;a href="http://yohei-y.blogspot.com/2007/08/atompub-tim-bray-dave-thomas-t-webdb.html"&gt;WEB+DB PRESS Vol.40 に書いています&lt;/a&gt;。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111475378985175687?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111475378985175687/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111475378985175687' title='5 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111475378985175687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111475378985175687'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/04/rest-5-get-post-put-delete.html' title='REST 入門(その5) 四つの動詞 -- GET, POST, PUT, DELETE'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111460211516780700</id><published>2005-04-27T20:40:00.000+09:00</published><updated>2007-09-22T00:19:25.718+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='architecturalstyle'/><title type='text'>REST 入門(補足) アーキテクチャとアーキテクチャスタイル</title><content type='html'>&lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html"&gt;&amp;#187; REST 入門 目次&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;僕の説明だと、どうもアーキテクチャとアーキテクチャスタイルについて混乱を招きそうなので、
補足しておきます。
デザインとデザインパターンが違うように、
アーキテクチャとアーキテクチャスタイルは別物です。
デザインパターンの本といえば &lt;a 
href="http://www.amazon.co.jp/exec/obidos/ASIN/4797311126"&gt;GoF&lt;/a&gt; 
とか&lt;a href="http://www.hyuki.com/dp/index.html"&gt;結城さんの2冊&lt;/a&gt;が有名ですね。
デザパタ本に載っているのはデザインそのものではなくデザインのパターンです(ムズカシイ?)。&lt;/p&gt;
&lt;p&gt;つまりこういうことです。
僕たちは結城さんの本でデザインパターンを勉強します。
デザインパターンはある問題領域においての経験則的なクラス設計の指針、作法、流儀です。
あの本自体に自分のプログラムのデザイン(設計)が書いてあるわけではありません。
本に書いてあるパターンを学習して、そのパターンを自分自身のプログラムのデザインに適用します。
デザインというのは本に書いてあるのではなく、
僕たちが実際に作るプログラムにおいて初めて具現化されるものなのです。&lt;/p&gt;
&lt;p&gt;アーキテクチャスタイルも同様です。
現実の世界で作られる実際のシステムはアーキテクチャを持っています。
そのアーキテクチャを設計するときに、ただ闇雲にものを作っていくのではなく、
世の中にすでにたくさんあるアーキテクチャ設計の指針、作法、流儀を適用するはずです。
そのほうが作業効率がいいし、先人の知恵を活用することできちんと動くものが作れるから。&lt;/p&gt;
&lt;p&gt;でも、実際は忙しかったり、納期が迫っていたり、
調べるのが面倒だったり、とにかく作らなければならなかったり、
あるいは単に無知だったりして、アーキテクチャスタイルを適用しない(できない)こともあります。
すると、いちおう動くんだけどちょっと変なシステムや、
最悪だとパフォーマンスやセキュリティに重大な欠陥を抱えたシステムができたりします。&lt;/p&gt;
&lt;p&gt;REST の実装は Web だといいましたが、
REST じゃない実装の Web もあります。
後ほど詳しく説明する予定ですが、
たとえば Cookie、たとえば URI へのアクション埋め込み、
キャッシュを無視した POST の濫用、
などはすべてアーキテクチャスタイルとしての REST を無視したか、
あるいは知らないために起きている問題です。&lt;/p&gt;
&lt;p&gt;本題がちとずれました。
元の話(アーキテクチャとアーキテクチャスタイル)に戻ります。
アーキテクチャはあなた自身のシステムのものです。
それを作るときに、アーキテクチャスタイルを適用しましょう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111460211516780700?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111460211516780700/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111460211516780700' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111460211516780700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111460211516780700'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/04/rest_27.html' title='REST 入門(補足) アーキテクチャとアーキテクチャスタイル'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111431608376068431</id><published>2005-04-24T13:14:00.000+09:00</published><updated>2007-09-22T00:19:44.368+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='http'/><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><title type='text'>REST 入門(その4) HTTP GET -- その絶大な効果</title><content type='html'>&lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html"&gt;&amp;#187; REST 入門 目次&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://yohei-y.blogspot.com/2005/04/rest-3.html"&gt;前回&lt;/a&gt;は、リソースの特徴について解説しました。
しかし、なぜリソースが重要なのかはまだわからないと思います。
今回はその一部を紹介します。&lt;/p&gt;
&lt;p&gt;まず、おさらいしましょう。
僕たちは以下のリソースを例に使っています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;東京の天気予報&lt;/li&gt;
&lt;li&gt;2005年8月24日のスケジュール&lt;/li&gt;
&lt;li&gt;新花巻駅の写真&lt;/li&gt;
&lt;li&gt;Dijkstra 著 "Go To Statement Considered Harmful"&lt;/li&gt;
&lt;li&gt;僕の最近のブックマーク&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;そして、それぞれのリソースの識別子(URI)は以下のようになります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;http://weather.yahoo.co.jp/weather/jp/13/4410.html&lt;/li&gt;
&lt;li&gt;https://example.com/schedule/20050824&lt;/li&gt;
&lt;li&gt;http://www.flickr.com/photos/60043209@N00/6337155/&lt;/li&gt;
&lt;li&gt;http://www.acm.org/classics/oct95/&lt;/li&gt;
&lt;li&gt;http://del.icio.us/yohei&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ここで質問です。URI を与えられたら、あなたは何をしますか?&lt;/p&gt;
&lt;p&gt;ここで答を直接聞けないのは残念ですが、大多数の人は、URI をコピーして 
Web ブラウザの URI 欄(IEだったらアドレス欄)に貼り付け、
そしてリターンキーか「移動」ボタンを押すのではないでしょうか。
上記の URI は、スケジュール以外は全部実際にブラウザで見ることができるURL ばかりです。
ぜひコピー&amp;amp;ペーストしてみてください。&lt;/p&gt;
&lt;p&gt;URL 貼り付けというなにげない日常的な行為、これが REST では非常に重要なのです。
ブラウザに URI を入力してリターン、するとブラウザはURI に示された Web サーバに対して 
HTTP の GET メソッドを発行します。&lt;/p&gt;
&lt;pre&gt;
GET /weather/jp/13/4410.html HTTP/1.1
Host: weather.yahoo.co.jp

&lt;/pre&gt;
&lt;p&gt;Web サーバは結果(その時点での東京の天気予報の HTML ページ)をブラウザに返します。&lt;/p&gt;
&lt;pre&gt;
HTTP/1.1 200 OK
Content-Type: text/html; charset=euc-jp

実際の HTML がここに入る
&lt;/pre&gt;
&lt;p&gt;世界中の人々が日々行っているこのなにげない作業を REST 流に説明すると、
名詞(リソース)に動詞(HTTP GET)を適用した、ことになります。&lt;/p&gt;
&lt;p&gt;ナンジャソリャ? と思った人もいるかもしれませんが、これはいわゆる「抽象化」です。
現実の世界で起きている Yahoo の東京の天気予報のページをブラウザに表示する、
という行為から個別の事情を取り払い、
なるべく汎用的に使える言葉で説明する(抽象化する)と
「Yahooの東京の天気予報」というリソースを取得(ゲット、GET、HTTP で GET)する(取得する」という動詞を適用)、
となるのです。&lt;/p&gt;
&lt;p&gt;この HTTP GET という抽象化は絶大な効力を発揮しています。
あるリソースを識別する URI さえ与えられれば、
ブラウザを使って HTTP GET を適用するだけで、
そのリソースのある時点での表現を取得できるのです。
それが HTML 文書だろうと、PNG 画像だろうと、.swf ファイルだろうと、Javascript だろうと関係ありません。&lt;/p&gt;
&lt;p&gt;ここで「リソースのある時点での表現」という言葉が出てきました。
これは REST の名前の元になっている Representational state のことです。
Representational state とは、あるリソースのある時点・条件での状態の表現を指します。
今日の時点での天気予報リソースと明日の時点での天気予報リソースは、
リソース自体の状態が異なるので取得できる表現も違います。
また、その表現は HTML かもしれないし、XML かもしれないし、PDF かもしれないし、はたまた何か別の形式かもしれません。
この表現をネットワークを介して転送する(Transfer)のが Representational State Transfer (REST) です。&lt;/p&gt;
&lt;p&gt;今回はここで終了です。
&lt;a href="http://yohei-y.blogspot.com/2005/04/rest-5-get-post-put-delete.html"&gt;次回は GET 以外の動詞を見ていこう&lt;/a&gt;と思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111431608376068431?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111431608376068431/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111431608376068431' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111431608376068431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111431608376068431'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/04/rest-4-http-get.html' title='REST 入門(その4) HTTP GET -- その絶大な効果'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111425273821188087</id><published>2005-04-23T19:38:00.000+09:00</published><updated>2007-09-22T00:20:03.851+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='uri'/><title type='text'>REST 入門(その3) 全てはリソースから</title><content type='html'>&lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html"&gt;&amp;#187; REST 入門 目次&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;では(やっと) REST の具体例を見ていきましょう。&lt;/p&gt;
&lt;p&gt;REST で最も重要な概念はリソースです。以下にリソースの具体例を挙げてみます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;東京の天気予報&lt;/li&gt;
&lt;li&gt;2005年8月24日のスケジュール&lt;/li&gt;
&lt;li&gt;新花巻駅の写真&lt;/li&gt;
&lt;li&gt;Dijkstra 著 "Go To Statement Considered Harmful"&lt;/li&gt;
&lt;li&gt;僕の最近のブックマーク&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;REST においてリソースとは名前のつくあらゆる情報を指します(つまり名詞ですね)。
たとえば、「東京の天気予報」というリソースには今日の天気予報も明日の天気予報も含まれるでしょう。
あるいは「2005年8月24日のスケジュール」には僕のスケジュールだけでなく、
あなたのスケジュールも含まれるかもしれません。
リソースで重要なのは、その意味です。
リソースの実体は時間や条件によって変化するかもしれませんが、
その意味は不変です(これが名詞たる所以)。&lt;/p&gt;
&lt;p&gt;上記のリソースの例を再度見てください。
これらは WWW (= REST の実装) 上に存在するものばかりです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「東京の天気予報」は Yahoo Japan の東京地方の天気予報のページ&lt;/li&gt;
&lt;li&gt;「2005年8月24日のスケジュール」は会社のグループウェアのスケジュール&lt;/li&gt;
&lt;li&gt;「新花巻駅の写真」は Flickr に登録した東北旅行のときの一枚の写真&lt;/li&gt;
&lt;li&gt;「Dijkstra 著 "Go To Statement Considered Harmful"」は&lt;a
href="http://www.acm.org/classics/oct95/"&gt;このページ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;「僕の最近のブックマーク」はソーシャルブックマークサイト del.icio.us のページ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;といったぐあいです。&lt;/p&gt;
&lt;p&gt;全てのリソースは識別子を持ちます。
Web の識別子といえば、URI (Uniform Resource Identifier) ですね。
もう一度サンプルを見てください。&lt;/p&gt;
&lt;p&gt;それぞれの URI は以下のようになります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;http://weather.yahoo.co.jp/weather/jp/13/4410.html&lt;/li&gt;
&lt;li&gt;https://example.com/schedule/20050824&lt;/li&gt;
&lt;li&gt;http://www.flickr.com/photos/60043209@N00/6337155/&lt;/li&gt;
&lt;li&gt;http://www.acm.org/classics/oct95/&lt;/li&gt;
&lt;li&gt;http://del.icio.us/yohei&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ここで、リソースの特徴を考察してみます。
上記の例のとおり、リソースは URI で識別される情報です。
URI で識別される情報は、時間や条件によって内容が変化する可能性があります。
たとえば、今日見る天気予報と明日見る天気予報では、含まれる内容は異ります。
しかし、両者とも東京の天気予報であることにはかわりありません。
今、リソースの内容と書きましたが、その内容は取得する時点でのリソースの状態(state)で決まります。
天気予報というリソースは、時間の経過と共に状態が変化していくと考えるとわかりやすいと思います。
もちろん状態が変化しないリソースもあります。
&lt;a href="http://www.chienowa.co.jp/frame1/ijinden2/Edsger_Dijkstra.html"
&gt;ダイクストラ&lt;/a&gt;のレターの状態が変化する可能性はもうないですよね。&lt;/p&gt;
&lt;p&gt;ここまでで、REST におけるリソースの特徴をまとめると以下のようになります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;全ての情報はリソース&lt;/li&gt;
&lt;li&gt;リソースは識別子(URI)を持つ&lt;/li&gt;
&lt;li&gt;リソースの状態は時間や条件とともに変化する可能性がある&lt;/li&gt;
&lt;li&gt;リソースの意味は時間や条件が変化しても不変である&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;このリソースが、REST では非常に重要になります。
その秘密は、&lt;a href="http://yohei-y.blogspot.com/2005/04/rest-4-http-get.html"&gt;次回&lt;/a&gt;以降で説明します。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111425273821188087?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111425273821188087/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111425273821188087' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111425273821188087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111425273821188087'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/04/rest-3.html' title='REST 入門(その3) 全てはリソースから'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111422712376709639</id><published>2005-04-23T12:31:00.000+09:00</published><updated>2007-09-22T00:20:23.002+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='architecturalstyle'/><title type='text'>REST 入門(その2) アーキテクチャスタイルとは?</title><content type='html'>&lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html"&gt;&amp;#187; REST 入門 目次&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;REST そのものを説明する前に、まずアーキテクチャスタイルとは何なのかを解説します。&lt;/p&gt;
&lt;p&gt;アーキテクチャスタイル(英文では architectural style です) は別名(マクロ)アーキテクチャパターンともいい、
複数のアーキテクチャに共通する性質、様式、作法あるいは流儀を指す言葉です。
パターンという言葉からデザインパターンを想像する人も多いかもしれませんが、
いわゆるデザインパターンは別名マイクロアーキテクチャパターンといい、
アーキテクチャスタイルよりも粒度の細かいクラスなどの設計様式を指します。&lt;/p&gt;
&lt;p&gt;具体例を挙げましょう。&lt;br /&gt;
たとえば MVC (Model View Controler) はアーキテクチャスタイルの一種です。
他にパイプ&amp;フィルタ、インタプリタ、イベントシステムなどもアーキテクチャスタイルになります。&lt;/p&gt;
&lt;p&gt;REST は数あるアーキテクチャスタイルの中でも特にネットワークシステムのアーキテクチャスタイルになります。
ネットワークシステムのアーキテクチャスタイルとして最も有名なのはみなさんご存知のクライアントサーバです。
サーバとクライアントが線で結び付いている絵を思い浮べてください。&lt;/p&gt;
&lt;p&gt;クライアントサーバと聞いて「あれれ」と思った人がいるかもしれませんね。
「&lt;a href="http://yohei-y.blogspot.com/2005/04/rest-1.html"&gt;はじめに&lt;/a&gt;」で REST は Web のアーキテクチャスタイルだと言いました。
しかし、Web はクライアントサーバでもあります。
これはいったいどういうことでしょうか。&lt;/p&gt;
&lt;p&gt;実は REST はクライアントサーバから派生したアーキテクチャスタイルなのです。
素のクライアントサーバアーキテクチャスタイルにいくつかの制約を加えていくと、
REST アーキテクチャスタイルになります。
この「制約」というのはアーキテクチャスタイルにおいて重要な概念です。
一般にソフトウェアアーキテクチャは複数のコンポーネントを組み合わせて実現しますが、
それぞれのコンポーネントがバラバラに動いているのでは動作しません。
そこで、各コンポーネントに制約を課していきます。
その結果、全体として各コンポーネントが協調して動作するようになります。&lt;/p&gt;
&lt;p&gt;クライアントサーバから REST に至る過程で加えられた制約には、
たとばステートレスやキャッシュなどがあります。&lt;/p&gt;
&lt;p&gt;最後に、アーキテクチャスタイルとは特定の実装を指すものではないことに注意してください。
WWW は REST の一実装形態です。WWW 以外の REST の実装も考えられます。
しかし、現実には REST といえば WWW のアーキテクチャスタイルを指す場合が多いので、
これからは特にことわりなく REST の実装例として WWW を使っていきます。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://yohei-y.blogspot.com/2005/04/rest-3.html"&gt;次&lt;/a&gt;はやっと REST そのものについて記述します(長いなー)。&lt;/p&gt;
&lt;p&gt;[update 2005-04-27 &lt;a href="http://yohei-y.blogspot.com/2005/04/rest_27.html"&gt;アーキテクチャとアーキテクチャスタイルについて補足&lt;/a&gt;を追加しました。]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111422712376709639?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111422712376709639/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111422712376709639' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111422712376709639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111422712376709639'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/04/rest-2.html' title='REST 入門(その2) アーキテクチャスタイルとは?'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111422660553610389</id><published>2005-04-23T12:17:00.000+09:00</published><updated>2007-09-22T00:20:41.771+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='architecture'/><title type='text'>REST 入門(その1) はじめに</title><content type='html'>&lt;a href="http://yohei-y.blogspot.com/2005/04/rest_23.html"&gt;&amp;#187; REST 入門 目次&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;REST は Apache 創始者のひとりである&lt;a href="http://www.ics.uci.edu/~fielding/"&gt;ロイ・フィールディングさん&lt;/a&gt;が、
彼の博士論文で提唱したネットワーク分散システム、特に WWW のアーキテクチャスタイルです。
WWW 技術はなぜ成功したのか、その特徴は何なのか、
ということについてソフトウェアアーキテクチャの観点から見直し、
そのあるべき姿について論じるための基礎的な資料となるものです。&lt;/p&gt;
&lt;p&gt;REST は既存の Web アプリケーション(人間が使うサービス)だけではなく、
いわゆる Web サービス(機械が使えるサービス)のためのアーキテクチャスタイルでもあります。
いわゆる SOAP を使った Web サービスとはアーキテクチャが真っ向から対立するため、
REST と SOAP はしばしば対立軸で語られます。&lt;/p&gt;
&lt;p&gt;残念なことに、日本ではアーキテクチャスタイルとしての
REST はあまり論じられてこなかったように筆者は感じています(間違いだったらゴメンナサイ)。
そのため単なる XML ベースの API としての REST のみが注目されているのが現状です。&lt;/p&gt;
&lt;p&gt;しかしながら Web アプリケーションや Web サービスを構築するときに、
アーキテクチャスタイルとしての REST に関する知識があるとスケーラビリティやユーザビリティが向上するはずです。
もしあなたが CORBA や DCOM を知っているなら、REST とのアーキテクチャの違いが興味深いかもしれません。
もしあなたが XML guy なら :-) &lt;a href="http://yohei-y.blogspot.com/2005/03/rest-xml.html"&gt;REST は 
XML の王道だと感じる&lt;/a&gt;かもしれません。&lt;/p&gt;
&lt;p&gt;これからの一連のポストは、ある程度の専門知識を前提として記述します。
ソフトウェア工学やネットワークに関する基礎知識があることが望ましいです。
また、サンプルを理解するために HTTP, URI, XML の基礎知識が必用です。&lt;/p&gt;
&lt;p&gt;次の記事では、まず&lt;a href="http://yohei-y.blogspot.com/2005/04/rest-2.html"&gt;アーキテクチャスタイルとは何なのか&lt;/a&gt;を解説します。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111422660553610389?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111422660553610389/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111422660553610389' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111422660553610389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111422660553610389'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/04/rest-1.html' title='REST 入門(その1) はじめに'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111422611375174485</id><published>2005-04-23T12:14:00.001+09:00</published><updated>2010-04-08T01:55:06.416+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><title type='text'>REST 入門</title><content type='html'>&lt;a href="http://yohei-y.blogspot.com/2004/12/rest.html"&gt;日本語の REST のリソース集&lt;/a&gt;を以前作ったのだが、
日本語では一般人向けの解説がない。
&lt;a href="http://sheepman.parfait.ne.jp/wiki/REST"&gt;sheepman 氏の REST のページ&lt;/a&gt;はすばらしいんだけど、多少わかっている人向けだ。
&lt;a href="http://kumiki.c.u-tokyo.ac.jp/~ichiyama/projects/reports/pdmwa/"&gt;市山氏のプレゼン資料&lt;/a&gt;は RoyF
の論文を詳しく解説していてよいのだけれど、いかんせんアカデミックすぎる。
技術的な要素も抑えつつ、入門者にもわかりやすい解説はないものかと探していたのだが、みつからない。
英語の文書を訳すことも考えたんだけど、あまりよいものが見つからない。&lt;br /&gt;
で、結局自分で書くことにした。&lt;br /&gt;
最初はひとつのポストで済ませるつもりだったんだけど、書き始めたら長くなってしまったので、複数のポストに分けることにした。
えらそうなことを書いたが、内容は「ないよりマシ」といったレベルだろう。&lt;br /&gt;
前書きが長くなったけど(ここから始まりです。ですます調なのは入門記事だから)、
この記事(から始まる一連のポスト)は Representational State Transfer (REST) の日本語での紹介です。
僕(yohei)自身、REST を完全に理解しているわけではありませんので、
間違いやコメントなどを yoheiy at gmail dot com まで頂ければと思います。
もちろん、この日記のコメントでご指摘頂いても構いません。&lt;br /&gt;
このポストは目次用です。新しい記事がポストされたら随時変更します。
一連の記事のインデックスページとしてご利用ください。&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://yohei-y.blogspot.com/2005/04/rest-1.html"&gt;はじめに&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yohei-y.blogspot.com/2005/04/rest-2.html"&gt;アーキテクチャスタイルとは&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yohei-y.blogspot.com/2005/04/rest-3.html"&gt;全てはリソースから&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yohei-y.blogspot.com/2005/04/rest-4-http-get.html"&gt;HTTP GET -- その絶大な効果&lt;/a&gt;(IE で画面が真っ白になる場合はメニューの表示→エンコード→Unicode(UTF-8) を選んでください)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yohei-y.blogspot.com/2005/04/rest-5-get-post-put-delete.html"&gt;四つの動詞 -- GET, POST, PUT, DELETE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yohei-y.blogspot.com/2005/05/rest-6-xml.html"&gt;ハイパーリンクと XML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yohei-y.blogspot.com/2005/05/rest-7.html"&gt;ハイパーメディアの可能性&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yohei-y.blogspot.com/2005/05/rest-8-rest.html"&gt;REST でないもの&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yohei-y.blogspot.com/2005/05/rest-9-rest-soap.html"&gt;REST と SOAP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yohei-y.blogspot.com/2005/05/rest-10.html"&gt;終わりに&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
ではまず「&lt;a href="http://yohei-y.blogspot.com/2005/04/rest-1.html"&gt;はじめに&lt;/a&gt;」から&lt;br /&gt;
以下は追記です(2007-09-21)。
その後、Web 上でいろいろと REST に関する記事を書いたり、雑誌に連載をしたりしています。&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://yohei-y.blogspot.com/2006/04/webdb-press-vol32-rest.html"&gt;WEB+DB PRESS Vol. 32 に REST 入門という記事&lt;/a&gt;を書きました&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.asahi-net.or.jp/~eb2m-mrt/kaihatsu8.html"&gt;第八回XML開発者の日&lt;/a&gt;はREST特集でした&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yohei-y.blogspot.com/2007/04/webdb-press-vol-38.html"&gt;WEB+DB PRESS Vol. 38 から REST に関する連載&lt;/a&gt;を行っています&lt;/li&gt;
&lt;/ul&gt;

さらに追記(2010-04-08)
このエントリを拡張してさらに詳しくRESTについて書いた本を書きました。こちらもぜひご参照ください。

&lt;div class="product"&gt; 
&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4774142042/yoheiyweblog-22/ref=nosim/"&gt;&lt;img src="http://images-jp.amazon.com/images/P/4774142042.09.MZZZZZZZ.jpg" alt="photo" class="photo" style="float:left; margin: 0 15px 10px 10px; padding: 0;border:none;" /&gt;&lt;/a&gt; 
&lt;dl&gt;&lt;dt&gt;&lt;a class="item url" href="http://www.amazon.co.jp/exec/obidos/ASIN/4774142042/yoheiyweblog-22/ref=nosim/"&gt;&lt;span class="fn"&gt;Webを支える技術 ── HTTP、URI、HTML、そしてREST&lt;/span&gt;&lt;/a&gt;&lt;/dt&gt;&lt;dd&gt;山本 陽平&lt;/dd&gt;&lt;dd&gt;技術評論社 2010-04-08&lt;/dd&gt;&lt;/dl&gt; 
 
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111422611375174485?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111422611375174485/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9037301&amp;postID=111422611375174485' title='9 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111422611375174485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9037301/posts/default/111422611375174485'/><link rel='alternate' type='text/html' href='http://yohei-y.blogspot.com/2005/04/rest_23.html' title='REST 入門'/><author><name>yohei</name><uri>http://www.blogger.com/profile/03844952516956920343</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9037301.post-111392250991586543</id><published>2005-04-19T23:55:00.000+09:00</published><updated>2007-09-22T00:21:23.991+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rest'/><category scheme='http://www.blogger.com/atom/ns#' term='soap'/><title type='text'>Google Fight : Make this fight with googleFight rest VS soap</title><content type='html'>&lt;a href="http://www.googlefight.com/"&gt;Google Fight&lt;/a&gt; というサイトがある。&lt;/p&gt;
&lt;p&gt;使ってみればわかるが、要は二つのキーワードの Google での検索件数を戦わせるというジョークサイトだ。で、真っ先に思いついたのが REST vs SOAP。やってみたら REST の圧勝だった。&lt;/p&gt;
&lt;p&gt;で、この Google Fight は RESTful に作ってあって、それぞれの対戦がブックマーク可能である。&lt;/p&gt;
&lt;p&gt;そこで &lt;a href="http://www.googlefight.com/index.php?lang=en_GB&amp;word1=rest&amp;word2=soap"&gt;REST vs SOAP&lt;/a&gt; を  del.icio.us に登録してみた。&lt;/p&gt;
&lt;p&gt;登録したときの下心は http://del.icio.us/tag/rest を bloglines でチェックしている&lt;a href="http://www.markbaker.ca/"&gt;某Restafarian&lt;/a&gt;がこれを見つけてくれるのではないかということ。&lt;/p&gt;
&lt;p&gt;そしたら見事に引っかかって :) &lt;a href="http://del.icio.us/url/8982e58616087ea1f53b06b359436dc2"&gt;ブックマークしてくれた&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;ちょっと嬉しい。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9037301-111392250991586543?l=yohei-y.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.googlefight.com/index.php?lang=en_GB&amp;word1=rest&amp;word2=soap' title='Google Fight : Make this fight with googleFight rest VS soap'/><link rel='replies' type='application/atom+xml' href='http://yohei-y.blogspot.com/feeds/111392250991586543/comments/default' title
