参考:https://blog.youkuaiyun.com/qq_21383435/article/details/80032375
restful是命名规范
URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作;
考虑的不仅仅是命名规范,而要把自己的思考角度放在
一个url就是一个资源,所有的操作都是对资源的更改的角度
系统的特征
- 客户-服务器(Client-Server),提供服务的服务器和使用服务的客户需要被隔离对待。
- 无状态(Stateless),来自客户的每一个请求必须包含服务器处理该请求所需的所有信息。换句话说,服务器端不能存储来自某个客户的某个请求中的信息,并在该客户的其他请求中使用。
- 可缓存(Cachable),服务器必须让客户知道请求是否可以被缓存。(Ross:更详细解释请参考 理解本真的REST架构风格 以及
StackOverflow 的这个问题 中对缓存的解释。) - 分层系统(Layered
System),服务器和客户之间的通信必须被这样标准化:允许服务器和客户之间的中间层(Ross:代理,网关等)可以代替服务器对客户的请求进行回应,而且这些对客户来说不需要特别支持。 - 统一接口(Uniform
Interface),客户和服务器之间通信的方法必须是统一化的。(Ross:GET,POST,PUT.DELETE, etc) - 支持按需代码(Code-On-Demand,可选),服务器可以提供一些代码或者脚本(Ross:Javascrpt,flash,etc)并在客户的运行环境中执行。这条准则是这些准则中唯一不必必须满足的一条。(Ross:比如客户可以在客户端下载脚本生成密码访问服务器。)
详细解释
状态分为应用状态和资源状态
无状态(Stateless)针对应用状态和资源状态的,而无状态应该是针对资源状态来说的,应用状态还是有的而且应该由客户端来维持。不然无状态的工资信息拿到url,谁都可以随便查看了,这个需要有所谓的登录态,权限校验等应用状态来保证
所谓无状态的,即所有的资源,都可以通过URI定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而改变。有状态和无状态的区别,举个简单的例子说明一下。如查询员工的工资,如果查询工资是需要登录系统,进入查询工资的页面,执行相关操作后,获取工资的多少,则这种情况是有状态的,因为查询工资的每一步操作都依赖于前一步操作,只要前置操作不成功,后续操作就无法执行;如果输入一个url即可得到指定员工的工资,则这种情况是无状态的,因为获取工资不依赖于其他资源或状态,且这种情况下,员工工资是一个资源,由一个url与之对应,可以通过HTTP中的GET方法得到资源,这是典型的RESTful风格。