理解restful

2 分钟读完

RESTful是什么?

从它的名称中我们可以看出,它是一个“形容词”,我们可以将它理解为一种服务架构。是什么架构我们一会再说。

我们首先要知道的是,目前的web程序越来越强大,已经不再是当初的纯静态,展示文档等简单的网页,而是越来越接近应用程序。在这个过程中,就遇到了一些问题,比如我们如何管理复杂的web程序,处理web客户端和服务器的分工合作,这就需要一套有效完全的体系,一种准则,或者说一种模式。 * 在具体地理解RESTful之前,我们需要知道REST(REpresentation **State Transfer)相关的几个名词。

资源(Resource)和状态(State):

REST是以resource(资源)为基础的:REST认为web应用程序的本质是就对resource进行操作。
什么是资源,举个例子,一本书是一个资源,那么这个资源就有对应的状态(state),比如这本书的书名作者内容出版日期新旧程度看到哪一页 等,这些就是这本书的状态。

客户端(Client)-服务器(Server)模型:

前面提到过,RESTful架构是针对客户端-服务器模式的web应用,在这类应用中,资源(当然,包括资源的状态)都存放在服务器,不管是你的还是别人的服务器。这些存放在服务器的资源,需要传输(按照HTTP:超文本传输协议)到客户端(浏览器)中使用。

表现层(Representation):

服务器和客户端之间的传输是通过文本的方式传输的,而所谓representation(表现层),就是存储了资源的状态的文本数据,用于在服务器和客户端之间传输。常见的就是JSON格式的和XML格式的数据,现在主要以JSON格式为主。

URI(Uniform Resource Interface):

URI是统一资源接口,也就是说,它是存储在服务器的资源的接口,在服务器外部可以通过这个接口访问或者操作服务器内的资源。URI的格式大家经常见到,比如http://google.com

转移(Transfer):

资源的状态,以表现层的形式,从服务器传输到客户端的行为,叫做状态的转移
*** 知道了这几个名词,我们来看一张图 REST架构的工作模式

这个图所展现的过程是:当客户端想要对服务器的资源做一些事情的时候,会向资源对应的的URI接口发送请求,在服务器内部,将资源的状态转化为表现层中的数据(JSON/XML),并且如果需要时会进行逻辑操作/计算,最后将最终的状态(State),通过表现层(Representation)转移(Transfer)到客户端。即所谓的‘表现层状态转移 ’。

这张图中有几个我们需要注意的点:

  • 客户端只能使用URI接口,而不能访问服务器内部。这种分层规定保证了该架构的可拓展性。
  • 因为web本身是无状态的,所以我们需要在请求(Request)中包含足够的上下文(Context) ,并且上下文包含的信息应该是自解释的。来让服务器能够独立完成所需要的操作,达到分层的目的。
  • 从服务器传输到客户端的过程中,服务器将表现层的数据放入HTTP Responsebody中和status一起传输到客户端 。
  • 在客户端向服务端发送的HTTP Request中,有几个主要内容:第一个是资源的接口URI,第二个就是对资源进行的操作(操作通过HTTP动词指定,四种HTTP行为是GET,POST,PUT,DELETE,分别对应查,增,改,删)。
  • URI应该与资源相关,多数情况下应该由名词组成,比如本网页的URLhttps://github.com/sputnikW/web-notes,而对资源进行的动作应该由四种HTTP行为来指定。

##总结 在我看来,RESTful架构的核心观念就是:将各种各样web应用的功能,都看做是对资源的操作,然后在这个基础上,根据HTTP的特征,设计的一套分层的架构模式,其具有以下优点:

  • 可拓展性
  • 简明
  • 可维护性
  • 结构清晰
  • 可移植性
  • 可靠性

参考资料:
理解RESTful架构-阮一峰的网络日志
REST API Tutorial网站视频
注:本文为个人观点,如果错误感谢指正。

更新时间: