RESTful简述

162 阅读3分钟

RESTful概念

REST(英文:Representational State Transfer,简称REST,意思:表述性状态转换,描述了一个架构样式的网络系统),是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件,主要用于客户端和服务端交互类的软件。基于这个风格设计的软件可以更简介,更有层次,更易于实现缓存等机制。

RESTfulRESTful是一种架构的规范与约束、原则,符合这种规范的架构就是RESTful架构

RESTful的特性

  • 资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息,用一个URI(统一资源定位符)指向它,每种资源对应一个特性的URI。要获取这个资源,访问它的URI就可以。
  • 表现层(Representation):把资源具体呈现出来的形式,叫做它的表现层。
  • 状态转换(State Transfer):每发出一个请求,就代表了客户端和服务器的一次交互过程。如果客户端想要操作服务器,必须通过某种手段,让服务器端发生“状态转换”(State Transfer)。而这种转换是建立在表现层之上的,所以就是“表现层状态转换”。

相关注解

作用注解
@RequestBody接收的是一个json字符串,String会帮我们把这个字符串转为对象
@RestController由 @Controller + @ResponseBody组成(返回 JSON 数据格式)
@PathVariableURL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到控制器处理方法的形参中
@RequestMapping注解用于请求地址的解析,是最常用的一种注解
@GetMapping查询操作
@PostMapping添加操作
@PutMapping更新操作
@DeleteMapping删除操作
@RequestParam将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)

@RequestBody@RequestParam@PathVariable的区别与应用

  • 区别:

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

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

传统模式URI与RESTful风格对比

1.查询

查询传统RESTREST后台接收
查询所有http://localhost/employee/listhttp://localhost/employees@RequestMapping(value = “/employees”, method = RequestMethod.GET)
查询单个http://localhost/employee/list?id=1http://localhost/employees/1@RequestMapping(value = “/employees/{id}”, method = RequestMethod.GET)
@ResponseBody
public Employee queryById(@PathVariable Long id) {}

2.添加

传统RESTREST后台接收
http://localhost/employee/addhttp://localhost:8080/employees@RequestMapping(value = “/employees”, method = RequestMethod.POST)
public Employee add(@ModelAttribute(“emp”) Employee employee) {}

3.修改

传统RESTREST后台接收
http://localhost/employee/updatehttp://localhost:8080/employees@RequestMapping(value = “/employees”, method = RequestMethod.PUT)
public Employee update(@ModelAttribute(“emp”) Employee employee) {}

4.删除

传统RESTREST后台接收
http://localhost/employee/deletehttp://localhost:8080/employees/{id}@RequestMapping(value = “/employees/{id}”, method = RequestMethod.DELETE)
@ResponseBody
public JsonResult delete(@PathVariable Long id) {}