REST
Representational State Transfer = REST
- Representational = 数据的表现形式(
JSON
,XML
等) - State = 当前状态或数据
- Transfer = 数据传输
REST的限制
1.客户端-服务器(Client-Server)
- 关注点分离
- 服务端专注数据存储,提升简单性
- 前端专注用户界面,提升可移植性
2.无状态(Stateless)
- 所用户会话信息都保存在客户端
- 每次请求必须包括所有信息,不能依赖上下文信息
- 服务端不用保存会话信息,提升了简单性、可靠性、可见性
3.缓存(Cache)
- 所有服务端响应都要被标注为
可缓存
或不可缓存
- 减少前后端交互,提升了性能
4.统一接口(Uniform Interface)
- 接口设计尽可能统一通用,提升了简单性和可见性
- 接口与实现解耦,使前后端可以独立开发迭代
5.分层系统(Layered System)
- 每层只知道相邻的一层,后面隐藏的就不知道了
- 客户端不知道是和代理还是真实服务器通信
- 其他层:安全层、负载均衡、缓存层等
6.按需代码(Code-On-Demand)
- 客户端可以下载运行服务端传来的代码(比如
JS
) - 通过减少了一些功能简化了客户端
统一接口的限制
1.资源的标识
- 资源是任何可以命名的事物,比如用户,评论等
- 每个资源可以通过
URI
被唯一地标识
2.表述(Representation)操作资源
- 客户端不能直接操作服务端资源(比如
SQL
) - 客户端应该通过表述来操作资源(比如
JSON
)
3.自描述消息
- 每个消息(请求或相应)必须提供足够的信息让接收者理解
- 媒体类型:
application/json
、application/xml
- HTTP方法:
GET
、POST
、DELETE
- 是否缓存:
Cache-Control
4.超媒体作为应用状态引擎
- 超媒体:带文字的链接
- 应用状态:一个网页
- 引擎:驱动、跳转
RESTful API
- 基本的URI,如
https://api.github.com/users
- 标准
HTTP
方法,如:GET
、POST
、PUT
、PATCH
、DELETE
等 - 传输的数据媒体类型,如:
JSON
,XML
等