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/jsonapplication/xml
  • HTTP方法:GETPOSTDELETE
  • 是否缓存:Cache-Control

4.超媒体作为应用状态引擎

  • 超媒体:带文字的链接
  • 应用状态:一个网页
  • 引擎:驱动、跳转

RESTful API

  • 基本的URI,如https://api.github.com/users
  • 标准HTTP方法,如:GETPOSTPUTPATCHDELETE
  • 传输的数据媒体类型,如:JSONXML