RESTful架构(学习笔记)

(学习笔记仅帮助自己理解记忆,部分内容可能存在理解错误,如有发现,还望指出)

什么是REST:

  • Representational State Transfer(表述性状态转移)
  • REST并不是一种创新技术,它指的是一组架构约束条件和原则
  • 符合REST的约束条件和原则的架构,就称它为RESTful架构

RESTFul核心内容:

  1. 资源与UR:资源:图片文字描述等uri对应一个资源

  2. 资源的表述:请求于响应中对于资源的描述,资源在客户端和服务器之间传送状态转移:客户端发生变迁,进入到后续的状态,客户端获取资源之后可能对资源修改,使他在服务器保存的状态不一样。

  3. 状态转移:服务器中改变资源的状态,客户端发生变迁,进入到后续的状态,客户端获取资源之后可能对资源修改,使他在服务器保存的状态不一样。

Restful架构特点

  1. 统一了客户端访问资源的接国

  2. url更加简洁,易于理解,便于扩展

  3. 有利于不同系统之间的资源共享

统一资源接口

RESTful架构应该遵循统一接口原则,统一接口包含了一组受限的预定义的操作,不论什么样的资源,都是通过使用相同的接口进行资源的访问。接口应该使用标准的HTTP方法如GET,PUT和POST,并遵循这些方法的语义。

如果按照HTTP方法的语义来暴露资源,那么接口将会拥有安全性和幂等性的特性,例如GET和HEAD请求都是安全的,
无论请求多少次,都不会改变服务器状态。而GET、HEAD、PUT和DELETE请求都是幂等的,无论对资源操作多少次,
结果总是一样的,后面的请求并不会产生比第一次更多的影响

GET

安全且幂等
获取表示
变更时获取表示(缓存)
200(OK) - 表示已在响应中发出
204(无内容) - 资源有空表示
301(Moved Permanently) - 资源的URI已被更新
303(See Other) - 其他(如,负载均衡)
304(not modified)- 资源未更改(缓存)
400 (bad request)- 指代坏请求(如,参数错误)
404 (not found)- 资源不存在
406 (not acceptable)- 服务端不支持所需表示
500 (internal server error)- 通用错误响应
503 (Service Unavailable)- 服务端当前无法处理请求

POST

不安全且不幂等
使用服务端管理的(自动产生)的实例号创建资源
创建子资源
部分更新资源
如果没有被修改,则不过更新资源(乐观锁)
200(OK)- 如果现有资源已被更改
201(created)- 如果新资源被创建
202(accepted)- 已接受处理请求但尚未完成(异步处理)
301(Moved Permanently)- 资源的URI被更新
303(See Other)- 其他(如,负载均衡)
400(bad request)- 指代坏请求
404 (not found)- 资源不存在
406 (not acceptable)- 服务端不支持所需表示
409 (conflict)- 通用冲突
412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)
415 (unsupported media type)- 接受到的表示不受支持
500 (internal server error)- 通用错误响应
503 (Service Unavailable)- 服务当前无法处理请求

PUT

不安全但幂等
用客户端管理的实例号创建一个资源
通过替换的方式更新资源
如果未被修改,则更新资源(乐观锁)
200 (OK)- 如果已存在资源被更改
201 (created)- 如果新资源被创建
301(Moved Permanently)- 资源的URI已更改
303 (See Other)- 其他(如,负载均衡)
400 (bad request)- 指代坏请求
404 (not found)- 资源不存在
406 (not acceptable)- 服务端不支持所需表示
409 (conflict)- 通用冲突
412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)
415 (unsupported media type)- 接受到的表示不受支持
500 (internal server error)- 通用错误响应
503 (Service Unavailable)- 服务当前无法处理请求

DELETE

不安全但幂等
删除资源
200 (OK)- 资源已被删除
301 (Moved Permanently)- 资源的URI已更改
303 (See Other)- 其他,如负载均衡
400 (bad request)- 指代坏请求
404 (not found)- 资源不存在
409 (conflict)- 通用冲突
500 (internal server error)- 通用错误响应
503 (Service Unavailable)- 服务端当前无法处理请求

controller层对应注解

@GetMapping

  • 处理get请求
  • @RequestMapping(value = “/get/{id}”, method=RequestMethod.GET)等同于@GetMapping("/get/{id}")

@PostMapping

  • 处理post请求
  • @RequestMapping(value = “/get/{id}”,method = RequestMethod.POST)等同于@PostMapping("/get/{id}")

@PutMapping

  • 和PostMapping作用等同,都是用来向服务器提交信息;
  • 如果是添加信息,倾向于用@PostMapping;
  • 如果是更新信息,倾向于用@PutMapping;

@DeleteMapping

  • 删除URL映射

@PathVariable

  • 指定某形参的值为URL对应的占位

@PatchMapping

  • 不知道

RESTful开发风格

传统: http://localhost:8080/show?参数名=参数值

RESTful风格:http://localhost:8080/show/参数值

代码示例:

RESTful风格的编写:

<form action="/edit/${i.cId}" method="post">
   	 <button type="submit" value="编辑"></button>
 </form>
	@PostMapping(value="/edit/{id}")
    public String editCourse(@PathVariable("id")Integer id, Model model){
        Course course = cs.selCourseById(id);
        model.addAttribute("course",course);
        return "updCourse";
    }

RESTful架构实现:

<form action="/upd" method="post">
	<input type="hidden" name="_method" value="put" />
	<....>
</form>
	@PutMapping(value = "/upd")
    public String updCourse(Course course,Model model){
        cs.updCourse(course);
        model.addAttribute("courses",cs.getAllCourse());
        return "redirect:/rdct";
    }

报错情况(405):

Message JSPs only permit GET POST or HEAD

解决:

  1. 在jsp页面头部声明加上: isErrorPage=“true”
  2. 将return改为重定向
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值