当前位置 博文首页 > 浮若星光的博客:RestFul 风格

    浮若星光的博客:RestFul 风格

    作者:[db:作者] 时间:2021-06-26 15:40

    1.Restful是什么?

    restful不是一个技术,他只是一个规范,就像是阿里的类命名规范,我们要给dao接口的命名为:IDAO,dao接口的实现类命名为DAOImpl,变量名,方法名采用驼峰命名等相似,上面说的都是给类,方法,变量命名的规范,而Restful是给路径命名的规范

    2.为什么要使用Restful

    可能每个人,每个公司的请求路径的规范都是不一样的,这样的可能造成人为代码的请求的路径不太容易被人理解,所以就有人看到了这个缺陷。能不能把所有的请求的路径都给他规范起来,这样大家如果都知道这种规范,代码是不是更容易传播?

    http请求的方式常用的有get和post两种,但是其实还有put和delete,但是我们的html的form标签的method属性,只有get和post两种取值,因此在restful火起来之前,其他的两种请求,put和delete是没有什么用的。

    restful定义了这样的一个规范,所有程序的请求能不能统一的分为四大类,增删改查,原来的增删改查都是通过方法名来区分的,现在通过请求的方式来表示当前的操作是什么样的操作。
    Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    资源:互联网所有的事物都可以被抽象为资源
    资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。
    分别对应 添加、 删除、修改、查询。
    传统方式操作资源 :通过不同的参数来实现不同的效果!方法单一,post 和 get

    http://127.0.0.1/item/queryItem.action?id=1 查询,GET
    http://127.0.0.1/item/saveItem.action 新增,POST
    http://127.0.0.1/item/updateItem.action 更新,POST
    http://127.0.0.1/item/deleteItem.action?id=1 删除,GET或POST
    

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

    http://127.0.0.1/item/1 查询,GET
    http://127.0.0.1/item 新增,POST
    http://127.0.0.1/item 更新,PUT
    http://127.0.0.1/item/1 删除,DELETE
    

    学习测试
    1、在新建一个类 RestFulController

    @Controller
    public class RestFulController {
    }
    

    2、在Spring MVC中可以使用 @PathVariable 注解,让方法参数的值对应绑定到一个URI模板变量上。

    @Controller
    public class RestFulController {
        //映射访问路径
        @RequestMapping("/commit/{p1}/{p2}")
        public String index(@PathVariable int p1, @PathVariable int p2, Model model){
            int result = p1+p2;
            //Spring MVC会自动实例化一个Model对象用于向视图中传值
            model.addAttribute("msg", "结果:"+result);
            //返回视图位置
            return "test";
            
        } 
    }
    

    3、我们来测试请求查看下

    4、思考:使用路径变量的好处?
    ? 使路径变得更加简洁;
    ? 获得参数更加方便,框架会自动进行类型转换。
    ? 通过路径变量的类型可以约束访问参数,如果类型不一样,则访问不到对应的请求方法,如这里访问是的路径是/commit/1/a,则路径与方法不匹配,而不会是参数转换失败。

    ? 我们来修改下对应的参数类型,再次测试

    //映射访问路径
    @RequestMapping("/commit/{p1}/{p2}")
    public String index(@PathVariable int p1, @PathVariable String p2, Model model){
        String result = p1+p2;
        //Spring MVC会自动实例化一个Model对象用于向视图中传值
        model.addAttribute("msg", "结果:"+result);
        //返回视图位置
        return "test"; 
    }
    

    使用method属性指定请求类型
    用于约束请求的类型,可以收窄请求范围。指定请求谓词的类型如GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE等
    我们来测试一下:
    ? 增加一个方法

    //映射访问路径,必须是POST请求
    @RequestMapping(value = "/hello",method = {RequestMethod.POST})
    public String index2(Model model){
        model.addAttribute("msg", "hello!");
        return "test";
    }
    

    我们使用浏览器地址栏进行访问默认是Get请求,会报错405;

    如果将POST修改为GET则正常了;

    //映射访问路径,必须是Get请求
    @RequestMapping(value = "/hello",method = {RequestMethod.GET})
    public String index2(Model model){
        model.addAttribute("msg", "hello!");
        return "test";
    }