codecamp

REST 的支持

为什么要支持 REST

这个特性被喊了好几个版本了,并且先后被报了好几个 Issue:

加上今天是个风和日丽的日子,Nutz.Mvc 重构完毕。架构这么灵活强大, 那么我就把这个特性加上吧,呵呵。

注意, Nutz支持的是Restful风格的映射, 但并非一个Restful实现.

如何使用 REST

Nutz.Mvc 对于 REST 的支持,包括4个常用方法及通用定义方法:

  • GET
  • POST
  • PUT
  • DELETE
  • @At(methods="xxx,yyy,zzz")

比如,你有一个 User 对象,你想为其增加 "修改" 和 "删除" 的操作,在模块类里你可以定义如下两个方法

@At("/user/?")
@GET
public User getUser(int userId){
    // TODO 这里是实现代码
}

@At("/user/?")
@POST
public User updateUser(int userId, @Param("..") User user){
    // TODO 这里是实现代码
}

@At("/user/?")
@DELETE
public void deleteUser(int userId){
    // TODO 这里是实现代码
}

看,很简单,不是吗? 你可以为你的请求设置路径参数,也可以为你的请求声明一个特殊的 HTTP 方法。路径参数的形式可以是:

  1. /user/?/topic/?
  2. /user/?/topic/*
  3. /*

关于 "路径参数" 的具体的解释,请参看 适配器

在一个入口函数上,你可以标注一个或多个下面的注解:

  • `@GET`
  • `@POST`
  • `@PUT`
  • `@DELETE`

这几个注解描述了当前入口函数仅仅相应什么样的 HTTP 请求方法。在你的应用运行时,即使 Nut.Mvc 匹配上了 URL,如果 HTTP 请求的方法和你声明的不符,它也当这个入口函数不存在。

如果你不声明这四个注解中的任何一个,则表示你希望你的这个入口函数处理发送到这个 URL 的任何 HTTP 请求。

因此,你可以为一个入口函数声明 (@GET|@POST|@PUT|@DELETE) 中的一个或多个,处理其中一种或者多种 HTTP 请求,而另外一个入口函数不声明注解,用来处理余下的其他 HTTP 请求方法。当然,这两个入口 函数的 @At 应该是一致的。

请求范围的模块
Nutz.Mvc 注解一览表
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

表达式引擎

maplist结构

图像处理小军刀

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }