简介
目的
- REST的目标是为了创建具有良好扩展性的分布式系统。
含义
- 全称:状态表述转换
- 一组网页的网络(一个虚拟状态机)
- 在这些网页上,用户可以通过点击链接来前进(状态转换)
- 点击渲染的结果就是下一个网页(表示程序的下一个状态)被传输到用户那里并渲染好给用户使用
性质
- 协议无关性
- REST是一种架构风格(上层抽象),而不是规范或标准(底层设施)
- REST需要使用规范、协议或标准(例如HTTP、JSON等)来实现这种架构
优势
-
性能:通信简单高效
-
分布式系统的特性:
- 组件交互的可扩展性
- 组件的可修改性
-
可移植性:平台无关
-
可靠性:无状态
-
可视性:API系统外的中间组件(如代理、网关、缓存、日志系统)能够轻松理解并观察客户端和服务端之间的交互。
内容
约束
-
客户端 - 服务器(CS架构)
- 不同的语言和平台
-
无状态
- 无持久连接(无Session)
-
统一的资源接口和界面(API提供者/消费者标准必须完全相同)
- 资源的标识
- URI,不是URL,URL是网址
- 资源/表述分离,格式可以不同
- 媒体类型可以不同(xml格式、json格式……)
- 通过表述来对资源进行操纵
- 当客户端拥有资源表述(通常是资源的数据)时,客户端就有了充足的信息来对资源进行增删改查操作
- 带有自我描述的信息
- 源自REST的无状态性,即客户端进行请求时请求数据中必须携带具有自我描述性的信息,这样服务端才能知道怎么处理这个信息
- 超媒体作为应用程序状态的引擎
- HATEOAS,Hypermedia As The Engine Of Application State
- 服务端返回给客户端的不只是数据,还包含了“下一步能做什么”的链接。
- 资源的标识
-
多层系统
- REST适用于多层架构,层与层之间是互不干扰的,客户端也只能知道对外层
-
可缓存
- 响应信息必须明确指出响应是否可被缓存
-
按需编码(可选)
- 服务器可以扩展、定制客户端
Richardson 成熟度模型(Level3 是前提)
- 用于评估RESTful API成熟度,分为一下四个层级
- Level0:POX(Plain Old XML)沼泽,即API只是用了HTTP协议,其他都不符合RESTful API架构
- Level1:资源,即API的每个资源都映射到了单独的URI,但是HTTP请求方法没有区别
- Level2:动词,即API正确地使用了HTTP请求方法和HTTP状态代码
- Level3:超媒体,使用了HATEOAS,即API会返回驱动应用程序的超链接
标准请求方法
GET:获取资源/集合资源POST:添加资源,返回能获取到这个资源的URI,状态码201- 更新
PUT:替换资源,没有返回,状态码204PATCH:部分更新资源,没有返回,状态码204
DELETE:删除资源,没有返回,状态码204