今日は第3回 RESTful 読書会だった。主催の id:kunit さん&nsiena さん、担当の方々、参加者の皆さんお疲れ様でした〜。
読書会の模様(特に8章の DIS られっぷり)はまた今度まとめるとして。
この前 URI Templates ( http://bitworking.org/projects/URI-Templates/ ) の各言語の実装を調べたよと読書会で話したら、id:t-wada さんに「調査結果が addressable になるといいなーw」とリクエストされたので、早速宿題をやっつけておく。
URI Templates の実装一覧
- 本家 (experimental implementation in Python、
- 59:04+09:00">draft-03相当):http://code.google.com/p/uri-templates/
- Ruby - Addressable
- http://addressable.rubyforge.org/
- Ruby (draft-02相当、値抽出無し)
- http://github.com/juretta/uri-templates/tree/master
- Javascript
- http://www.mnot.net/javascript/url_template/
- Javascript (draft-02相当、値抽出無し)
- http://www.snellspace.com/wp/?p=831
- Perl
- http://search.cpan.org/~bricas/URI-Template/
- .NET
- http://msdn.microsoft.com/ja-jp/library/system.uritemplate.aspx (日本語)
- http://msdn.microsoft.com/en-us/library/system.uritemplate.aspx (English)
- PHP (draft-03相当、値抽出無し)
- http://pear.php.net/package/URI_Template/download/
- Java - Apache Abdera (draft-03相当、値抽出無し)
- http://cwiki.apache.org/ABDERA/uri-templates.html
- Java - Metanotion URLMapper (値抽出無し)
- http://www.metanotion.net/software/urlmapper/
- Erlang (実装に目を通していないので、対応状況は不明)
- http://tfletcher.com/dev/erlang-uri-template
- C++ (draft-01)
- http://labs.cybozu.co.jp/blog/nakatani/2008/07/uri_template_c_xbyak_jit.html (日本語)
- http://shuyo.wordpress.com/2008/07/17/jit-compiler-for-uri-templates-cxbyak/ (English)
- "draft-**相当" と特筆されているもの以外は substitution のみの実装(おそらく draft-01 相当)
- 他にもあったら教えてもらえると嬉しい
- (6/16) PHP 版は id:kunit さんにコメント欄で教えていただいた。感謝
- (6/16) draft-02 相当な JS 版は id:t-wada さんにコメント欄で教えていただいた。同じく感謝
- (6/27) id:IwamotoTakashi さんに本家の実装リンク集を教えていただいて Java/Erlang/Ruby の情報を追加。感謝
- (7/10) 手前味噌ですが、C++ 実装を追加
これで終わっちゃうのも何なので、URI Templates について簡単に紹介。
- 値をテンプレートに埋め込んで URI を生成、逆に URI から値を取り出すための仕様
- ietf で標準化を目指して仕様策定されている(はず)。
- 現在の最新版は draft-03。
- 次のステータスにいつ頃進みそうか、などは不明( ietf の URI ML までは追いかけたのだけど )
ブラウザからリクエストされた URI を解析して値を取り出したり、逆に値のセット(ハッシュ)から URI を生成することを考える。
URI Templates では、以下のような「テンプレート」を用意することで、それに値を入れて URI を得たり、逆に URI とマッチングさせて値を得たりする。
http://www.example.com/users/{userid}
REST における、記述的な URI を使った connectivity (リンク)を満たすアプリケーションを作成するとき、同じ URI を作り、またそれを解析する必要が生じるのだが、かたや正規表現で、かたや文字列連結で、ということだと間違いが発生する可能性は十分あるし、変更の時のメンテナンスも大変。
テンプレートを記述するだけでその両方に対応できたら問題は解決するよね、というのが URI Templates の利点だろうと思う。
クエリパラメータでしか値の受け渡しをしないとか、リンク URI に値を含めることはしない(メニューなどの静的なリンクしかない)とかいった場合はあまり役に立たないだろう、って言っちゃってもいいのかな?
draft-03 でしかないくせに、RESTful本の作者からは「HTML5 に入るかも」と(過度の?)期待を得ているのだが、実のところ draft-03 は結構プログラマブルだったりと無闇に高機能。
はっきりいってそこまでいらない。
draft-01+α(デフォルト値とか) のサブセットを作って欲しいなあ。