初步认识什么是RestFul风格

798 阅读4分钟

概念

  Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,==只是一种风格==,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。(掘金不支持高亮我哭惹,那以后尽量不写高亮吧)

功能

  • 资源 : 互联网所有的事物都可以被抽象为资源
  • 资源操作 : 使用Post、Delete、Put、Get,使用不同的方法对资源进行操作
  • 分别对应 : 添加、删除、修改、查询。

  传统的资源操作方式 : 通过不同的参数来实现不同的效果,方法单一(post 和 get)


  RestFul操作资源 : 可以通过不同的请求方式,来实现不同的效果! 如下 : 虽然请求的地址一样,但是功能可以不同!


如果代码写成这样(原来的方式)那么我们在浏览器上想要调用这个test方法,就必须在url后面用问号传入参数a和b以及他们各自的值

@Controller
public class RestFulController {
    // 传统的Url : localhost:8080/add?a=1&b=2
    @RequestMapping("add")
    public String test ( int a, int b, Model model){
        int res = a + b;
        model.addAttribute("msg","结果为:" + res);
        return "hello";
    }
}

假设a的值为1 b的值为2(Url就会是这个样子:localhost:8080/add?a=1&b=2) 假设a的值为1 b的值为2

而使用RestFul风格来实现的话只需要传入参数的值就可以实现调用test方法(一定程度上简化了Url)

  代码没有太多改动,只是在参数的前面加上了一个**@PathVariable注解**并让方法参数的值绑定到了对应的Url模板变量上

@Controller
public class RestFulController {
    // RestFul风格的Url : localhost:8080/add/1/2
    @RequestMapping("add/{a}/{b}")
    // 在SpringMVC中使用@PatchVariable注解,让方法参数的值对应绑定到Url模板变量上
    public String test1 (@PathVariable int a,@PathVariable int b, Model model){
        int res = a + b;
        model.addAttribute("msg","结果为:" + res);
        return "hello";
    }
}

只传入了对应的两个参数的值,就能够成功调用类中的test方法。:(Url是这个样子: localhost:8008/add/1/2)


RestFul除了能够改变Url,我们上面还说过可以让Url地址通过不同的请求方式来实现不同的效果,操作起来也很简单。

首先我们先来看一下如何使用注解来改变请求方式


// 用method来约束请求方式为Get(当然默认的请求方式也是Get)方式或其他。
@RequestMapping(name="add/{a}/{b}",method = RequestMethod.GET)```

// 也可以直接使用@GetMapping注解来指定,这样的话代码会显得更为简洁,效果是一样的
@GetMapping("add/{a}/{b}")

// 除了Get请求方式其他的请求方式也都有对应的衍生注解,比如:
@PostMapping
@DeleteMapping
@PutMapping
// ....

了解之后我们动手具体实现一下,这边我们再写一个testA方法,让之前的test的方法提交方式为Post,testA的提交方式为Get

@Controller
public class RestFulController {
    @PostMapping("add/{a}/{b}")
    public String test (@PathVariable int a,@PathVariable int b, Model model){
        int res = a + b;
        model.addAttribute("msg","结果为:" + res);
        return "hello";
    }

    @GetMapping("add/{a}/{b}")
    public String testA (@PathVariable int a,@PathVariable int b, Model model){
        int res = a + b;
        model.addAttribute("msg","结果A为:" + res);
        return "hello";
    }
}

打开浏览器输入 localhost:8080/add/1/2 发现走的方法是testA而不是test(因为默认的提交方式是Get,而test方法的提交方式为Post)

我们再写一个a.jsp文件,让它走post提交方法(a和b的值分别为1和2已经写死)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="/add/1/2" method="post">
    <input type="submit">
</form>
</body>
</html>

我们在浏览器上访问a.jsp 提交之后可以看到它走的是test方法,也就是说他的提交方式为Post,那么有意思的就来了。他的Url地址和我们之前走的testA方法是一样的(Get提交方式)

到这里我们就完成了同一个Url地址,走两种不同的提交方式,实现了Url的复用,也就是我们前面提到的这一点。


那么,到这里RestFul的初步认识就结束了,各位感兴趣的话可以自己尝试一下,玩出点新花样~~~~

        原图p站地址 : www.pixiv.net/artworks/84…

         画师id : 高崎律@お仕事募集