RestfulなURIの設計として以下のようなことがよく言われているような気がするのだが
- URIは名詞にすべき
- クエリ文字列(?foo=barの部分)は使うべきではない
あんまりこだわるべきではないなと思った.
例えば検索結果などがそうだと思うんだけども,最近リリースされたYahoo Boss APIなどは
Hostname Basic Example
http://boss.yahooapis.com/ysearch/web/v1/dvdYahoo! - 404 Not Found
こういうURIは意味が分からない訳ではなく,悪いとまでは思わないのだが,検索結果を指しているのにdvdという1つのリソースを指しているっぽく見えてなんだか違和感がある.
普通に
http://api.example.com/search?q=dvd
と書いた方が何をどう検索しているのかがわかっていい.でも,BOSS APIのようなタイプのURIは結構あるので,BOSS APIのURIの方がかっこいいと思う人は多そう
こういう何らかの処理結果を指すリソースをRestful Web ServicesではAlgorithmic Resourceと呼んでいて,自分と似たような指摘をしていた.文章のタイトルだけみても
Algorithmic Resource? Use Query Variables
とクエリ文字列を使うことに肯定的である.
Restful Web Servicesでは別の方法も提示していて,例えば本をタイトルで検索する場合,以下のように
http://api.example.com/books?title=rest
titleが'rest'を含む本の集合のリソースと表すことができる.これはこれで非常に分かりやすい.
ただし,あくまでリソースの集合のリソースだからこういう表現ができるのであって,検索以外の操作だとなかなかうまくいかない気がする.例えば足し算を行うAPIを考える.シンプルに考えると以下のものが一番分かりやすい.
http://api.example.com/add?x=42&y=3
こういうのをいちいち名詞にしなくてはいけないと考えていくとボキャブラリが尽きてしまいそう.
URIの設計はシンプルで分かりやすいことが重要なのであって,その他の部分はそこから派生したものにすぎないんじゃないかな.