REST(Representational State Transfer)
Posted on 16/12/2019REST(Representational State Transfer)
REST是一种软件架构风格,这种风格包含了一系列用于创建网络服务(Web Service)的约束(Constraint)。满足这些约束的网络服务称为 RESTful 风格的网络服务。
网络资源是互联网上可以通过URI定位或访问的文档、数据、数据库记录等一系列资源。通过URI向RESTful风格的网络服务发送网络访问请求,RESTful 风格的网络服务的响应向客户端发送以HTML、XML、JSON等格式的响应。一般通过HTTP协议访问 RESTful 风格的网络服务。RESTful 风格的网络服务支持HTTP协议支持的方法(method)对网络资源进行操作,常见的方法有:GET, POST, DELETE, PUT, PATCH等。GET, POST, DELETE方法具有幂等性,即向网络服务放松多次提交,对网络资源的影响相同。
满足 RESTful 风格的网络服务可以获得一系列的 非功能性属性,这些属性如下:
- 高性能
- 复用性好
- 便于扩展
RESTful风格的网络服务应符合以下6点约束:
Client-Server 架构
RESTful 风格的网络应用是Client-Server架构的,这种架构有利于将数据展示和数据存储解藕。数据可以根据需要以不同的形式展示。同时,数据存储可以根据需要进行扩展。对数据展示和数据存储相互分离,互不影响。
通信的无状态
客户端与服务端之间的通信是无状态的,即服务端不记录有关客户端的任何信息,客户端的通信报文中包含通信所需的所有信息。
分层设计
客户端不能感知是直接与服务端通信还是与中间层通信。分层设计具有如下好处:
- 方便的增加通用的功能性分层,比如防火墙,用于增强安全性。
- 增加缓存,减少客户端与服务端之间的通信,增加性能。
- 分层中加入负载均衡,可以提升服务器的性能。
缓存功能
网络资源应描述其是否支持缓存,以及缓存的时间限制,这样网络资源可以在客户端和中间层缓存,减少不必要的通信,增强性能。
根据需要,返回增强客户端功能的应用
服务端通过返回Applet或Javascript脚本,扩展客户端功能。
统一接口
这是 RESTful 风格网络应用最基本的限制,包括以下4个方面:
- 客户端通过统一的URI访问网络资源,并且网络资源的展现形式并不是其存储形式。不同的数据展示形式,所访问的URI相同。客户端与服务端之间通过MIME来确定网络资源的展示形式。
- 服务端返回的网络资源包含对该资源进行操作所必须的要素。
- 服务端返回的网络资源是自我描述的,比如,应包含该资源的媒体类型、编码方式等。
- HATEOAS(Hypermedia as the engine of application state):服务端返回的网络资源,应包括进行下一步相关操作所需的URI。