てきとうなメモ

本の感想とか技術メモとか

Algorithmic Resource

RestfulなURIの設計として以下のようなことがよく言われているような気がするのだが

  • URIは名詞にすべき
  • クエリ文字列(?foo=barの部分)は使うべきではない

あんまりこだわるべきではないなと思った.

例えば検索結果などがそうだと思うんだけども,最近リリースされたYahoo Boss APIなどは

Hostname Basic Example

http://boss.yahooapis.com/ysearch/web/v1/dvd
Yahoo! - 404 Not Found

のようなURIになっている.あとニコ動のURIとかも.

こういうURIは意味が分からない訳ではなく,悪いとまでは思わないのだが,検索結果を指しているのにdvdという1つのリソースを指しているっぽく見えてなんだか違和感がある.

普通に

http://api.example.com/search?q=dvd

と書いた方が何をどう検索しているのかがわかっていい.でも,BOSS APIのようなタイプのURIは結構あるので,BOSS APIURIの方がかっこいいと思う人は多そう

こういう何らかの処理結果を指すリソースを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の設計はシンプルで分かりやすいことが重要なのであって,その他の部分はそこから派生したものにすぎないんじゃないかな.