第九单元 DRF框架及APIView

9.1 基本概念

9.1.1 什么是前后端分离

前后端分离

  • 前:浏览器
    • HTML、CSS、Bootstrap、JS、JQuery、Vue、NodeJS、webpack
    • 体验为主:炫酷流畅兼容
  • 后:服务端
    • Jvm、springboot、Django、flask、tornado、
    • 三高:高并发、高可用、高性能
传统的不分离

用户在浏览器上发送请求,服务器端接收到请求,根据 Header 中的 token 进行用户鉴权,从数据库取出数据,处理后将结果数据填入 HTML 模板,返回给浏览器,浏览器将 HTML 展现给用户,不分离的核心就是模版,比如 Django 直接将返回数据到模版,通过模版表单将数据返回至后端

  • 业务耦合较强

那这样就有一个问题,从事不分离的开发者,一般需要懂数据库懂框架操作、懂模版前端,小型项目还好,一个人可以抗的下来,你可以加班,但如果项目较大,一个人无法独立完成,需要团队合作


  • 指责划分不明确

并且不分离的情况,所有的业务、代码、逻辑都在一套服务体系内,会造成团队之间沟通混乱,代码风格不统一,每个人的前后端技能水平层次不齐的水平,出了问题找背锅的人更慢,无法快速找到罪魁祸首

  • 开发成本较高

除此之外,不分离还有一个问题,现在的服务,比如一个电商平台,除了WEB端之外,还会有 IOS 端、安卓端的各种 APP,本质上这些软件 APP 用的都是同一套数据,但是现在除了每一套前端的应用界面,由于不分离的情况,还需要给每一个平台不同的 APP 开发多套后端,这个开发成本是很高的,需要很多很多的不同语言的开发者

  • 服务器压力较大

此外页面的渲染本应该是在客户端完成,但是现在都是在服务端渲染好之后再返回给用户,那么在高并发的情况下,会大量占用服务器的资源

  • 提高 SEO 速度,提高搜索引擎收录检索速度

当然,不分离也有好处,页面数据都是渲染好返回的,可以有效提高 SEO的速度

现在的前后端分离

数据渲染的工作在客户端浏览器,不需要服务端完成,服务端专注于提供数据

那么这就要求Django框架不需要返回一个模版页面,而是返回一套JSON数据,而由于JSON可以在多种语言中支持,是一种交互、兼容非常合适的语言格式,所以现在后台常返回的数据都为JSON格式的,这个过程也称作序列化

  • 部署解耦

前后端分离再就是部署压力较小,前后端分离部署,可以分离业务,起码在后端宕机时,前端还可以正常服务


  • 业务划分清晰,职责更为明确

后端工程师只需要专注于编写接口,从数据库提取数据,进行逻辑处理,并返回给前端,而前端怎么去渲染,怎么写样式,用什么前端,这都不是后端工程师需要考虑的,后端要做好的就一件事,写好接口就可以


  • 开发成本较低,一套后台可以支持多套前端渲染

一般来说,一套接口编写好之后,业务相同的情况下,是可以在多种 app 端、pc 端进行渲染展示的,不需要额外开发多套耦合的服务,这就很省钱了


  • SEO 优化较差,需要引入一些页面静态化手段

但是前后端分离也有不好的地方,在于页面数据的渲染是需要花费时间的,数据并不是渲染好返回给用户,所以可能会出现白屏时间,并且影响搜索引擎爬虫的检索收录

9.1.2 什么是restful风格

在前后端分离的应用模式里,API接口如何定义?

例如:对于后端数据库中保存了商品的信息,前端可能需要对商品数据进行增删改查,那相应的每个操作后端都需要提供一个API接口:

  • POST /add-goods 增加商品
  • POST /delete-goods 删除商品
  • POST /update-goods 修改商品
  • GET /get-goods查询商品信息

对于接口的请求方式与路径,每个后端开发人员可能都有自己的定义方式,风格迥异。

是否存在一种统一的定义方式,被广大开发人员接受认可的方式呢?

这就是被普遍采用的*API*的RESTful设计风格。

RestFul 规范建议
1. 域名要有标示

Restful 风格建议,Api 服务器的域名要尽量在专用域名之下

如:百度面向用户的站点地址为https://baidu.com

那么后端的接口地址可以为

https://api.baidu.com

也可以放在连接之后

https://baidu.com/api/

2. 路由中体现接口版本号

如果你的接口会不停的升级,那么建议你把接口的版本号维护在URL中,比如图灵机器人就是这么干的,API 的升级会把版本放入连接

https://api.baidu.com/v1/
https://baidu.com/api/v1/
http://openapi.tuling123.com/openapi/api/v2
3.使用合理的请求方式

对应操作,应该返回操作后的资源结果,比如获取数据,那就应该使用GET请求方式

如果是更新数据,那么建议你使用PUTPATCH方法

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值