「識別子結合方式」と「Wikipediaの名前空間」(続々・こんなURI設計、どう?)
先日の日記でひねり出した「識別子結合方式」のURIは、現実のWebサービスでは見かけないので、「またいつものように僕だけが突飛なことを考えているんだろう」とひとりごちていたら、ふと、Wikipediaで使われていることに気づきました。
Wikipediaの名前空間
Wikipediaには、MediaWiki由来の名前空間概念があります。詳しくは下記リソースをご参照ください。
お察しの通り、このURI自体が、名前空間の使用例になっています。名前空間を示すプレフィックス「Help」と定義語「名前空間」を区切り文字「:」で結合しているわけです。
なぜ名前空間が必要かといえば:
で提供されるリソースと区別する必要があるからにほかなりません。
この考え方は、僕の書いた「識別子結合方式」とまったく同じです。
標準名前空間による省略
「http://ja.wikipedia.org/wiki/名前空間」のほうは、標準名前空間に属しているため、プレフィックスが省略されています。
先日の日記に書いた商品ブックマークサービスのURI設計でも、この標準名前空間を、暗黙のうちに使っていました。
http://example.jp/register
は:
http://example.jp/System:register
の省略形とみなせるということです。
制限による省略
ユーザ名「register」は不許可、かつ、ユーザリソースの下の階層には商品リソースしか置かない、と制限してよければ:
http://example.jp/System:register http://example.jp/User:iwamot/Item:4774142042 http://example.jp/Item:4774142042
は:
http://example.jp/register http://example.jp/iwamot/4774142042 http://example.jp/Item:4774142042
まで省略できます。
世のWebサービスの多くは、こうした制限を曖昧にしたままURI中の名前空間を省略してしまっている、と考えることもできます。機能追加時にURIがコンフリクトする可能性は充分あります。「{アカウント毎,ログイン後}の URL 設計 -- LoveVector」で示されている「id:task 問題」が典型例です。
リリース後にどのような機能が追加されるかあらかじめ見通すことは無理なので、できるだけ名前空間を省略しないのが無難ではないかと思っています。