emm终于要从学校毕业了,最近感觉懒懒的,一如既往。那我们今天来看看什么是restful架构吧,这个名词之前一直有所耳闻,但是却没有深入的了解。我觉得一下 的文章是对于restful api一个比较好的解释。
http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
以上是英语的资料
作者:Sevenvidia
链接:https://www.zhihu.com/question/28557115/answer/146660220
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
首先我们假设西雅图有个男孩叫小明,他是一个科比的粉丝,然后有一天小明想用电脑看科比的生涯集锦视频。他做了如下四步:
<img src="https://pic4.zhimg.com/50/v2-f8f425347ee764b873cc742de45decb3_hd.jpg" data-caption="" data-size="normal" data-rawwidth="1270" data-rawheight="828" class="origin_image zh-lightbox-thumb" width="1270" data-original="https://pic4.zhimg.com/v2-f8f425347ee764b873cc742de45decb3_r.jpg">
在这个活动中,主要涉及到了四个部件:
<img src="https://pic2.zhimg.com/50/v2-2189b57b7bc3425980d59f35c6470db9_hd.jpg" data-caption="" data-size="normal" data-rawwidth="1033" data-rawheight="421" class="origin_image zh-lightbox-thumb" width="1033" data-original="https://pic2.zhimg.com/v2-2189b57b7bc3425980d59f35c6470db9_r.jpg">
这大概就是一个传统的电脑软件的架构。现在我们看看如何把这个传统的电脑软件变成RESTful架构的软件。
我们把小明家的电脑主机从小明西雅图搬到加州的圣布鲁罗,而小明的显示器则仍然留在家里。
<img src="https://pic2.zhimg.com/50/v2-b3bc7a4cd3fa5663b01de8e23c89e481_hd.jpg" data-caption="" data-size="normal" data-rawwidth="740" data-rawheight="600" class="origin_image zh-lightbox-thumb" width="740" data-original="https://pic2.zhimg.com/v2-b3bc7a4cd3fa5663b01de8e23c89e481_r.jpg">
然后我们把之前连接电脑主机和显示器的“电线”换成“互联网”,并且把四个部件(显示器,主机,视频文件,暴风影音软件)的名字换成:客户端,服务器,资源,浏览器。
<img src="https://pic4.zhimg.com/50/v2-2a19cd10b70bdc272a40f3d3d6edea06_hd.jpg" data-caption="" data-size="normal" data-rawwidth="1477" data-rawheight="685" class="origin_image zh-lightbox-thumb" width="1477" data-original="https://pic4.zhimg.com/v2-2a19cd10b70bdc272a40f3d3d6edea06_r.jpg">
为了在茫茫互联网世界中准确快速的找到那台服务器并观看“科比集锦”,我们需要给在加州圣布鲁罗的这台服务器加一个标识符,也就是常说的Url。 同时,为了区分服务器中的“科比集锦”和“麦迪集锦”,我们也需要给这两个视频单独加上标识符。
<img src="https://pic1.zhimg.com/50/v2-a4e4961763b469b7b199ca12455da457_hd.jpg" data-caption="" data-size="normal" data-rawwidth="1097" data-rawheight="600" class="origin_image zh-lightbox-thumb" width="1097" data-original="https://pic1.zhimg.com/v2-a4e4961763b469b7b199ca12455da457_r.jpg">
这个服务器当然不只有科比和麦迪的视频,还有其他千千万万的视频,以及音乐,表单和网页等等东西。服务器上放不下这么多东西,所以需要把这些东西移到数据库里面放着。
<img src="https://pic1.zhimg.com/50/v2-1b4ef63f64ffd669db3d457d01e0b880_hd.jpg" data-caption="" data-size="normal" data-rawwidth="1266" data-rawheight="618" class="origin_image zh-lightbox-thumb" width="1266" data-original="https://pic1.zhimg.com/v2-1b4ef63f64ffd669db3d457d01e0b880_r.jpg">
这样,整个RESTFul的架构基本上就成型了。我们再来看看小明今天应该如何观看科比的视频。
步骤1. 小明打开浏览器。注意此时小明家中的电脑硬盘里面没有存任何视频,视频存在加州圣布鲁罗的数据库里面。
<img src="https://pic1.zhimg.com/50/v2-1b4ef63f64ffd669db3d457d01e0b880_hd.jpg" data-caption="" data-size="normal" data-rawwidth="1266" data-rawheight="618" class="origin_image zh-lightbox-thumb" width="1266" data-original="https://pic1.zhimg.com/v2-1b4ef63f64ffd669db3d457d01e0b880_r.jpg">
步骤2.小明输入http://www.youtube.com/kobehighlight客户端通过互联网找到http://www.youtube.com的服务器,然后服务器根据kobehighlight在数据库里找到了科比的视频, 并把视频数据通过互联网传回给了小明的客户端。这个操作就是我们常说的GET。
<img src="https://pic1.zhimg.com/50/v2-1663c5bbec2bdbf05042c57b2d5ded9c_hd.jpg" data-caption="" data-size="normal" data-rawwidth="1284" data-rawheight="618" class="origin_image zh-lightbox-thumb" width="1284" data-original="https://pic1.zhimg.com/v2-1663c5bbec2bdbf05042c57b2d5ded9c_r.jpg">
步骤3. 小明开心地观看传回来的视频,但是他不想在视频中看到克雷汤普森。
<img src="https://pic3.zhimg.com/50/v2-5c50be62a6a6c5cb5f5f1185b58275e6_hd.jpg" data-caption="" data-size="normal" data-rawwidth="1266" data-rawheight="618" class="origin_image zh-lightbox-thumb" width="1266" data-original="https://pic3.zhimg.com/v2-5c50be62a6a6c5cb5f5f1185b58275e6_r.jpg">
步骤4. 他通过浏览器剪掉了克雷汤普森的部分,点击了”提交“,然后服务器接到这个请求之后把修改保存到数据库里面,并且告诉小明”你的修改已经保存。这个操作就是我们常说的POST。
<img src="https://pic2.zhimg.com/50/v2-ae77c7ab3cc4b47fd268c3ed90d2a069_hd.jpg" data-caption="" data-size="normal" data-rawwidth="1266" data-rawheight="618" class="origin_image zh-lightbox-thumb" width="1266" data-original="https://pic2.zhimg.com/v2-ae77c7ab3cc4b47fd268c3ed90d2a069_r.jpg">
我们来对比一下之前的单机软件。
单机软件的文件路径 = REST软件的Url
单机软件的打开操作 = REST软件HTTP的GET
单机软件的保存操作 = REST软件HTTP的POST
那么非REST架构软件(SOAP)和REST架构软件之间的的区别是啥呢?
其实区别就是在于对应的取资源的方式,SOAP用的是自己规定好的格式,而REST用的是大统一的Url格式。所以你想从SOAP软件中存取操作,必须事先知道它的读写格式;而REST,你只需要有一个浏览器就可以了。
这里我尽量使用了”通俗易懂“的方式来解释这个问题,希望能帮到题主。具体当然还有很多细节,但是,这大概就是一个REST软件的样子。