第一个提出RESTful的肥佬Fielding是HTTP协议的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。在它的博士论文里面,就网站开发中引入软件设计(对,就是传统的单机软件开发)中的架构经验,提出了该通信架构
。
由于这货是HTTP的设计者,所以该通信架构,在使用方面,可以完美依托现有的HTTP协议(当然,现在很多优秀的RPC框架也在采用RESTful)。
Representational State Transfer直译过来,就是表现层状态转换。这里的表现层,我们可以暂且理解为web应用的前端页面。每次发起一次HTTP请求,获得该网页的时候,都是对该页面或者其代表资源的状态转换,可以对应于我们SQL里面的增删改查~
好了,HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化",三个点:
- 每一个URI代表一种资源;
- 客户端和服务器之间,传递这种资源的某种表现层;
- 客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。
细化到我们的api设计上,典型的应用场景,就是应该砍掉所有URL里面的动词,诸如 /message/get/1
应该改成/message/1
,根据请求方法,GET(获取message资源),DELETE(删除message),PUT(更新message),POST(新增message)。
换种方式理解,用户能看到的资源,都是由服务端渲染控制返回的,相当于浏览器上的静态资源,所以用户看到的URL,本应该都是动词。