德胜云资讯,添加一些关于程序相关的内容,仅供大家学习交流(https://www.wxclwl.com)
日期:2023/03/26 10:58作者:陈智筠人气:
第一章 RESTFurl风格交互方式(重要) 第一节 RESTFurl概述 1. REST的概念
REST:Representational State Transfer,表现层资源状态转移。
定位:互联网软件架构风格倡导者:Roy Thomas Fielding文献:Roy Thomas Fielding的博士论文2. REST要解决的问题: 将针对功能设计系统转变成针对资源设计系统传统的软件系统仅在本地工作,但随着项目规模的扩大和复杂化,不但整个项目会拓展为分布式架构,很多功能也会通过网络访问第三方接口来实现。在通过网络访问一个功能的情况下,我们不能轻易假设网络状况稳定可靠。所以当一个请求发出后没有接收到对方的回应,那我们该如何判定本次操作成功与否?
下面以保存操作为例来说明一下针对功能和针对资源进行操作的区别:
针对功能设计系统保存一个 Employee 对象,没有接收到返回结果,判定操作失败,再保存一次。但是其实在服务器端保存操作已经成功了,只是返回结果在网络传输过程中丢失了。而第二次的补救行为则保存了重复、冗余但 id 不同的数据,这对整个系统数据来说是一种破坏。
针对资源设计系统针对 id 为 3278 的资源执行操作,服务器端会判断指定 id 的资源是否存在。如果不存在,则执行保存操作新建数据;如果存在,则执行更新操作。所以这个操作不论执行几次,对系统的影响都是一样的。在网络状态不可靠的情况下可以多次重试,不会破坏系统数据。
幂等性:如果一个操作执行一次和执行 N 次对系统的影响相同,那么我们就说这个操作满足幂等性。而幂等性正是 REST 规范所倡导的。3. RESTFul风格的架构特点3.1 通过URL就知道要操作什么资源
REST是针对资源设计系统,所以在REST中一个URL就对应一个资源, 为实现操作幂等性奠定基础。
3.2 通过Http请求的方式就知道要对资源进行何种操作
在REST中,针对同一资源的增删改查操作的URL是完全相同的,它是通过Http协议的不同请求方式来区分不同操作的
REST 风格主张在项目设计、开发过程中,具体的操作符合 HTTP 协议定义的请求方式的语义。
操作
请求方式
查询操作
GET
保存操作
POST
删除操作
DELETE
更新操作
PUT
另有一种说法:
POST 操作针对功能执行,没有锁定资源 id,是非幂等性操作。PUT 操作锁定资源 id,即使操作失败仍然可以针对原 id 重新执行,对整个系统来说满足幂等性。id 对应的资源不存在:执行保存操作
id 对应的资源存在:执行更新操作
3.3 URL更加简洁也更加隐晦
REST风格提倡 URL 地址使用统一的风格设计,从前到后各个单词使用斜杠分开,不使用问号键值对方式携带请求参数,而是将要发送给服务器的数据作为 URL 地址的一部分,以保证整体风格的一致性。还有一点是不要使用请求扩展名。
使用问号键值对的方式给服务器传递数据太明显,容易被人利用来对系统进行破坏。使用 REST 风格携带数据不再需要明显的暴露数据的名称。
操作
传统风格
REST 风格
保存
/CRUD/saveEmp
URL 地址:/CRUD/emp 请求方式:POST
删除
/CRUD/removeEmp?empId=2
URL 地址:/CRUD/emp/2 请求方式:DELETE
更新
/CRUD/updateEmp
URL 地址:/CRUD/emp 请求方式:PUT
查询(表单回显)
/CRUD/editEmp?empId=2
URL 地址:/CRUD/emp/2 请求方式:GET
第二节 四种请求方式的映射 1. 为什么要进行请求方式的映射
在 HTML 中,GET 和 POST 请求可以天然实现,但是 DELETE 和 PUT 请求无法直接做到。SpringMVC 提供了 HiddenHttpMethodfilter 帮助我们将 POST 请求转换为 DELETE 或 PUT 请求。
2. 具体执行映射操作
2.1 映射PUT 请求
2.1.1 修改web.xml文件
hiddenHttpMethodFilter org.springframework.web.filter.HiddenHttpMethodFilter hiddenHttpMethodFilter /*
2.1.2 页面的表单
要点1:原请求方式必须是 post要点2:新的请求方式名称通过请求参数发送要点3:请求参数名称必须是 _method要点4:请求参数的值就是要改成的请求方式发送请求2.1.3 handler方法
@PutMapping("/movie") public String updateMovie(){ logger.debug("PUT请求...."); return "target"; }
2.2 映射DELETE请求
2.2.1 web.xml中要维持之前映射PUT请求的配置
2.2.2 前端页面
通常删除超链接会出现在列表页面:
将XXX请求转换为DELETE请求
创建负责转换的表单
使用vue给删除超链接绑定单击响应函数:
引入vue(这个需要自己去vue官方网站下载 https://cn.vuejs.org/)