微信号:imooc-com

介绍:慕课网是一个超酷的互联网、IT技术免费学习平台,创新的网络一站式学习、实践体验;服务及时贴心,内容专业、有趣易学。专注服务互联网工程师快速成为技术高手!

对话全栈大咖: 如何开发前后端分离的系统 | 独家

2017-09-22 08:20 _bobby



本文是慕课网官网开展的“花式填坑”’话题活动,嘉宾_bobby全栈工程师与学员的在线对话整理而成。点击“阅读原文”,可参与最新一期话题活动之与Google大佬聊聊“成功猿(媛)”的标配。



作者 | _bobby

编辑 | color



前后端分离开发已成IT领域的大势所趋,RESTFul API开发作为前后端分离最成熟的解决方案,什么前提选择使用?有哪些优势?在开发RESTFul API的系统中会遭遇哪些难题?


今天_bobby全栈工程师用最通俗易懂的方式,带你深入了解前后端分离系统的开发。





01

什么是前后端分离



Q:到底什么是前后端分离?有什么清晰的界限吗?目前大概知道JSON和RESTful两个方案,还有其它的吗?


_bobby:前后端分离就是后端不再直接返回html, 直接返回数据,当然数据格式可以自己指定比如xml, json、yml都是可以的, html页面由前端去填充这些数据到dom中。 这里界限如果是指开发模式的话, 差别还是不小的, 虽然只是数据交互使用了比如json这种模式看起来分别不大, 但是实际上这个对前后端都会有不小的影响。


restful 开发只是一个规范用来规范前后端分离开发中的各个细节。 json不是开发方案, 只能是一种数据格式而已, 因为比较简单所以现在很流行, 但是数据本身的描述性上比不上xml, 但是xml数据量会大一些, 除了resful api开发规范之外, 还有一个graphql 这个是facebook近几年开始倡导的开发模式,但是目前还没有restful api流行, 而且对后端的要求会更高, 不过灵活性比restful api高不少。



Q:后台开接口,前端用node做路由渲染页面这种模式算是前后完全分离了吧?


_bobby:算是, 前后端用什么技术和语言不重要, 主要是返回不再像传统的开发模式一样直接返回html, 而且页面直接由前端技术来渲染就是前后端分离



Q:restful api 是什么东西,是软件吗?


_bobby:restful api实际上就是一整套在开发前后端分离的时候的一种规范, 大家按照这种规范开发出来的接口后期维护以及别人理解都会容易的多。





02


前后端分离的好处




Q:老师,你认为前后端分离的意义大吗?意味着什么?


_bobby:意义很大啊。 前后端分离意味着后端可以不用去了解前端的代码, 前端不用学习后端的模板语法, 前后端不需要等到对方做好了才能调试了, 尽量在保证自己端的代码写好以及少bug, 这样在后期真正联调的时候就可以尽量避免bug了,而且前后端分离还意味着pc端、app、后台管理系统等各种系统可以尽量多的共用接口了



Q:restful api开发框架有哪些优势?


_bobby:首先需要明确一下你的问题的意图:


1. 你是想问restful api开发模式相对传统开发模式的优势?

2. 你是想问用resful api框架相对传统mvc(mtv)开发框架的优势?


我这里先假设你问题是第二问题, 如果想要知道restful api开发框架的优势, 那就大了去了, 要搞懂为啥优势大, 就需要知道传统开发模式转restful api开发模式需要解决哪些问题? 


resful api开发模式相对传统模式不是大家以为的只是增加了增删改查的功能而已, 增删改查哪个框架都能做, restful api不是传统的模式变成json返回就行了, restful api开发是一整套开发理念比如 用put get post patch来代表操作的目的, 第二所有的数据全部用json返回, 这里就设计到将所有数据转换为json, 只是这项功能里面还包括了如果遇到image file等这种类型的字段我们需要加上完整的域名? 还有我们需要去处理restful api开发的返回消息的规范性? 还有作为一个restful api后台我们需要同时能处理用户传输过来的json数据 , 那如果用户传输用xml呢, 如果用yml呢? 如果用户直接用html的form表单提交呢, 这些你怎么办? 还有些分页的处理也会有区别, 问题太多了, 如果是只是简单的写几个json返回当然用传统的开发模式就行, 但是那不是restful api开发模式, restful api开发是一整套开发规范, 这些用传统的框架肯定都能做出来, 但是工作量有多大呢?




03


前后端分离开发的注意事项




Q:什么时候选择前后端分离的开发模式?


_bobby:在开发过程中相信大家经常会遇到一个问题, android端、ios端、pc端、 后台管理系统如果使用传统的mvc开发模式, 只要页面不一样 我们都得给对应的系统写一套后台, 而且很多页面还需要后端去填充数据到html中、 但是前后端分离的开发模式我们只需要把接口写好, 其余都不用管让前端去协调各个接口之间如何配合。 


这种模式最大的好处就是适应性很强。 当然还有个很大的好处就是前端不用再等待将页面写好了然后交给后端, 然后后端再将代码改成模板语言了, 当然如果前端熟悉后端模板语法, 后端当然就很喜欢了, 但是前端往往不愿意去学习后端的模板语法,更喜欢用前端自己的模板语法。 前后端分离解决了这个问题。


但是Restful api还是有缺点, 最大的问题就是seo, 爬虫爬不到, 百度就会给你降权, 对于那种需要流量的网站来说,这个是不太接受的, 所以后面就有了ssr技术, 在服务器端渲染好静态页面直接给前端, 这样爬虫就能爬取到了, 而且有些系统比如内部系统或者后台管理系统这种根本就不在乎seo的直接就用restful api开发就行了。


