zoukankan      html  css  js  c++  java
  • REST的含义和RESTful架构入门

    REST的含义和RESTful架构入门


     提纲

    1、REST架构的作用

    2、REST和RESTful

    3、REST的具体含义

        3.1 资源实体

        3.2 资源实体的表现层

        3.3. 资源实体某一变现层的状态转化

        3.4 REST原则含义的总结

    4、RESTful架构

    5、什么是RESTful API

    1、REST架构的作用

    ==================

    在互联网出现之前,软件和网络是两个不同的领域,很少有交集。软件开发主要是开发针对单机环境的软件,比如以前的杀毒软件卡巴斯基、扫雷之类的;而网络则主要研究系统之间的通信。

    但是,互联网的出现以后,逐渐出现了基于互联网的网络软件系统,于是,这两个领域开始融合。

    现在我们必须考虑,如何开发在互联网环境中使用的软件,即我们日常所说的网站。越来越多的人开始意识到,网站即软件,而且是一种不同于以前单机软件的新型软件。网站开发,完全可以采用软件开发的模式。

    RESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,正在被越来越多网站的采用。

    以前网站都是前端和后端混在一起的,比如Jsp页面中同时有jsp代码和html代码。这种情况在桌面时代问题不大,但是,近年来移动互联网快速发展,各种类型的客户端逐渐出现,比如android手机、android平板、iphone、ipad等,开发者想为所有的客户端提供一套统一的服务器端程序,RESTful架构的服务器端程序可以做到。RESTful架构的服务器端可以通过一套统一的接口同时为Web,iOS和Android提供服务。

    如上面的图所示,服务器端统一提供一套RESTful API,webapp+ios+android作为同等公民调用这套API。 

    2、REST和RESTful

    =================

    REST 是REpresentation State Transfer的缩写,这个词首先于2000 年出现在Roy Thomas Fielding 的博士论文中。Roy Thomas Fielding是一个很重要的人物,他是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。所以,他的这篇论文一经发表,就引起了关注。

    Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。这个词组可以翻译为"表现层状态转化"。如果一个架构符合REST原则,就称它为RESTful架构

    3、REST的具体含义

    =================

    这里对REST的具体含义和REST架构的具体内容进行说明。

    3.1 资源实体

    -------------------

    在REST的名称"表现层状态转化"中,省略了表现层的定语。"表现层"其实指的是"资源"(Resources)的"表现层"。

    所谓"资源",就是网络上的一个实体。它可以是一段包含在html文件中的文本、一张格式为jpg的图片、一首mp3音乐文件、一种服务等类似的一个具体的实体。通常用一个URI(统一资源定位符)指向它来在网络上定位它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以了。此URI就成了每一个资源的地址或是标识符。

    这样以来,上网就可以看成是访问一系列的URI,得到一系列的实体的过程。也就是客户端和服务器端的传递实体进行互动的过程。

    3.2 资源实体的表现层

    -------------------------------

    "资源"是一种实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。比如,文本是一个资源实体,它的具体表现形式可以用txt格式,也可以是HTML格式、XML格式、JSON格式等;一个图片是一个实体,它的表现形式可以可以是jpg格式,也可以是png格式。

    这就是资源和资源的表现层的关系,就是实体和实体的外在形式的关系,但是需要知道的是,一个实体总是以一种外在表现形式存在的。

    URI只代表资源实体,不能代表它的表现层。所以,严格地来讲,很多网址最后的".html"后缀名是不必要的,因为这个后缀名表示的是实体的格式,属于"表现层"范畴,而URI应该只代表"资源"实体,至于资源实体的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是指定"表现层"的地方。

    3.3 资源实体某一表现层的状态转化

    -------------------------------------------------

    访问一个网站的过程,就是客户端和服务器端的一个互动过程。具体来说,就是客户端不断通过URI来请求服务器端的资源实体,同时服务器端把资源实体通过HTTP响应消息发送给客户端。

    Web的通信协议是HTTP协议,它是一个无状态协议。因此,客户端和服务端交互过程中的所有的状态都保存在服务器端。

    因此,客户端操作服务器端,就是通过某种手段,使服务器端的实体发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,因为客户端总是和服务器端实体的某一个表现层进行交互,所以就是"表现层状态转化"。

    客户端用到的手段,只能是HTTP协议。也就是说,在上网的过程中,客户端通过HTTP协议使得服务器端实体的表现层发生了状态的变化,这就叫做“表现层状态转化”。

    客户端具体用HTTP的什么东西才能使服务器端实体的表现层发生状态变化呢?

    客户端操作服务端实体状态的手段,具体来讲,就是HTTP协议中四个表示操作方式的动词——GET、POST、PUT、DELETE。客户端通过这四个动词来操作服务器端。

    它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。也就是说,客户端通过HTTP协议的GET、POST、PUT、DELETE来对服务器端的实体进行增删改查,从而改变服务器端实体的状态。

    3.4 REST原则含义的总结

    -------------------------------------

    以上介绍的就是REST原则的具体含义和基本要求。

    总结一下,有如下三个关键点:

    (1)使用URI来标识服务器端的资源实体,每一个URI代表一个资源。

    (2)客户端和服务器之间,传递这种资源的某种表现层。客户端在请求服务器端的资源实体的时候,请求的是资源的某一种表现层,而服务器端在响应客户端的时候,也是给出请求的实体的对应表现层。

    (3)客户端通过四个HTTP动词,对服务器端资源进行操作,从而使服务器端的资源实体发生状态变化,也就是"表现层状态转化"。

    4、RESTful架构

    ==============

    上面讲清楚了REST的具体含义,如果一个互联网软件系统的架构符合REST的3点基本要求,那么这个互联网软件系统的架构就是RESTful架构。

    5、什么是RESTful API

    ======================

    这里通俗地理解一下什么是RESTful API

    以下是两种解释:

    解释一:

    RESTful API,无论它的名字多么高大上,它本质还是一个HTTP请求,POST也好,GET也罢,都是不同的数据提交方式。所以,能够决定一个Rest API的也就:URI、参数、请求方式、请求头等。

    解释二:

    REST就是用http协议实现的函数声明。
    协议名加域名表示可见性。
    url域名后面的部分可以看成函数名(可以是多级的),也可以表示参数。
    url参数也可以作为函数参数(通常是与查询相关的参数)。

    http request header里面的是函数参数(通常是一些身份验证、函数版本方面的参数)。
    http request body里面的报文数据也可以作为函数参数(通常是与插入更新相关的参数)。
    http request method表示当函数名相同时,重载的是增删改查哪个操作(通常,POST表示增,DELETE表示删,PUT表示改,GET表示查)。
    http response就是函数返回值了。

    举例来说,以知乎27785028号题目的url来讲,https://www.zhihu.com/question/27785028,http://zhihu.com表示全网可见,在这个包里question就是函数名,27785028是路径参数,表示题号。

    当我回答你的时候,请求的是POST下的重载,我输入的内容就作为报文参数。
    当知友访问这个链接的时候,浏览器接收到的http响应就是GET重载下的返回值。

    当然了,REST的运用是非常灵活的,以上只是对标准模式下的一种描述。
  • 相关阅读:
    Linux下安装firefox最新版
    php开发网站编码统一问题
    WordPress前台后台页面打开慢的解决方法
    超链接标签简单的几个样式属性
    jQuery结合Ajax实现简单的前端验证和服务端查询
    Javascript配合jQuery实现流畅的前端验证
    Code-Validator:验证只包含英文字母
    Code-Validator:验证小数
    Code-Validator:验证正整数
    Code-Validator:验证非负整数
  • 原文地址:https://www.cnblogs.com/zhangzl419/p/7294117.html
Copyright © 2011-2022 走看看