这是我参与更文挑战的第16天,活动详情查看:更文挑战
1.什么是RESTful
restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 ——百度百科 简单来说,就是提供了一种规则,能够让api更加规范,易懂。
-
REST的解释 REST是Representational State Transfer的缩写,翻译过来就是”表现层状态转化“。表现层值得是把资源呈现出来的一中形式,像HTML;状态转移是指让服务器发生状态的变化(数据和状态的改变等);我感觉就像是前后端交互过程的一个称呼。
-
REST架构风格最重要的架构约束有6个:
- 客户-服务器(Client-Server) 通信只能由客户端单方面发起,表现为请求-响应的形式。
- 无状态(Stateless) 通信的会话状态(Session State)应该全部由客户端负责维护。
- 缓存(Cache) 响应内容可以在通信链的某处被缓存,以改善网络效率。
- 统一接口(Uniform Interface) 通信链的组件之间通过统一的接口相互通信,以提高交互的可见性。
- 分层系统(Layered System) 通过限制组件的行为(即每个组件只能“看到”与其交互的紧邻层),将架构分解为若干等级的层。
- 按需代码(Code-On-Demand,可选) 支持通过下载并执行一些代码(例如Java Applet、Flash或JavaScript),对客户端的功能进行扩展。 ———百度百科
- 在什么情况下使用 在以调动资源为主的接口设计中就可以使用了
2.为什么要使用RESTful风格
- 更加语义化,方便理解
- 具有安全性和幂等性(同一个请求发送一次或多次对服务器的影响都是一样的)
- 让api的设计面向资源化
因为每一个URI代表一种资源,所以在设计api时不能使用动词,什么get,update,delete都不应该出现在uri中。
3.如何使用
- RESTful风格需要使用到的动词
安全性: GET(SELECT):从服务器取出资源(一项或多项)。 幂等性: POST(CREATE):在服务器新建一个资源 PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。 PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。 DELETE(DELETE):从服务器删除资源。 ———不常用的动词——— HEAD:获取资源的元数据。 OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。 —— 阮一峰的网络日志 这些动词是HTTP协议提供的
- 前端以axios为例
//不同的动词,修改method即可(axios.后面的动词)
//post需要在uri后面使用一个json格式的数据
this.axios.delete(`/users/`+id
)
.then((response)=> {
console.log(error);
})
.catch((error)=> {
console.log(error);
});
- 后端以springMVC为例
@RestController
@RequestMapping("/users")
public class userController{
@RequestMappering(value="/{id}",method=RequestMethod.DELETE)
public void delete(@PathVariable("id")int id){
}
}
大概就是这个意思
- 一些常见的使用 【GET】 /users # 查询用户信息列表
【GET】 /users/1001 # 查看某个用户信息
【POST】 /users # 新建用户信息
【PUT】 /users # 更新用户信息(全部字段)
【PATCH】 /users/ # 更新用户信息(部分字段)
【DELETE】 /users/1001 # 删除用户信息
通过变换参数来实现功能的扩展,像【GET】,没有传入参数,就是查询全部;传入了一个id,就是查询查询一个用户;传递一组id,就是查询一组用户。每个【GET】都在后端对应一个方法。
- 常见的误区 uri中不应该包含动词,应该全部使用名词,尽量使用复数。 若返回视图,把表单中name为_method的input值改为GET、POST、HEAD,不能使用PUT、DELETE等。
——————————————————————————————
你知道的越多,不知道的就越多。
如果本文章内容有问题,请直接评论或者私信我。如果觉得我写得还不错的话,点个赞也是对我的支持哦
未经允许,不得转载
微信搜【程序员徐小白】,关注即可第一时间阅读最新文章。回复【面试题】有我准备的50道高频校招面试题,以及各种学习资料。