質問: 環境:Spring3.1 TODOアプリを作っています。 現在、一覧機能、登録機能、編集機能があり、それぞれURLとメソッドとテンプレートを 分けているのですが、わかりづらいのでURLを1つにまとめ、テンプレートも 一覧画面と登録画面の2つにし、パラメータで切り分けるように 変更しようと思います。 現状 http://example.com/root /todoなら一覧表示 /todo-newなら登録画面表示 /todo-execNewなら登録処理 /todo-edit編集画面表示 /todo-execEdit編集処理 以下のうちどれかにしようと思っていますが皆さんならどちらを選びますか? typeというパラメータにまとめるか、パラメータ自体を条件にするかです。 ~~~パターン1(typeで分岐)~~~ /todo →一覧表示 /todo?type=new →GETなら登録画面表示、POSTなら登録処理 /todo?type=edit&id=1001 →GETなら編集画面表示、POSTなら編集処理 /todo?type=new&id=1001 →エラー /todo?id=1001 →エラー ~~~パターン2(editかnewかで分岐)~~~ /todo →一覧表示 /todo?new →GETなら登録画面表示、POSTなら登録処理 /todo?edit&id=1001 →GETなら編集画面表示、POSTなら編集処理 /todo?new&id=1001 →エラー /todo?id=1001 →エラー ~~~パターン3(idかnewかで分岐)~~~ /todo →一覧表示 /todo?new →GETなら登録画面表示、POSTなら登録処理 /todo?id=1001 →GETなら編集画面表示、POSTなら編集処理 /todo?new&id=1001 →エラー また、これより運用しやすい、セキュリティ的にこうした方がよい などありましたら教えてください。
回答: RESTの考え方ではこうなります。 * GET /todo 一覧 * GET /todo/10 特定リソースの表示(id=10を想定しているが、識別出来るのであれば数字でなくともよい) * POST /todo 新規リソースの追加 * PUT /todo/10 特定リソースの更新 * DELETE /todo/10 特定リソースの削除 ただし、編集画面をどうするかはRESTでは決まっていません。また、HTMLのフォームではPUT/DELETEメソッドをサポートしていないという問題があります。 rubyで書かれたWeb Application FrameworkdであるRuby on Railsでは次のように解決しています。 * GET /todo/new 新規追加のフォーム * GET /todo/10/edit 特定リソースを編集するフォーム * PUT/DELETEについては、javascript経由で送信するか、フォームに_method="PUT"といったフィールドを用意して判別