RESTful grails应用程序:DRYing up UrlMapping
假设我们有一个grails web应用程序,它暴露了几个资源.
>标签 该应用程序具有经典的Web界面,用户可以与之交互并进行一些管理. 如果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函数将是搜索特定标准等等… 我们尝试使用循环生成映射闭包,但没有成功.我们完全走错了吗? 解决方法
我建议使用以下映射:
"/rest/url/$id?"(resource:"urlRest") 下面是为urlRestController创建的HTTP方法到动作映射: GET show PUT update POST save DELETE delete 我明白为什么你可能想要映射/ rest / url POST来保存和/ rest / url / id PUT来更新,但这违背了这些动词的含义. PUT应该是添加新网址和POST的唯一方法来更新网址.如果您的约束是保持当前控制器代码不变,那么按照您的布局方式进行操作可能是最好的方法.但是,我的猜测是你的控制器可能已被编码以处理默认映射就好了(如果没有id则更新/删除给出错误,如果没有id则显示重定向到列表等). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |