表现层状态转换

表现层状态转换(英语:Representational State Transfer,缩写:REST)是 Roy Thomas Fielding 博士于2000年在他的博士论文中提出来的一种万维网软件架构风格,目的是便于不同软件/程序在网络(例如互联网)中互相传递信息。表现层状态转换是根基于超文本传输协议(HTTP)之上而确定的一组约束和属性,是一种设计提供万维网络服务的软件构建风格。符合或兼容于这种架构风格(简称为 REST 或 RESTful)的网络服务,允许客户端发出以统一资源标识符访问和操作网络资源的请求,而与预先定义好的无状态操作集一致化。因此表现层状态转换提供了在互联网络的计算系统之间,彼此资源可交互使用的协作性质(interoperability)。相对于其它种类的网络服务,例如 SOAP服务则是以本身所定义的操作集,来访问网络上的资源。 当前在三种主流的Web服务实现方案中,因为REST模式与复杂的SOAP和XML-RPC相比更加简洁,越来越多的web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务运行图书查询;雅虎提供的Web服务也是REST风格的。

要点及标准

需要注意的是,REST是设计风格而不是标准。REST通常基于使用HTTP,URI,和XML以及HTML这些现有的广泛流行的协议和标准。

资源是由URI来指定。 对资源的操作包括获取、创建、修改和删除资源,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。 通过操作资源的表现形式来操作资源。 资源的表现形式则是XML或者HTML,取决于读者是机器还是人,是消费web服务的客户软件还是web浏览器。当然也可以是任何其他的格式,例如JSON。

REST架构的约束条件

  • 客户端-服务器(Client-Server)
  • 无状态(Stateless)
  • 缓存(Cacheability)
  • 统一接口(Uniform Interface)
  • 分层系统(Layered System)
  • 按需代码(Code-On-Demand,可选)

RESTful API

符合REST设计风格的Web API称为RESTful API。它从以下三个方面资源进行定义:

直观简短的资源地址:URI,比如:http://example.com/resources。 传输的资源:Web服务接受与返回的互联网媒体类型,比如:JSONXMLYAML等。 对资源的操作:Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。

REST的优点

  • 可更高效利用缓存来提高响应速度
  • 通讯本身的无状态性可以让不同的服务器的处理一系列请求中的不同请求,提高服务器的扩展性
  • 浏览器即可作为客户端,简化软件需求
  • 相对于其他叠加在HTTP协议之上的机制,REST的软件依赖性更小
  • 不需要额外的资源发现机制
  • 在软件技术演进中的长期的兼容性更好

传统的网站由切图仔写 HTML、CSS 和 JS,也就是静态页面,页面动态化由后端这边提供,使用模板引擎,耦合度非常高。代码无法复用,面向过程编码,违背SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)原则。 目前流行的前后端分离,后端仅提供接口,程序高可用、低耦合,可复用性强,而最流行的接口规范则是 RESTful API,优点明显,无论客户端是网页还是 APP 还是桌面应用,服务端提供的 Json 数据均可使用。一定程度上提升了效率,实现 1 + 1 > 2。