• REST风格 | Springboot | 开发风格




    一. REST简介

    REST(Representational State Transfer),表现形式状态转换,在开发的角度则可以理解为访问网络的格式。

    资源描述形式查询对象(get)保存对象(post)
    传统http://localhost/user/getById?id=1http://localhost/user/saveUser
    RESThttp://localhost/user/1http://localhost/user

    通过对比很容易发现REST风格的资源描述形式书写起来更加的简化,访问资源的表达也比传统的资源描述形式更加的隐晦,这是很重要的,能够更好的保护我们的系统。
    但是如果上面保存对象URL是http://localhost/user,那么修改对象的呢?删除对象的呢?

    REST风格URL请求类型
    查询值定对象http://localhost/user/1get(查询)
    查询所有对象http://localhost/userget(查询)
    删除对象http://localhost/user/1delete(删除)
    添加对象http://localhost/userpost(修改更新)
    修改对象http://localhost/userput(修改更新)

    按照REST风格访问资源时使用行为动作区分对资源进行了何种操作,也就是根据请求类型来决定相同的URL的不同的效果,关于请求的类型小编这里就不展开讲了,想要了解的小伙伴可以自行翻阅相关文章。
    值得注意的是:上述行为是约定方式,约定不是规范,可以打破,所以称REST风格,而不是REST规范描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而非单个资源,例如:users、books、accounts.…
    而根据REST风格对资源进行访问称为RESTfu1
    我们经常听到的一句话"使用RESTfu1的形式进行开发就是告诉你访问资源的格式"。

    • REST : 是一种资源描述风格
    • RESTfu1 : 按照REST风格访问资源

    PS:目前这种开发风格在企业中使用比较广泛,所以决定写这么一篇博客,这篇博客基于Springboot开发来实现后面的案例,如果各位读者朋友想了解其他技术栈的相关实现可以给小编留言。

    二. REST风格小案例

    /**
     * 查询所有的用户信息-->/user-->get
     * 根据id查询用户信息-->/user/1-->get
     * 添加用户信息-->/user-->post
     * 修改用户信息-->/user-->put
     * 删除用户信息-->/user/1-->delete
     *
     * 注意:浏览器目前只能发送get和post请求
     * 若要发送put和delete请求,需要在web.xml中配置一个过滤器HiddenHttpMethodFilter
     * 配置了过滤器之后,发送的请求要满足两个条件,才能将请求方式转换为put或delete
     * 1、当前请求的请求方式必须为post
     * 2、当前请求必须传输请求参数_method,_method的值才是最终的请求方式
     */
    @Controller
    public class TestRestController {
    
        //@RequestMapping(value = "/user", method = RequestMethod.GET)
        @GetMapping("/user")
        public String getAllUser(){
            System.out.println("查询所有的用户信息-->/user-->get");
            return "success";
        }
    
        //@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
        @GetMapping("/user/{id}")
        public String getUserById(@PathVariable("id") Integer id){
            System.out.println("根据id查询用户信息-->/user/"+id+"-->get");
            return "success";
        }
    
        //@RequestMapping(value = "/user", method = RequestMethod.POST)
        @PostMapping("/user")
        public String insertUser(){
            System.out.println("添加用户信息-->/user-->post");
            return "success";
        }
    
        //@RequestMapping(value = "/user", method = RequestMethod.PUT)
        @PutMapping("/user")
        public String updateUser(){
            System.out.println("修改用户信息-->/user-->put");
            return "success";
        }
    
        //@RequestMapping(value = "/user/{id}", method = RequestMethod.DELETE)
        @DeleteMapping("/user/{id}")
        public String deleteUser(@PathVariable("id") Integer id){
            System.out.println("删除用户信息-->/user/"+id+"-->delete");
            return "success";
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    值得一提的是 @RequestBody @RequestParam @PathVariable
    区别:

    • @RequestParam :用于接收URL地址传参或表单传参
    • @RequestBody : 用于接收json数据
    • @PathVariable : 用于接收路径参数,使用{参数名称}描述路径参数

    应用:

    • 后期开发中,发送请求参数超过1个时,以json格式为主,@RequestBody应用较广
    • 如果发送非json格式数据,选用@RequestParam接收请求参数\
    • 采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值

    对此Springboot还衍生出了一个注解 @RestController 效果其实就是 @RequestBody + @Controller 更详细的内容各位读者朋友可以去查询相关文章。

    三. 结尾

    REST风格的介绍就到此为止吧,感觉这篇文章写的比较摆烂,有一个值得注意的点是,如果前端想要通过表单直接发送DELETE、PUT是不行的,浏览器 form 表单只支持 GET 与 POST 请求。
    如果想要在表单里面发送delete和put等请求在可在后端配置一个HiddenHttpMethodFilter过滤器。然后前端传参的时候使用input标签的隐藏域指定正真的请求类型。
    这里就不详细展开了,想了解的小伙伴可以自行查找相关文章,有问题的小伙伴可以在评论区留言。

    <form action="springmvc/testRest/1" method="post">
    		
          <input type="hidden" name="_method" value="PUT"/>
          <input type="submit" value="TestRest PUT"/>
    form>
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    开源的大模型
    List append 和 += 的区别
    计算机毕业设计之java+javaweb的校园音乐平台
    HarmonyOS应用API手势方法-RotationGesture
    1465. 切割后面积最大的蛋糕 : 为何仅需处理相邻切割位(多语言题解)
    ESP8266_Rtos3.0环境搭建
    Python9-基于socket的网络编程
    计算机毕业设计选题推荐-课程学习微信小程序/安卓APP-项目实战
    windows系统c语言编译器安装
    c#winform窗体
  • 原文地址:https://blog.csdn.net/Siebert_Angers/article/details/128126560