REST
REST(Representational State Transfer),是 Roy Fielding 博士于 2000 年在他的博士论文《Architectural Styles and the Design of Network-based Software Architectures》中提出来的一种为分布式超媒体系统设计的软件架构风格。REST 提出了一些设计概念和准则:
- 所有事物都被抽象为资源(resource)
- 每个资源对应一个唯一的资源标识(resource identifier)
- 使用统一接口对资源进行操作
- 对资源的各种操作不会改变资源标识
- 所有操作无状态
特征
-
客户端-服务器架构 -- Client–server architecture
提供服务的服务器和使用服务的客户端需要被隔离对待。
-
无状态 -- Stateless
服务器不在客户端多个请求之间存储共享的上下文信息,即客户端发出的每个请求必须包含服务器处理该请求所需的全部信息。
-
可缓存 -- Cacheability
为了提高网络效率,响应应该可以被标示成可缓存的或是不可缓存的。
-
分层系统 -- Layered system
-
统一接口 -- Uniform interface
数据操作(CRUD:Create,Read,Update,Delete)分别对应于 HTTP 方法:POST,GET,PUT,DELETE。
-
按需编码(可选) -- Code on demand (optional)
特点
- 基于 HTTP 协议,利用 HTTP 本身特征,如 HTTP 动词、状态码等
- 面向资源,通过 URI 暴露
- 对资源的获取、创建、修改和删除对应 HTTP 协议的
GET
、POST
、PUT
、DELETE
方法 - 连接无状态
- 利用 Cache 机制提升性能
- 与传统的 SOAP 和 XML-RPC 相比更加简洁
设计准则
- 网络上所有事物都被抽象为资源(resource),资源是数据和表现形式的组合
- 每个资源对应一个唯一的资源标识符(resource identifier)
- 通过通用的连接器接口对资源进行操作(generic connector interface)
- 对资源的各种操作不会改变资源标识符
- 所有操作都是无状态的(stateless)
RESTful
符合 REST 架构约束的 Web 服务 API 称为 RESTful API。
基于 HTTP 的 RESTful API 定义需要满足以下要求:
- 一个基础 URL,如
http://api.example.com/resources
- 定义状态转换数据元素的媒体类型