当前位置:  开发笔记 > 程序员 > 正文

RESTful grails应用程序:DRYing up UrlMapping

如何解决《RESTfulgrails应用程序:DRYingupUrlMapping》经验,为你挑选了1个好方法。

假设我们有一个grails web应用程序,它暴露了几个资源.

标签

网址

用户

该应用程序具有经典的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函数将是搜索特定标准等等...

我们尝试使用循环生成映射闭包,但没有成功.我们完全走错了吗?



1> John Wagenle..:

我建议以下映射:

"/rest/url/$id?"(resource:"urlRest")

下面是为urlRestController创建的HTTP方法到动作映射:

GET         show
PUT         update
POST        save
DELETE      delete

我明白为什么你可能想要map/rest/url POST来保存和/ rest/url/id PUT来更新,但这违背了这些动词的含义.PUT应该是添加新网址和POST的唯一方法来更新网址.如果您的约束是保持当前控制器代码不变,那么按照您的布局方式进行操作可能是最好的方法.但是,我的猜测是你的控制器可能已经被编码以处理默认映射就好了(如果没有id则更新/删除给出错误,如果没有id则显示重定向到列表等).

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有