表现层状态转化(英文:Representational State Transfer,简称REST)是Roy Thomas Fielding博士(HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席)于2000年在他的博士论文 “Architectural Styles and the Design of Network-based Software Architectures” 中提出来的一种分布式软件架构风格。HTTP 其实正是为 REST 而生的。
当前主流的分布式应用架构风格:
- SOAP/WSDL
- XML-RPC
- RESTful
需要注意的是,REST是设计风格而不是标准,符合REST设计风格的Web API称为RESTful API。REST通常基于使用HTTP,URI,和XML以及HTML这些现有的广泛流行的协议和标准。
1. 概念阐述
1.1 Resources
REST的名称”表现层状态转化”中,省略了主语。”表现层”其实指的是”资源”(Resources)的”表现层”。 所谓”资源”,就是网络上的一个实体。它可以是一段文本、一张图片、一种服务,总之就是一个具体的实在。URI 是每一个资源的独一无二的地址,要操作这个资源,访问它的URI就可以。
1.2 Representation
“资源”是一种信息实体,它有外在表现形式。我们把”资源”具体呈现出来的形式,叫做它的”表现层”(Representation),如:HTML、XML、json、jpg… URI 应该只代表”资源”实体的位置,不代表它的表现形式。它的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对”表现层”的描述。
1.3 State Transfer
客户端必须通过明确的 HTTP 方法(GET、POST、PUT、DELETE)来操纵资源,让服务器端发生”状态转化”(State Transfer)。
REST的使用原则:
- Messages:用明确的HTTP方法来操作资源,包括获取(GET)、创建(POST)、修改(PUT)和删除(DELETE)资源。
- Stateless:HTTP连接是无状态的(也就是不记录每个连接的信息),而REST传输会包含应用的所有状态信息,因此可以大幅降低对HTTP连接的重复请求资源消耗。
REST的优点:
- 可更高效利用缓存来提高响应速度
- 通讯本身的无状态性可以让不同的服务器的处理一系列请求中的不同请求,提高服务器的扩展性
- 浏览器即可作为客户端,简化软件需求
- 相对于其他叠加在HTTP协议之上的机制,REST的软件依赖性更小
- 不需要额外的资源发现机制
- 在软件技术演进中的长期的兼容性更好