100個目のエントリは REST の話
2007.12.28
さて、このエントリが100個目だったりします。今日は年内最終仕事日ですので、まあキリもいいかも。
さて、前回紹介した「RESTful Web サービス」です。昨晩寝床で早速読んで(夜中になるとコードを追うのは面倒なので飛ばしましたが。サンプルソースがRubyな本って初めて...)ました。やはり期待にたがわぬ面白本です。で今日会社で早速布教。
で...やはり「REST」って言葉を知らないエンジニアはまだ多いですね。要するにこれ、たとえば前回の紹介記事の URL が、
http://blog.pasonatech.co.jp/nextblog/sugiura/5854.html
であって、決して
http://blog.pasonatech.co.jp/nextblog/blog.cgi?mode=view&user=sugiura&id=5854
じゃないこと....の哲学的根拠みたいなものです(メチャ単純化して言うと)。ですから、「ブログというもの自体の設計」に、この REST の哲学はある程度影響があります。MovableType だと、XML-RPC ベースの投稿API(MovableTypeAPIで有名ですが...)を持っていますが、もう一つの流れとして AtomPub(旧名AtomAPI) による投稿API がある(前アンドキュメンティッドでしたね...今どうなんだろ)わけです。この AtomPub が広く使われている代表的な REST の実例です(ブログサービスには AtomAPIをサポートしている投稿サービスがたくさんあります....)。たとえば投稿するのに HTTP の PUT メソッドを使い、投稿削除するのに DELETE メソッドを使う...というのは、いかにも「RESTっぽい」仕様です。
まあ、REST とは「いくつかの特徴を備えた Web サービス設計の方法論」ですから、単に「GET/POST 以外のメソッドを使ってるからRESTだ!」となるわけではないです。そこらへんは書籍を読むなり、この本の監訳者山本陽平氏の「REST入門」で勉強するのがいいでしょう。
で、REST の発想の根底には、やはり「今年のテーマ」(苦笑)である「温故知新」があります。言い換えると
HTTPのRFCで決まっているものを正しく活用しよう
です。最初から HTTP には PUT だ DELETE だ...のメソッドがあり、かなりキメ細かいステータスの定義があり....なのに、REST 以前では
これらが全然まともに使われていなかった
わけです。それらをキッチリ活用し、シンプル(反対はSOAP)でスケーラブルな Web サービスを構築するための基盤にしてやろう....というのが REST の目的のわけです。
この本の「はじめに」がなかなか気合入ってます。ちょいと引用すると
私たちは、驚くべき新技術について述べるために本書を執筆した。それが今ここで完成し、ホットであり、分散システムの作成方法を根本的に変えることを約束する。World Wide Web のことである。
....もちろん、これ、「マジメなジョーク」です。確かに REST化されたWWWは「ホットであり、分散システムの作成方法を根本的に変える」ものですが、これが「驚くべき新技術」....というわけではないあたりが極めて面白いところです(苦笑)。あと圧巻は付録の「最もよく使用される42のHTTPレスポンスコード」で、よく見かける一覧リストとは一線を画す、「REST視線でのHTTPレスポンスコード」になっています。「404 Not Found」と「410 Gone」の違いを説明できますか?(RFCの記述はわかりづらいんだよね....)
410 (Gone) 重要度:中 このレスポンスコードは、404(Not Found)と似ているが、もう少し情報を提供する。リクエストされたURIが以前はリソースを参照していたが、そうではなくなったことをサーバが知っている場合に使用される。サーバはリソースの新しいURIを知らない。もし知っていれば、301(Permanent Redirect) を送信する。
ぜひぜひ勉強をオススメします。というわけで、よいお年を....
投稿者 : 杉浦 こずえ | 投稿日時 : 2007.12.28 10:57
あすなろBLOGのトラックバック・コメントは承認制になっています。
すぐにブログに反映されませんので、ご了承ください。






名前:え。t。2007年12月30日 23:38
「哲学的根拠」というのを聞いてしっくりきました。メソッドとレスポンスコードが正しく扱われないというのは、ウェブアプリケーションを開発していてずっと気にかかっていました。RESTを聞いたとき、これってRFC通りに作れってことだよな。と思ったのですが、ブラウザが対応していないので、どうにもならないのでした。
ブラウザのアンカーを右クリックするとHTTPメソッド(GET/POST/PUT/DELETE/OPTOIN/HEAD/TRACE)がでてくるといいですね。
DELETEで開くっていうのはちょっとアレですけど。