REST full 全称 REpresentational State Transfer(表征性状态转移)。
基本特点
- 无状态(一次调用返回结果,请求独立,每一次请求都带有足够的信息让服务器去识别,这些信息一般都存在url参数或header中,而服务端能够根据每次请求独立的信息来提供服务,服务器自身并不需要保存客户端状态,无状态特征提高服务端健壮性可扩展性,如无状态登录JWT。无状态特点不存在类似打开连接,访问数据库,关闭连接这种依赖上次调用的情况,不存在类似 WebSocket 这种持久性有状态的连接)
- 面向资源(在RESTfull眼里一切都是资源,在url中只会出现名词而不是动词)
- 使用HTTP动词 (GET查看 POST创建 PUT更新 PATCH部分更新 DELETE删除)
- HATOAS超媒体即应用状态引擎 Hypertext As The En-gine Of Application State(api自我发现机制。超媒体(Hypermedia)= 多媒体(multimedia)+ 超文本(hepertext))
优缺点
- 面向对象(资源)好用,如CRUD。语义明确,轻量级,结构简单。
- 面向过程不好用(如登录动词。。。想要遵循RESTfull风格就很难。。。),粒度太粗(可以对数据塑形降低粒度)。
6个约束与最佳实现
- Client-Server(前后端分离)
- 无状态(请求独立)
- 分层系统(代码分层)
- 统一接口(数据统一。使用http协议,接口的url应该是一系列资源的组合。如,通过什么请求get或post?数据的输出格式?这些信息需要api前后端对接口使用的格式必须达成一致的。但是统一性约束还有另一个要求,服务端的响应信息不应该只包含当前的api数据,还应该包含与当前请求相关的其他url,这样客户端就可以进一步利用这些url对他所感兴趣的内容发起其他请求,也就是restfull风格的api应该具有自我发现功能,简单如分页功能,高级的自我发现机制是HATOAS超媒体即应用状态引擎-restfull精华)
- 可缓存
- 按需代码
Richardson成熟度模型(Richardson Maturity Model)通往真正REST的步骤。
RESTfull之父罗伊大神说过“只有使用了超媒体才能算是真正的REST”。其实绝大部分基于REST的后端服务都不能100%满足这6个约束,RESTfull是一种风格不是规范它不具有强制性。不要为了实现 RESTfull 而 RESTfull,实现业务才是王道。
作者:weichangk