RESTFUL
定义
REST(Representational State Transfer):(资源)表现层状态转换是 Roy Thomas Fielding 博士于 2000 年在他的博士论文中提出来的一种万维网软件架构风格,目的是便于不同软件/程序在网络(例如互联网)中互相传递信息。需要注意的是,REST 是设计风格而不是标准
资源
指的是网络实体、网络上的一段具体信息。例如一段文字,一段音频,一段视频等等 **
表现层
指的是资源的表现形式。例如一段文字 Hello word 可以表现为文本格式、HTML 格式、二进制、URL…,对于同一段资源,表现形式可以不同
在 REST 中,URI 指向一个资源,URI 指向的是资源的实体,不代表它的表现形式 **
状态转换
客户端在和服务端通信时,势必涉及到数据和状态的变化,而 HTTP 属于无状态协议,这意味着客户端想要操作服务端的状态转换,必须要通过某种手段,来让服务器发生“状态转换”,而这种转换是建立在表现层上的 **
特点
- 资源由 URI 指定
- 对资源的操作,正好对应 HTTP 提供的方法 获取=>GET,创建=>POST,修改=>PUT,删除=>DELETE
- 通过操作资源的表现形式来操作资源
- 资源表现形式可以为 XML、HTML、JSON…
优势
- 可更高效利用缓存来提高响应速度
- 通讯本身的无状态性可以让不同的服务器的处理一系列请求中的不同请求,提高服务器的扩展性
- 浏览器即可作为客户端,简化软件需求
- 相对于其他叠加在HTTP 协议之上的机制,REST 的软件依赖性更小
- 不需要额外的资源发现机制
- 在软件技术演进中的长期的兼容性更好
最佳实践
第 0 级服务:一个 URI 做为服务端口,也只有一个 HTTP 方法传输数据。这种做法相当于是把 HTTP 降低为传输层使用,HTTP 只负责传输数据,不涉及业务逻辑 第 1 级服务:多个 URI 做为服务端口,不同的 URI 做为不同的调用入口,但使用同一个 HTTP 方法传输数据 第 2 级服务:多个 URI 做为服务端口,不同的 URI 做为不同的调用入口,同时使用多个 HTTP 方法传输数据 第 3 级服务:使用超媒体(hypermedia)作为应用状态引擎
误区
- URI 中使用动词:资源表示的一种实体,应该使用名词,对于某些动作也应该处理为名词