自由にURLをマッピングする仕様
3ヶ月ほど前より、cubby(カビー)というWebフレームワークを開発しています。
■cubbyの特徴
・100% Pure JSP Web Application Framework ・Zero Configuration ・シンプル&スモール ・RESTっぽいURIをサポート(/agata/todo/1001) ・直感的な名前のタグライブラリ
cubbyの特徴にしたい機能のひとつに「RESTチックなURLを自由に使える」機能があります。今のところ次のような仕様を考えています。が、アノテーションの名前や、POSTをサポートする部分の仕様など、こんなもんでいいか悩んでいます。URLやRESTにこだわりのある方々、ご意見等々いただけるとすげーうれしいです。12月中には、このあたりをサポートしたバージョン「0.5」を出したいと思っています。
■1.デフォルトのURL(コントローラー名+アクションメソッド名)
public class TodoController extends Controller { // 「/todo/show」でアクセスできます。 public ActionResult show() { ... } }
■2.URIをデフォルトから変更する(@Url)
public class TodoController extends Controller { // アクションメソッド // 「/todo/view」でアクセスできます。 @Url("view") public ActionResult show() { ... } }
■3.正規表現によるUriからパラメータの変換(@Url(to={}))
public class TodoController extends Controller { // 「/{ユーザID}/todo/{TodoId}」でアクセスできます。 // ユーザID、TodoIdは「to」で指定した // 「userId」「todoId」というリクエストパラメータにセットされます。 @Url(value="/([a-zA-Z0-9]+)/todo/([a-zA-Z0-9]+)", to={"userId","todoId"}) public ActionResult show() { ... } }
■4.POSTアクセスサポート(アクションメソッドの引数にPost)
public class TodoController extends Controller { // アクションメソッドの引数になにもないとGET/POSTの処理とみなす。 // 「GET /{ユーザID}/todo/{TodoId}/edit」でアクセスできます。 @Url(value="/([a-zA-Z0-9]+)/todo/([a-zA-Z0-9]+)/edit", to={"userId","todoId"}) public ActionResult edit() { ... } // アクションメソッドの引数に「Post」オブジェクトがあるとPOSTの処理とみなす。 // post自体には何の情報も持たない // 「POST /{ユーザID}/todo/{TodoId}/edit」でアクセスできます。 @Url(value="/([a-zA-Z0-9]+)/todo/([a-zA-Z0-9]+)/edit", to={"userId","todoId"}) public ActionResult edit(Post post) { ... } }