(思索)RESTでID変更
/{collection}
/{collection}/{id}
といったパスで参照可能なRESTfulなリソース群があったとしよう。
さて、ここであるリソース、例えば/books/123のIDを456に変えたいとしたら、どうするのが美しいのか?
- PUTでやる
- リソースを消して創りなおす。
いまさらだが、今、こういう問題に直面して明確な答えが自分の中にないことに気付いた。
前者は、即ち例えば、/books/123 に対して {"id":"456, "foo":"bar"} などといったBODYでPUTリクエストを出すということで、その結果/books/123は参照不可能となり/books/456という新しいリソースができるということだ。これはさすがにRESTfulじゃない気がする。そもそもこの処理に対するレスポンスコードは201か?新しいリソースのURLはLocationヘッダで送るのか? なんて考えるとますますあやしい。。。ような気もしつつ、それはまだましだけど、やっぱり/books/123にPUTしたのに/books/123が消えるというのが最悪な感じ。
ということで、ID変更はリソースを消して創りなおすべし! というのを私の答えとしたいと思う。