开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
PS:已经更文1天
前言:
在学习用户中心开发的时候提到restful风格,第一次听说这个词很好奇于是自己就去查阅了相关资料。
1、restful是什么?
维基百科:一种万维网软件架构风格,目的是便于不同软件/程序在网络(例如互联网)中互相传递信息
讲了很多一句没听懂是真的,它的英文翻译过来是表现层状态转移(REpresentational State Transfer)
那表现层状态转移又是什么???
因为翻译的问题,在其它地方有叫做表述层状态转移。那么究竟是什么表述?表述其实就是资源,不知道这样说是不是有点牵强。资源可以是具体实物(比如电脑手机),又可以是抽象的(比如人脉)。
2、URI和资源
要让人知道这是一种资源就需要唯一的标识。我们用URI来标识资源。既是某个文件的地址又是资源的名称 (例如:github.com/2280704252/…
如果某些信息没有使用URI来表示,那它就不能算是一个资源, 只能算是资源的一些信息而已。比如我们的用户信息表,单独一条信息(电话号码,家庭地址,年龄)。
- 在对资源进行操作时候并不会改变资源标识URI(比如往某个文件增加一行内容或者删除一行内容)
3、状态转移
表现层(表述层)只是表示资源,那么状态转移又是什么?
Rest基本原理:所有的操作都是无状态的。这边我们可以简单解释一下什么叫无状态
在讲无状态前我们先来讲讲什么是有状态。
这个状态是相对于Web服务。当客户端向服务器端发送请求的时候,服务器端会保存客户端的信息(比如登录状态),这就意味着这个客户端的所有请求只能被保存了该客户端信息的服务器所处理。
而无状态,服务器端不会保存用户的任何状态,每一个web请求都是独立的。它所有的请求都能被任何一台服务器处理,因为在它的请求中就包含了自己的状态信息。
标准的http协议是无状态的,无连接的
我们在上面已经介绍过了什么是无状态,那无连接又是什么?
-
客户端每一次访问都是无连接的,服务器端会从队列里一个一个处理请求,处理完一个关闭一个。
-
客户端的每一次请求服务器端都会认为是一次新的请求,上一次会话和一下会话无关。
-
服务器端和客户端这种无状态连接,客户端可以向服务器端多次发送请求,而不并等待上一个请求完成。提高了服务器端的可用性。
因为无状态原则的特性,让restful在分布式系统中得到了广泛的应用
分布式系统
【注图片来自:www.sohu.com/a/228514366…
4、表现层状态转移
所有的资源都是保存在服务器的,要使服务器资源发生变换(修改某个文件,或者简答来说对数据库的增删改查等等)得使用某种手段使服务器资源发生变换。而这种变化是发生在表现层的,这就是表现层状态转移。
这里某种手段其实就是http的四种方法:POST GET DELETE PUT
| POST | 新增一个没有id的资源 |
|---|---|
| GET | 获取一个资源 |
| DELETE | 删除一个资源 |
| PUT | 更新一个含有id的资源或新增一个含id的资源(如果id不存在) |
举个例子:
比如我们要删除数据库某条id为1的数据,传统做法:
http://127.0.0.1:8080/springmvc/data?action=delete&id=1
删除的动作是直接表现出来的
而使用rest则变成
http://127.0.0.1:8080/springmvc/1
restful风格下这里我们的删除动作却是塞到了请求信息中
5、总结
一句话来说就是restful是一种软件架构风格 而rest是架构的原则,满足rest原则的架构设计就是restful。这里rest最重要的原则是:客户端和服务器之间的交互在请求之间是无状态的。客户端要请求服务器端就必须在请求中包含所必须的请求信息,否则服务器端是无法理解的。