2008-01-18
FIFO なデータ構造へのアクセスはどうするんだろう
RESTful な HTTP の使いかたという文脈で、特に構造を持たないような集合をリソースとして、CRUD を行うという話はよくある。(cf. http://yohei-y.blogspot.com/2005/04/rest-5-get-post-put-delete.html)
では、キュー(FIFO なデータ構造)を扱うにはどのように構成したらよいのか? と考えはじめて分からなくなった。
- head には突っ込むことだけが出来る
- tail からは取り出しだけが出来る
- その他の要素には(管理とかは置いといて)アクセスできない
PUT/DELETE の羃等を知らなかったときには、キュー(queue.hoge という名前だとする)をリソースと見立てて、
- PUT /queue.hoge で head に突っ込む
- DELETE /queue.hoge で tail から取り出す
でいいのかなぁ、と思っていた。が、PUT と DELETE を羃等にしようとすると、この構成ではダメ。
「RESTful Web サービス」をパラパラながめてみたけど、わからん。あまり良い案が思いうかばないのだけど、いまの頭にあるのは以下。
キューではなくて、head/tail をリソースと見立てる。
- POST /queue.hoge/tail で突っ込む
- POST /queue.hoge/head で取り出す
一般的に、構造を持ったリソースに対する、リッチな(内部が隠蔽された)操作は、どのように HTTP へマップすれば良いかというのは難しい質問になりそうなので置いとく。
2007-02-23 追記
はてなブックマークで id:teahut さんより情報をいただいた http://b.hatena.ne.jp/teahut/20080118#bookmark-7127896
- 同じように、POST を使う例 http://code.google.com/p/microapps/wiki/NQDQ
- 中間リソースを導入する例 http://activemq.apache.org/restful-queue.html
- rest-discuss ML でのスレッド http://comments.gmane.org/gmane.comp.web.services.rest/6149
また、コメントにて、id:m_seki から "「queue への依頼を表す伝票」リソースの新規作成とかんがえて POST で" 、id:yohei さんからは "subscription 導入が好み" というご意見と設計の指針をいただきました。ありがとうございました。
個人的には、何度も行き来するのは無駄な気がするので、単純に POST を使うのが好みかもしれない。もう一度、ML スレッドを読みこんでみて、制限を考えることにする。
- 26 http://reader.livedoor.com/reader/
- 12 http://b.hatena.ne.jp/entrylist?sort=hot
- 8 http://b.hatena.ne.jp/entrylist?sort=hot&url=http://d.hatena.ne.jp/
- 7 http://b.hatena.ne.jp/entrylist?sort=hot&of=50&threshold=5
- 7 http://del.icio.us/yohei
- 5 http://fastladder.com/reader/
- 3 http://b.hatena.ne.jp/entrylist?sort=hot&of=50&threshold=3
- 3 http://blogsearch.google.co.jp/blogsearch?hl=ja&client=firefox&rls=org.mozilla:ja-JP-mac:official&hs=goD&lr=lang_ja&um=1&ie=Shift_JIS&tab=wb&q=ストリング理論+科学&scoring=d
- 2 http://b.hatena.ne.jp/add?mode=confirm&url=http://d.hatena.ne.jp/ita-wasa/20080118/1200623188
- 2 http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/ita-wasa/20080118/1200623188
