【发布时间】:2009-06-05 12:29:05
【问题描述】:
假设我们有一个公开多个资源的 grails Web 应用程序。
- 标签
- 网址
- 用户
该应用程序有一个经典的网络界面,用户可以与之交互并进行一些管理。 我们希望通过 RESTful API 将应用程序中的资源公开给客户端,并且我们不希望应用程序的这一部分弄乱我们已有的控制器和代码。 所以我们想出了以下内容:
如果 Web 界面提供 host/app_path/url/[list|show|create],我们希望 REST API 位于 /host/app_path/rest/url。
所以我们最终得到了以下 UrlMappings 文件:
class UrlMappings {
static mappings = {
"/$controller/$action?/$id?"{
}
/* adding new urls and listing them */
"/rest/url"{
controller = "urlRest"
action = [POST: "save", PUT: "save", GET: "list", DELETE:"error"]
}
/* accessing a single url */
"/rest/url/$id"{
controller = "urlRest"
action = [POST: "update", PUT: "update", GET: "show", DELETE: "delete"]
}
/* non-crud stuff on urls */
"/rest/url/$action?/$id?"{
controller = "urlRest"
}
"/"(view:"/index")
"500"(view:'/error')
}
}
问题是,这并不是这里最干燥的东西。随着我们添加更多资源(例如标签),情况变得更糟。它们将转换为另外三个非常相似的代码块......
非crud功能将是诸如使用特定标准搜索之类的......
我们尝试使用循环生成映射闭包,但没有成功。我们在这里完全走错了吗?
【问题讨论】:
标签: grails groovy dry url-mapping