restful全称:reprezentational state transfer,它是一种设计风格,面向的是资源;
既然restful面向资源,那URL作为资源定位符也应当设计为代表资源,例如:
localhost:8080/users : 用户资源列表;
users是一个名词,它表示用户资源列表,区别于传统的: getUsers等;
更多示例:
localhost:8080/users/1 : 单个用户,ID为1
那我们又会有疑惑,增删改操作呢?在restful风格中,增删改不在URL地址中展示,希望展示给用户的是一个简单的资源地址,而增删改操作通过请求method来区分,看一个简单的示例就明白了:
/** * restful */ @RestController @RequestMapping(value = "users") public class UserController { /** * 获取列表 * @return */ @RequestMapping(value = "", method = RequestMethod.GET) public String getUsers(){ System.out.println("获取用户数据列表"); return "获取用户数据列表"; } /** * 获取单个用户 * @param id * @return */ @RequestMapping(value = "{id}", method = RequestMethod.GET) public String getUser(@PathVariable Long id){ System.out.println("获取单个用户数据"); return "获取单个用户"; } /** * 创建用户 * @param user * @return */ @RequestMapping(value = "user", method = RequestMethod.POST) public String createUser(@RequestBody User user){ System.out.println("创建用户"); return "创建用户"; } /** * 更新用户 * @param id * @param user * @return */ @RequestMapping(value = "{id}", method = RequestMethod.PUT) public String updateUser(@PathVariable(value="id") long id, @RequestBody User user){ System.out.println("更新用户"); return "更新用户"; } /** * 删除用户 * @param id * @return */ @RequestMapping(value = "{id}", method = RequestMethod.DELETE) public String deleteUser(@PathVariable Long id){ System.out.println("删除用户"); return "删除用户"; } }
我们看到,我们这里都用了名词 + method + 路径参数绑定,每一个URL指向一种资源,而不是把URL看成接口。
而ajax将通过资源地址,以及method的区分,来进行对应的操作