REST是什么
REST一词,是由HTTP协议的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席罗伊·托马斯·菲尔丁(Roy Thoms Fielding)于2003年在他的博士论文中所提出的。REST一词,全称为Representational State Transfer
,翻译过来,就是表现层状态转化
,是目前所流行的一种互联网软件架构。如果一个架构符合REST原则,那么它就是RSETful架构
由名称理解REST
REST的名称“表现层状态转化”中,省略了主语。表现层,实则上指的是“资源(Resource)”的表现层
1、什么是资源?
资源,对应的就是网络上的一个实体。网络上常见的一段文字、一张图片、一段音频、一个视频等,都可以称之为资源,而这个资源,可以使用URI(Uniform Resources Identifier)来唯一确认,我们要获取这个资源,只要访问它的URI便可。
2、表现层
表现层,指的就是资源
所具体呈现出来的形式。比如文本可以用txt
格式表示,也可以用HTML
、JSON
等来表示。我们都知道,URI只能表示资源位于哪里,却不能表示资源的形式。我们可以见到有些网址最后是以.html
结尾的,但是这其实是不必要的,因为严格而言,.html
指出了文本的表现形式(是HTML格式),但URI的作用应该只代表资源的位置
,而它的具体表现形式,应该由HTTP Request Header
中指定(如Content-Type
)
3、状态转换
HTTP是无状态的协议,这意味着所有的状态都由服务器进行保存。如果客户端想要和服务器交互,就需要通过某种手段,让服务器发生状态转换
。而这种状态又是建立在表现层之上的,所以就称为表现层状态转化
了。而客户端所采取的手段,只能是HTTP协议,我们都知道,HTTP协议的HTTP Request报文,是以动作开始的(GET、POST、PUT、DELETE),而这四个动作,可以分别对应对表现层的四个基本操作:GET获取资源、POST新建资源(或者更新资源)、PUT更新资源、DELETE删除资源
综述
总结而言,RESTful架构,应该满足以下的基本特征:
(1)每个URI代表一种资源
(2)客户端和服务端之间,传递这种资源的某种表现层(比如服务器输出JSON,客户端获取JSON)
(3)客户端通过GET/POST/PUT/DELETE,对服务器资源操作,实现表现层状态转换
(4)客户端的动作是动词,URI不应该再包含动词,而是使用名词描述