什么是REST
- REST (Representational State Transfer):表述性状态转移,分布式超媒体软件的一种架构风格。
- 一套简单的设计原则、一种架构风格(或模式),不是一种具体的标准或框架。
- 基于使用HTTP、URI等现有的广泛流行的协议和标准,并由几个核心抽象概念支撑。
- 对Web的本质回归:一种真实描述Web的方式,不被特定时期的特定应用程序概念歪曲。
- 提供区分良好实践和糟糕实践的途径:判断特定实践是否与Web架构一致。
资源
-
URI规范指出:
资源可以是任何有标示的东西;
并非所有的资源都是通过网络能够获取的。
-
任何事物,只要有被引用的必要,就是一个资源(resource)。它可以是一个事物,也可以是一个抽象的概念。
-
通常一个资源是某个可以存放在计算机上并体现为比特流的事物。在Web中,可以这样认为----资源是URI标示的东西。
表示
- 资源和表示不是一码事。Web上获取的不是资源,而是资源的表示。
- 对于给定的资源,可以有很多不同的表示。
状态
- 在客户-服务端模式下,让客户端维护应用状态,并确保服务端向服务器发出的请求都包含理解请求所需的全部信息,而服务器不应该维护该状态。
- REST式解决方案是使用URI。每个概念上独立的资源都可使用单个URI,不希望通过Cookie或隐藏在有效负载的参数来提供额外信息。
REST约束和风格
- URI表示资源
- CURD操作
- 状态表述性转移
- 无状态服务
- HTTP状态码
- Cache控制
- Proxy
Rest核心是架构以资源为核心的模型
REST关键原则
- 为所有资源定义ID
- 将所有资源链接在一起
- 使用标准方法
- 资源多重表示
- 无状态通信
为所有资源定义ID
- 无论Web中的资源代表单一数据项、数据项集合、虚拟亦或实际的对象还是计算结果等,都可以使用URI标识。
使用标准方法
- 常用的HTTP标准方式是GET/POST。除此之外,标准方法集合中还有PUT、DELETE、HEAD、OPTIONS等八种方法
RESTful
-
RESTful:符合REST约束风格和原则的应用程序或设计就是RESTful
举例:
/emp/1 HTTP GET 查询id=1的emp
/emp/1 HTTP DELETE 删除id=1的emp
/emp/1 HTTP PUT 更新emp
/emp/1 HTTP POST 新增emp
Token认证机制
- RESTful提供的API是无状态的,即下一次调用请求与当前的调用请求时完全无关,但这就无法保证系统资源的安全性。
- Token机制(令牌机制)就是用来解决无状态和安全性之间的矛盾。其实现原理如下:
- 用户发送用户名和密码(一般密码加密),请求验证通过;
- 服务器判断用户名和密码是否正确。
- 服务器验证通过,返回Token及过期时间
- 所有请求携带返回的Token在过期时间内即可通过Token验证并正常使用RESTful API(服务器验证Token过期,则无法正常使用RESTful API,需要重新请求验证)