我已经构建了我的第一个grails应用程序。我的URL映射是默认应用程序提供的:
static mappings = {
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}
"/"(view:"/index")
"500"(view:'/error')
}
塞纳里奥
我有一个名为ColorController
的控制器,其中包含操作save
和list
。它只是做这样的事情:
def save () {
def colorInstance = new Color(params)
colorInstance.save(flush: true)
}
def list () {
[colorList: Color.list, colorTotal: Color.count()]
}
我想为这些操作构建一个简单的API。
问题
http://<domain>/<app>/rest/controller/action
)答案 0 :(得分:4)
在我下面查看我的观点/答案之前,我建议您访问此SO Question以了解Grails中RESTful WS的基本知识。
<强>评论:强>
“保存操作应接受参数作为JSON,如果记录保存” - 保存映射到POST RESTful,则提供成功消息。它不是将JSON主体绑定到params
,而是绑定到request
。要访问JSON对象,您只需在操作方法中使用request.JSON
。
request.JSON instanceof JSONObject
list()
操作映射到GET请求,您可以将映射呈现为list()
中的JSON以下// Controller list()
import grails.converter.JSON
def list () {
[colorList: Color.list, colorTotal: Color.count()] as JSON
}
问题解答: -
Color
),不应该对基础controller
或action
感到烦恼。服务器端逻辑应该从客户端抽象出来。 URL映射是客户端用作请求形式的内容。我会在Color
资源的网址映射中找到类似的内容。 /color/$id?(resource: "color")
或
/color/$id?(controller: 'color'){
action = [GET: "list", POST: "save"]
}
我应该为我的API制作单独的控制器吗? - 取决于应用程序的设计方式。您还可以将上述控制器作为API。例如,目前我正在使用grails应用程序,该应用程序在前端使用AngularJS
连接到Grails APP RESTFully。为了实现我有一个RestClientController
作为Angular的API。在同一个应用程序中使用REST API的基本原理是,将来我们可以将基础服务公开给除应用程序本身中的Angular
客户端之外的外部客户端。
我正在使用spring security插件进行身份验证。但在某些时候我可能也想验证restful api。有什么解决方案? - 您也可以在这里使用Spring Security。在我的情况下,我使用插件,并通过使用插件的带注释的组件controller
来保护@Secured
。我还启用了自定义OAuth
,用于与公司范围的LDAP和AD组进行交互的授权。
如果我使用相同的控制器,我怎样才能修改这些简单的操作来完成我需要的操作。 - 我想你现在可以得到这个问题的答案了(去了之后)通过我上面提到的SO问题)。我的意见是,controller
actions
可以路由到适当的service
类,这些类根据请求参数执行业务实现。
例如,
//Action
def show(){
if(params.id){
colorService.getColor()
} else {
colorService.searchColor()
}
}
在上面的示例中,网址映射为/color/123
或/color
。在前一种情况下,它将获得color
,之后它将搜索颜色