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";
    }

}

值得一提的是 @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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值