RESTful设计风格的个人理解

1.什么是RESTful

restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 ——百度百科
简单来说,就是提供了一种规则,能够让api更加规范,易懂。

  1. REST的解释
    REST是Representational State Transfer的缩写,翻译过来就是”表现层状态转化“。表现层值得是把资源呈现出来的一中形式,像HTML;状态转移是指让服务器发生状态的变化(数据和状态的改变等);我感觉就像是前后端交互过程的一个称呼。

  2. REST架构风格最重要的架构约束有6个:

  • 客户-服务器(Client-Server)
    通信只能由客户端单方面发起,表现为请求-响应的形式。
  • 无状态(Stateless)
    通信的会话状态(Session State)应该全部由客户端负责维护。
  • 缓存(Cache)
    响应内容可以在通信链的某处被缓存,以改善网络效率。
  • 统一接口(Uniform Interface)
    通信链的组件之间通过统一的接口相互通信,以提高交互的可见性。
  • 分层系统(Layered System)
    通过限制组件的行为(即每个组件只能“看到”与其交互的紧邻层),将架构分解为若干等级的层。
  • 按需代码(Code-On-Demand,可选)
    支持通过下载并执行一些代码(例如Java Applet、Flash或JavaScript),对客户端的功能进行扩展。
    ———百度百科
  1. 在什么情况下使用
    在以调动资源为主的接口设计中就可以使用了

2.为什么要使用RESTful风格

  • 更加语义化,方便理解
  • 具有安全性和幂等性(同一个请求发送一次或多次对服务器的影响都是一样的)
  • 让api的设计面向资源化

因为每一个URI代表一种资源,所以在设计api时不能使用动词,什么get,update,delete都不应该出现在uri中。

3.如何使用

  1. RESTful风格需要使用到的动词

安全性:
GET(SELECT):从服务器取出资源(一项或多项)。
幂等性:
POST(CREATE):在服务器新建一个资源
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
DELETE(DELETE):从服务器删除资源。
———不常用的动词———
HEAD:获取资源的元数据。
OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。
—— 阮一峰的网络日志
这些动词是HTTP协议提供的

  1. 前端以axios为例
//不同的动词,修改method即可(axios.后面的动词)
//post需要在uri后面使用一个json格式的数据
this.axios.delete(`/users/`+id
)
.then((response)=> {
    console.log(error);
})
.catch((error)=> {
    console.log(error);
});
  1. 后端以springMVC为例
@RestController
@RequestMapping("/users")
public class userController{
	@RequestMappering(value="/{id}",method=RequestMethod.DELETE)
	public void delete(@PathVariable("id")int id){
	}
}

大概就是这个意思

  1. 一些常见的使用
    【GET】 /users # 查询用户信息列表
    【GET】 /users/1001 # 查看某个用户信息
    【POST】 /users # 新建用户信息
    【PUT】 /users # 更新用户信息(全部字段)
    【PATCH】 /users/ # 更新用户信息(部分字段)
    【DELETE】 /users/1001 # 删除用户信息
    通过变换参数来实现功能的扩展,像【GET】,没有传入参数,就是查询全部;传入了一个id,就是查询查询一个用户;传递一组id,就是查询一组用户。每个【GET】都在后端对应一个方法。

  2. 常见的误区
    uri中不应该包含动词,应该全部使用名词,尽量使用复数。
    若返回视图,把表单中name为_method的input值改为GET、POST、HEAD,不能使用PUT、DELETE等。

如果本文存在错误,请直接评论或私信我

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章