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的运用是非常灵活的,以上只是对标准模式下的一种描述。
  • 相关阅读:
    nullnullConnecting with WiFi Direct 与WiFi直接连接
    nullnullUsing WiFi Direct for Service Discovery 直接使用WiFi服务发现
    nullnullSetting Up the Loader 设置装载机
    nullnullDefining and Launching the Query 定义和启动查询
    nullnullHandling the Results 处理结果
    装置输出喷泉装置(贪心问题)
    数据状态什么是事务?
    停止方法iOS CGD 任务开始与结束
    盘文件云存储——金山快盘
    函数标识符解决jQuery与其他库冲突的方法
  • 原文地址:https://www.cnblogs.com/zhangzl419/p/7294117.html
Copyright © 2011-2022 走看看