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表示全网可见,在http://zhihu.com这个包里question就是函数名,27785028是路径参数,表示题号。

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

当然了,REST的运用是非常灵活的,以上只是对标准模式下的一种描述。

REST的含义和RESTful架构入门的更多相关文章

  1. RESTful架构入门

    理解RESTful架构 - 阮一峰的网络日志http://www.ruanyifeng.com/blog/2011/09/restful RESTful API 设计指南 - 阮一峰的网络日志http ...

  2. 追踪app崩溃率、事件响应链、Run Loop、线程和进程、数据表的优化、动画库、Restful架构、SDWebImage的原理

    1.如何追踪app崩溃率,如何解决线上闪退 当 iOS设备上的App应用闪退时,操作系统会生成一个crash日志,保存在设备上.crash日志上有很多有用的信息,比如每个正在执行线程的完整堆栈 跟踪信 ...

  3. CMDB资产管理系统开发【day27】:理解RESTful架构

    理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(hig ...

  4. Django——RESTful架构

    一.REST简述 来自维基百科的解释: 表现层状态转换(REST,英文:Representational State Transfer)是Roy Thomas Fielding博士于2000年在他的博 ...

  5. 初识Restful架构

    1.对Rest(Restful)的理解 理解RESTful架构 怎样用通俗的语言解释REST,以及RESTful 维基百科:Representational state transfer 2.Rest ...

  6. RESTful 架构基础

    源自:https://mp.weixin.qq.com/s/wEr2jAVphzB1G_MISlLU0w REST(Representational State Transfer)架构风格是一种世界观 ...

  7. 理解RESTful 架构

    REST是所有Web应用都应该遵守的架构设计指导原则. Representational State Transfer,翻译是”表现层状态转化”. 面向资源是REST最明显的特征,对于同一个资源的一组 ...

  8. 学习RESTFul架构

    一.RESTFul介绍 1.一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机 ...

  9. 理解RESTful架构——Restful API设计指南

    理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...

随机推荐

  1. Android process 的启动流程

    Android process 的启动流程 1.android启动时所运行的进程: USER    PID     PPID    VSIZE    RSS    WCHAN         PC   ...

  2. Android event logcat的研究

    经常有这样的需求:在程序A启动之后,在这个程序上覆盖一个界面,让用户输入密码后才能启动程序A,这类场景主要集中在安全软件中. 那应该怎样得知某某程序启动了,系统没有相应的广播,这很难知道程序启动了. ...

  3. 转: Photon 3.4 Changed Logs ..

    最新版了.修了很多bug. Photon 3.4 http://doc.exitgames.com/en/onpremise/current/reference/version-history/pho ...

  4. (转) Myisam和Innodb索引实现的不同(存储结构)

    转自 :  https://blog.csdn.net/donghaixiaolongwang/article/details/60751543

  5. OpenCV-Python cv2.imdecode()和cv2.imencode() 图片解码和编码

    cv2.imdecode()函数从指定的内存缓存中读取数据,并把数据转换(解码)成图像格式;主要用于从网络传输数据中恢复出图像. cv2.imencode()函数是将图片格式转换(编码)成流数据,赋值 ...

  6. 剑指offer-第四章解决面试题思路(二叉收索树和双向链表)

    题目:输入一个二叉收索树,将二叉搜索树转换成排序的双向链表.要求不能创建节点,只能将链表中的指针进行改变. 将复杂的问题简单化:思路:二叉收索树,本身是一个排序结构,中序遍历二叉收索树就可以得到一组排 ...

  7. CentOS 7 : Docker私有仓库搭建和使用

    系统环境: CentOS 7.2 192.168.0.179:docker仓库 192.168.0.60:客户端 安装并启动docker yum -y install docker systemctl ...

  8. mysql之 explain、optimizer_trace 执行计划

    一.explain mysql> explain select host,user,plugin from user ;+----+-------------+-------+------+-- ...

  9. 18.Selenium+Python案例 -- 豆瓣

    一.具体代码实现: from selenium import webdriver driver = webdriver.Firefox() driver.get('https://www.douban ...

  10. fragment在水平/垂直时的应用

    直接看代码 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedIns ...