txqzのURI設計

とくにRFC3986とかで明示されているわけではないけど、Apacheとかを使っていると、http://example.com/hoge/のようなスラッシュで終わるURIはexample.comホストの中にあるhogeフォルダを指していると解釈するのが自然だ。もしDirectoryIndexで指定されたファイルが存在せずIndexesオプションが有効になっていれば、hogeフォルダ以下にあるファイルの一覧が表示される。hogeがフォルダである場合にhttp://example.com/hogeとスラッシュを省略すると、http://example.com/hoge/にリダイレクトされる。

現在のtxqzはブログの記事をデータベースから動的生成して一定期間キャッシュするような設計になっていて、たとえばこのエントリのURIはhttp://txqz.net/blog/2009/05/12/2331だけど、実際にドキュメントルートにblogというフォルダがあってその中に2009というフォルダがあって05というフォルダがあって12というフォルダがあって2331というファイルが置いてあるというわけではない。それでも、なるべく実際にそういう構造になっているかのように見せかけている。たとえば:

http://txqz.net/blog/2009/05/12/2331にアクセス
2009年5月12日23時31分の記事(これ)が表示される
http://txqz.net/blog/2009/05/12/にアクセス
2009年5月12日の記事インデックスが表示される(/2009/05/12/フォルダへのアクセスと捉え、Index of的な表示を行う)
http://txqz.net/blog/2009/05/12にアクセス
2009年5月12日の記事が新しい順に表示される
http://txqz.net/blog/2009/05/にアクセス
2009年5月の記事インデックスが表示される
http://txqz.net/blog/2009/05にアクセス
2009年5月の記事が新しい順に表示される
http://txqz.net/blog/2009/にアクセス
2009年の記事インデックスが表示される (実際は、年単位だと記事数が多くなるので月別の代表的な記事を何件か表示する。特にその月に多くタグ付けされたタグがついている記事を代表的な記事としている。)
http://txqz.net/blog/2009にアクセス
2009年の記事が新しい順に表示される
http://txqz.net/blog/にアクセス
記事インデックスが表示される(全記事の一覧を挙げても多すぎるので、年別の代表的な記事を何件か表示する。選び方は月別と同様。)
http://txqz.net/blogにアクセス
記事が新しい順に表示される

また、古い順に読みたいという需要もあるため、http://txqz.net/blog/2009?1などのように後ろに"?ページ番号"をつけてアクセスするとその範囲の記事が古い順に並べられた部分リストが見られるようになっている。これはhttp://txqz.net/blog/2009/05?1でもhttp://txqz.net/blog/2009/05/12?1でも同様の機能となるが、最近は1日はおろか月に15件も記事を書かないのであまり意味がない。たんに降順だけでなく昇順でも読めますというだけ。ただ、特定の内容について何回かに分けて記事にしてたりすると降順だと読みにくくなったりするので、ぜひ他のブログにも似たような機能をつけて欲しいところ。もちろんMicroformatsには可能な限り対応し、Autopagerizeなどの便利なツールの恩恵に最大限預かれるようにしている。

以上の議論は記事データベースの中からどの範囲の記事リストをどの順で表示するかというものだが、そこから選ばれた記事リストをどういう表現であらわすかという問題もあり、txqzの場合は拡張子をつけることで対処している。http://txqz.net/blog/2009/05/12/2331と拡張子をつけずにアクセスした場合、ユーザーエージェントがtext/htmlをくれと言えばHTML4.01でマークアップしたものをtext/htmlとして返すし、application/xhtml+xmlをくれと言えばXHTML1.1でマークアップしたものをapplication/xhtml+xmlで返す。.htmlという拡張子をつければHTML4.01、.xhtmlならXHTML1.1、.rdfならRSS1.0、.atomならAtom、.jsonならJSONを返す。このブログのフィードがhttp://txqz.net/blog.rdfないしhttp://txqz.net/blog.atomで提供されているのは単にこの仕様に従っただけで、最新の記事というリソースがあって、それをHTMLでマークアップすれば人間向きの表現になり、RDFやAtomでマークアップすれば機械向けの表現になる。リソースとしての意味合いはまったく等しく、単に表現が違うだけなのだから拡張子で違いを表すのが自然だ。

ほかのブログサービスがどうなっているかというと、たとえばはてなダイアリーだと、http://d.hatena.ne.jp/denken/のフィードはhttp://d.hatena.ne.jp/denken/rssで提供されている。完全に後出しじゃんけんなんだけど、ファイル名がrssとあってもなんのRSSか分からないわけで、もし最新の記事のRSSなのだったら、人間向けに/latest.html、機械向けに/latest.rssみたいな感じで提供されていればより分かりやすいURIになりますね。そんなのを追求することがビジネス的にどれだけ意味があるか知りませんが。

ただまあ、こういう内側の仕様や外側のマークアップやUIを考えることばかりに興味がいって、肝心のブログ記事が全然書かれてなかったりするのでナニでアレなわけです。


拡張子で表現内容を変える例としてMitterがある。これは人間向け表現をhttp://mitter.jp/youzaka.html (ただし、拡張子なしでのアクセスが一般的)、機械向け表現をhttp://mitter.jp/youzaka.atomで提供している。もしかしたらapplication/atom+xmlをほしがるユーザーエージェントがアクセスしたら拡張子なしでもAtom版が返ってくるかもしれないけどそこまでは検証してない。

タグ
© 2001-2010 Chisa YOUZAKA. Some rights reserved.