除了上面的问题以外还有就是数据格式依赖严重, 如果后端改了某个字段的名称, 前端也得跟着改, 在以前这种改动后端自己就可以一个人完成,但是分离之后得前端去改了, 如果返回格式变了,前端变动更大。 


还有就是文档变得很重要了我们得去维护文档了,因为前后端分离脱离了文档,后期想维护能麻烦死。不管如何前后端虽然有缺点,但是由于优点很明显,当然聪明的程序员会去慢慢解决这些缺点而让这种开发模式越来越流行。



Q:asp.net的mvc框架,是否能实现前后端分离?


_bobby:当然能, 如果只是把前后端分离理解为json返回,当然所有的web框架都能轻松做到, 但是前后端分离是一种开发模式, 没有技术难点, restful api则是前后端分离开发的一种开发规范, 并不是什么技术。 如果要用restful api开发的话 作为一个初学者建议从相应的框架开始, 你很快会发现和mvc开发模式相比,只是数据交互方式不一样而已, 其余都是一样的, 所以切换是非常容易的。



Q:在开发RESTFul API的系统中有哪些难点?求教避坑!


_bobby:没有什么技术上的难点, 重要的是开发模式的转变可能需要你适应一下, 但是当你用熟练之后, 你自然就会知道什么时候该用什么模式开发了。



Q:restful api开发框架怎么选?


_bobby:看你熟悉的语言和已有的框架了 比如你熟悉java就选java对应的框架 如果你熟悉python就选择基于python里面最你熟悉的框架开发的restful api开发框架就行了, 选择一个最成熟的框架, 最重要的是开始用, 而不是一直徘徊在要不要用以及用什么框架



Q:前后端分离中,如何维护庞大的API文档以及API测试?


_bobby:这是一个几乎没有结论的问题


第一,关于文档的解决不管是大公司还是小公司都一直没有一套好的解决防范, 都是在规范文档上下功夫, 大公司对文档的实时性以及文档的写作规范要求是很严格的, 所以很多大公司实际上可能有一半甚至更多的时间都在写文档,当然这里的文档不一定是前后端分离系统才具有的文档。 所以说文档写作比较费时,维护比较费力。这种在很多大公司特别是对文档要求很高的企业几乎是不可避免的,这些公司对文档甚至可能比代码本身还重要,因为他们的要求是可以没有代码但是一定要有文档, 所以对她们来说愿意支付钱让员工花费很多时间来维护代码。 因为文档质量高了还原代码还是很容易的。 


但是对于中小公司不一样,开发人员不太愿意把时间花费在写文档和维护文档上, 公司也不会强制要求文档的质量,即便是这样在比如前后端这种没有文档不行的开发模式下, 我们尽量去使用已有的自动文档解决方案, 如果文档实在满足不了要求,首先考虑的也应该是否可以去修改自动生成文档的源码来满足自己的要求, 而不是一味的去手写文档。 因为对小公司来说代码快速迭代以及已有功能尽量发现和解决bug才是第一位。





04


对比GraphQL



Q:RESTful vs GraphQL。请问 Bobby 老师,Facebook 提出的 GraphQL 是否冲击当前的 RESTful 前后端交互标准?GraphQL能够更加灵活的控制数据查询粒度,而且能够与 React 等前端框架更好的结合。请问您怎么看 GraphQL 的前景?有必要加大对 GraphQL 的关注力度吗?



_bobby:前景应该不错, 但是目前从找工作的角度来看的话, 要超过restful api应该还需要一段时间,毕竟开发人员已经接受了restful api的开发模式, GraphQL虽然理念新, 但是相关框架是否成熟以及是否有前端开发人员配合都需要时间,还有就是这种开发模式是否还是有对应的坑,都需要观察。 


从自身的角度来看最好先将restful api开发模式学好, 然后自己尝试GraphQL开发模式, 毕竟graphql的提出也是因为restful api的开发模式中的不足才提出来的, 所以对于自身来说先自己体验好restful开发模式, 等到自己真正体验好了不足以后再去学习graphql会动力十足。 毕竟github也开始使用graphql了。





作者介绍



_bobby:Python全栈工程师,具有多年Django开发的经验, 一直致力于通过Django完成Web全栈开发。现任创业公司的CTO,无论后台开发、前端开发,还是移动端开发,一直致力于通过Django和前端打造高效的全端开发技术栈。


在慕课网出品了《django+xadmin打造在线教育平台》《python分布式爬虫打造搜索引擎》实战课程,深受同学们的追捧。


近期还他结合自己多年的资深技术领域开发经验,结合最主流的前端框架Vue,给你规划了一条后端进阶全栈开发的最佳捷径《Vue+Django REST framework 打造生鲜电商项目》


——————————————————————————————



【_bobby 出品的教程如下】


点击下图,即可查看 ↓







-------------------------------------------END------------------------------------------




慕课网,程序员的梦工厂







 戳原文,最新一期话题邀请了Google大佬,快来提问吧!


 
慕课网 更多文章 慕课网@你,一大波IT好书推荐! 10年从业腾讯、小米前端工程师对前端新人的忠告 凡哥,不哭,十年数据库经验大师教你全方面管理数据库隐私 [有人@你]直通腾讯、百度、阿里的实习机会,不看学历,看实力! 有了这样的编程学习工具,再学不好,就是你不努力了!
猜您喜欢 野兽成长史:张颖搭手傅盛在2008 使用JavaScript修改伪类样式的方法总结 Shadowsocks 原理简介及安装指南 每日安全动态推送(08-06) CBD商圈人群分析——北上广深商圈人群画像分析