浅谈前后端分离及RESTful API

版权声明:如有转载复制请注明出处,博主QQ715608270,欢迎沟通交流! https://blog.csdn.net/qq_41000891/article/details/84071909

一、综述

       前端、后端这两个名词无数次出现在专业应用当中。从最开始不懂得网站上的内容从何而来,到现在经手几个项目后对前后端和互联网有了专业上的粗浅认知,所学越多,需学越多。当专业课上还在讲解着基于C#的ASP.NET开发中,如何拖动Button按钮,如何“快速”构建出一个所谓的前端,如何点击进入相应的后端语句时,前后端分离技术早已横行于世。顾名思义,前后端分离,就是前端代码和后端代码切割开来,由两批不同的人来开发,他们只通过某个通道建立联系,这个通道就是“数据传输”。现阶段,前端工程化开发逐渐完善并且成为前端开发主流,Vue、React、Angular等大前端框架让开发者眼前一新,甚至之前想都不敢想的JS也可以基于Node生态,用来进行服务端开发。

二、为什么使用前后端分离

       1. 前后端分离的潮流与多端应用的开发密不可分。PC端,pad端,移动端App(安卓/IOS)的发展,使得前后端一体的开发模式十分笨重。

       2. 基于Vue、React、Angular的SPA单页应用流行,也助力了前后端分离的趋势。

       3. 在之前的前后端一体的开发中,前端人员和后端人员的开发职责和界限不清楚,他们要想完成整个开发必须相互渗透对方的技术栈,这就导致了很多小公司,前后端一个人来做,最后界面一塌糊涂,毫无用户体验。就比如PHP和JAVA的template比较复杂,会嵌入很多后端的语法,如果进行html重构,就会显得非常复杂。

       4. 在前后端一体的开发中,开发效率相对低下,前后端人员需要相互等待,更多的情况下,前端工程师会一直配合后端,使得他们能做的事情非常有限,只是源源不断提供静态的html。

       5. 后台开发语言和模板语言高度耦合,导致开发语言严重依赖。(如Python到JAVA的重构)

三、前后端分离的缺点

      1. 做前后端分离,学习门槛会增加。对于前端开发人员来说,以前很多后端来完成的事情,如模板语法,依据数据的显示全部交由前端处理,无论是用户体验还是数据交互,前端工程师必须进行精心地设计。在前端工程化的项目中,路由,性能优化,懒加载等等显得更为重要。

      2. 数据依赖导致文档的重要性增加。在以往的前后端一体的开发模式中,后端开发人员是不需要太多考虑各项数据交互的字段和接口怎么定义,也不需要特别清楚地去记录各个接口。但在前后端分离的开发中,接口文档是必须的,它直接影响了前端开发的效率以及准确度。

      3. 前端工程师的工作量明显增加。这也就是为什么在大前端时代,前端工程师会崛起,薪资会增加的原因!

      4. SEO的难度增大。因为如果使用前后端分离的模式,就意味着,所有的数据交互采用的是Ajax或者通过网络请求,一般的爬虫我们可以使用urllib或者Scrapy或者Request,使用request爬取的时候只能爬取到源码,无法爬取到数据。SSR也就体现的尤为重要。

      5. 后端开发者模式迁移的成本增加。

 

四、什么是RESTful API

      一句话:RESTful API是目前前后端分离的最佳实践,它是一套标准,一个规范,而不是一个框架。

      标准对于开发者来说是十分重要的,就像HTTP、HTML这些都是标准。

      在前后端分离的时候,我们会设计API,如果我们在设计的时候依据RESTful准则,那么这套API这可以称作RESTful API。

      1. RESTful API轻量,直接通过http或者https,不需要额外的协议,一般有四种常用操作post/get/put/delete

      2. RESTful API面向资源,一目了然,具有自解释性。

      3. RESTful API数据的描述十分简单,基于Json或XML的数据格式进行数据传输。

      再谈几个概念:

      1.资源(Resources) 

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

      所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。

      所谓"上网",就是与互联网上一系列的"资源"互动,调用它的URI。

      2.表现层(Representation)

      "资源"是一种信息实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式,叫做它的"表现层"。

      比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。

      URI只代表资源的实体,不代表它的形式。严格地说,有些网址最后的".html"后缀名是不必要的,因为这个后缀名表示格式,属于"表现层"范畴,而URI应该只代表"资源"的位置。它的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对"表现层"的描述。

      3.状态转化(State Transfer)

      访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。

      互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"。

      客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。

      综合上面的解释,我们总结一下什么是RESTful架构:

    (1)每一个URI代表一种资源;

 (2)客户端和服务器之间,传递这种资源的某种表现层;

 (3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。

五、阮大神RESTful API讲解链接

      http://www.ruanyifeng.com/blog/2011/09/restful.html

      http://www.ruanyifeng.com/blog/2014/05/restful_api.html

猜你喜欢

转载自blog.csdn.net/qq_41000891/article/details/84071909