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