欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

什么是Restful风格

程序员文章站 2024-03-25 16:41:52
...

1 Restful风格

1.1 什么是 Restful

  • Restful 就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制

功能

  • 资源:互联网所有的事物都可以被抽象为资源
  • 资源操作:使用 POST(添加)、DELETE(删除)、PUT(修改)、GET(查询),使用不同方法对资源进行操作

对比之前的传递参数方式:

  • http://localhost:8080/hello?name=Tom&age=20

使用Restful风格的方式:

  • http://localhost:8080/hello/Tom/20

简言之,就是不使用问号传参了

1.2 传递参数

要想使用 Restful 风格传递参数,在 SpringMVC 中要使用 @PathVariable 注解

如果 @RequestMapping 中没有定义类似 “/{sex}” 这种变量,则在方法参数列表中使用 @PathVariable 会报错

@Controller
public class HelloController {
    @RequestMapping("/hello/{name}/{age}")
    public String hello(@PathVariable String name, @PathVariable String age, Model model){
        // 向模型中添加属性msg与值,可以在jsp页面中取出
        model.addAttribute("msg", name + age);
        return "Welcome";
    }
}

当我们再次输入请求 hello/Tom/20 时,后端就会解析参数,将 {name} 中的属性与控制器中方法参数对应上,{age} 同理
什么是Restful风格
当然这里我们不能使用表单测试,普通的 html 不能达到拼接的功能,无法将前端提交的请求变为 / 样式

1.3 请求方式

  • 上面说过资源操作有四种:POST(添加)、DELETE(删除)、PUT(修改)、GET(查询)

  • 我们可以指定控制器接受哪种请求,在 @RequestMapping 注解中添加 method 属性,用于指定处理何种请求

// 只处理 POST 请求
@RequestMapping(value = "/hello", method = RequestMethod.POST)
public String helloPost(String name, String age, Model model){
    model.addAttribute("msg", "POST: " + name + age);
    return "Welcome";
}

// 只处理 GET 请求
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String helloGet(String name, String age, Model model){
    model.addAttribute("msg", "GET: " + name + age);
    return "Welcome";
}
  • 创建两个表单,模拟两种请求(post 和 get)
<form action="hello" method="post">
  <input type="text" name="name">
  <input type="text" name="age">
  <input type="submit">
</form>
<form action="hello" method="get">
  <input type="text" name="name">
  <input type="text" name="age">
  <input type="submit">
</form>
  • 这里我们可以使用两个 hello 请求,因为两个处理器处理的请求方式不同,因此不会出现 ambiguous

  • 如果直接在地址栏输入请求,那无法指定请求方式,只能是默认 GET 方式,这里没有配置 Restful 传递参数,所以还是使用问号

什么是Restful风格

  • 测试表单提交

什么是Restful风格
提交上面表单的结果:
什么是Restful风格
提交下面表单的结果:
什么是Restful风格

  • 这里可以看见 GET 方式默认还是使用问号传参的,但 POST 并不会显示

  • 当然也可以不使用 method 的方式来实现

  • 使用 @GetMapping() 与 @PostMapping 注解来实现,代替之前的 @RequestMapping

// 只处理 POST 请求
@PostMapping("/hello")
public String helloPost(String name, String age, Model model){
    model.addAttribute("msg", "POST: " + name + age);
    return "Welcome";
}

// 只处理 GET 请求
@GetMapping("/hello")
public String helloGet(String name, String age, Model model){
    model.addAttribute("msg", "GET: " + name + age);
    return "Welcome";
}
  • 这样是不是既简洁又轻巧