REST 的支持

优质
小牛编辑
137浏览
2023-12-01

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

  • Issue 323
  • Issue 369

加上今天是个风和日丽的日子,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 这里是实现代码
}

// 任意自选方法
@At(value="/user/?", method="fuck")
public void fuckUser(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 应该是一致的。

@since 1.r.63,标注了上述4个注解的方法,可以省略@At,此时,相当于标注了一个默认的@At